Unix/Linux inet守护进程

1. 服务器模型存在的问题

典型Unix系统可能存在许多服务器, 都只是等待客户请求的到达, 如FTP, Telnet, Rlogin, TFTP等. 4.3BSD之前, 这些服务都有一个进程与之关联. 这些进程在系统自举阶段(bootstrap), 从/etc/rc文件中启动, 且每个进程执行几乎相同的启动任务: 创建一个socket, 捆绑知名端口号, 等待一个连接(for TCP)或一个数据报(for UDP), 然后派生子进程. 子进程为客户提供服务, 父进程则继续等待下一个客户请求.
模型存在2个问题:

  1. 所有这些守护进程包含几乎相同的启动代码, 既表现在创建socket上, 也表现在演变成守护进程上.

  2. 每个守护进程在进程表中占据一个表项, 然而它们大部分时间处于休眠状态.


2. inetd守护进程

2.1 Unix如何解决原来服务器模型问题?

4.3BSD通过提供inetd守护进程(因特网超级服务器), 解决上述问题. 基于TCP/UDP的服务器都可以使用该守护进程.
具体解决办法:

  1. 通过inetd处理普通守护进程的大部分启动细节, 以简化守护程序的编写 => 每个服务器不再调用daemon_init;

  2. 单个inetd进程就能为多个服务等待外来的客户请求(select), 以此取代每个服务一个进程的做法 => 减少了系统中的进程总数;

注意: Linux中, 没有inetd, 取而代之的是xinetd守护进程, 不过需要专门下载、安装. 详见 xinetd和inetd安装和使用 | CSDN.
xinetd在inetd基础上扩展了一些特性, 包括根据客户的地址登记、接受或拒绝连接的选项, 每个服务一个配置文件的做法, 等待. 不过, 背后的超级服务器概念和inetd是一样的, 下文以讲解inetd为主.


2.2 inetd的启动

Unix/Linux inet守护进程


2.3 /etc/inetd.conf配置文件

/etc/inetd.conf配置文件指定inted守护进程处理哪些服务, 以及当一个服务请求达到时该怎么做. 文件中每行包含字段:

字段 说明
service-name 必须在/etc/services文件中定义
socket-type stream(for TCP), or dgram(for UDP)
protocol 必须在/etc/protocols文件中定义: tcp/udp
wait-flag nowait(for TCP), or wait(for UDP)
login-name 来自/etc/passwd的用户名, 一般为root
server-program 调用exec指定的完整路径名
server-program-arguments 调用exec指定的命令行参数

inetd.conf文件中部分行的例子:

ftp    stream  tcp  nowait  root   /usr/bin/ftpd    ftpd  -1
telnet stream  tcp  nowait  root   /usr/bin/telnetd telnetd
login  stream  tcp  nowait  root   /usr/bin/rlogind rlogind -s
tftp   dgram   udp  wait    nobody /usr/bin/tftpd   tftpd -s /tftpboot

原文链接: https://www.cnblogs.com/fortunely/p/14882805.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Unix/Linux inet守护进程

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/402973

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月21日 上午11:18
下一篇 2023年4月21日 上午11:18

相关推荐