荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: 使用inetd建立server
发信站: BBS 荔园晨风站 (Thu Jan 21 23:10:36 1999), 转信
Inetd
UNIX操作系统中,有许多基于TCP/IP之上的网络server,如:telne
td、ftpd等。这些进程有一个共同的功能:监听某一服务端口,当客户
请求服务时,产生(fork)子进程为客户提供服务。虽然这些daemon只
在client连接建立后才消耗进程时间,但这些进程使用了大量的内存
和CPU时隙。为了解决这一问题,UNIX提出了"超级服务器"的概念,称
作inetd(internet dam on)。
inetd是一个daemon进程,它在系统启动时开始运行,并且只能运
行一个进程。inetd使用一个进程为多个server服务,即由inetd代替s
erver监视端口,server本身并不在系统中运行,从而减轻系统的负荷
。当连接请求到达时,由inetd决定由哪个server提供服务,并且为连
接请求fork子进程运行server。对不同的服务请求,inetd采取不同的
服务方式,如果服务请求是面向连接请求,则inetd立刻返回继续监听
端口。当服务请求是无连接请求时,inetd等待e rver返回,在此期间
不接受任何连接请求。server退出后,inetd返回继续监听。使用inet
不仅减少了空闲进程的数量,而且由于由超级服务器建立网络连接,使
server完全不必与网络打交道,只需要使用标准输入输出与client通
信。由于不需要调用socket库函数,server编写更加容易,文件长度更
小。
参数配置文件
inetd在启动时,主要从/etc/inetd.conf和/etc/services文件中
读取配置参数。下面分别介绍这两个文件的格式。
/etc/services文件中的每一行代表系统提供的网络服务和相应
的端口名和协议名。每一行的格式是:<服务名> <端口号/协议名> <
别名>。
下面是该文件中的一段。
echo 7/tcp
echo 7/udp
discard 9/tcp sink nul
systat 11/tcp users
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp
time 37/tcp timeserver
rlp 39/udp resource
whois 43/tcp nicname
domain 53/tcp nameserver
/etc/inetd.conf文件中的每一行各段含义如下:
·服务名 由/etc/services文件指定;
·socket类型 是stream类型或者dgram类型;
·协议 由/etc/protocols文件指定,一般为tcp和udp;
·wait|nowait 只用于datagram sockets, stream sockets
应指定为 nowait
·用户 启动server的用户名;
·server程序 inetd运行的server的路径名;
·server程序参数 server程序使用的参数。
下面是inetd.conf文件的一部分。
ftp stream tcp nowait root /etc/ftpd ftpd -l
telnet stream tcp nowait root /etc/telnetd telnetd
tftp dgram udp wait root /etc/tftpd tftpd
login stream tcp nowait root /etc/rlogind rlogind
shell stream tcp nowait root /etc/remshd remshd
exec stream tcp nowait root /etc/rexecd rexecd
Inetd应用
利用inetd我们可简单方便地建立server,不需要任何C语言编程
。下面我们使用UNIX中的命令who演示如何把who变为一个server。首
先,我们需要在文件/etc/services和/etc/ie td.conf中加几行。
在/etc/services中加入如下内容:
wserver 2100/tcp
2100是我们为该服务设置的端口号,读者也可以选择其他的端口
号,只要不与其他服务端口号冲突即可。
在/etc/inted.conf中加入如下内容:
wserver stream tcp nowait root /bin/who who
编辑好文件后,服务还不能使用,因为inetd并不能自动发现文件
的改变而重新配置进程,需要我们向inetd发SIGHUP信号使之读文件。
在发送信号前必须先找到进程的ID。我们可以使用如下的命令:
s06$ ps -ae | grep inetd
显示结果为:
164 ? 0:00 inetd
杀掉164进程:
s06$ kill -HUP 164
现在使用netstat命令显示网络状态,我们会发现inetd正代替这
个新的服务监听端口。
s06$ netstat -a | head
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (st
ate)
tcp 0 0 *.wserve *.* LISTEN
tcp 0 0 s06.login s04.1022 ESTABLISHED
tcp 0 3 s06.login s04.1023 ESTABLISHED
tcp 0 0 s06.3167 192.9.200.206 ESTABLISHED
tcp 0 0 s06.3166 192.9.200.206 ESTABLISHED
tcp 0 0 s06.3165 192.9.200.206 ESTABLISHED
tcp 0 0 s06.3164 192.9.200.206 ESTABLISHED
tcp 0 0 s06.3162 192.9.200.206 ESTABLISHED
虽然server已经开始工作。但我们还必须有客户端工具。对于cl
ient端,我们也可以利用现成的UNIX命令:telnet 。通常情况下,elne
t使用标准端口23连接到telnetd服务器,但我们可以为它指定一个端
口。telnet使用方法是:telnet <主机名 ><端口号>。例如telnetlo
calhost 1220命令将连接到本机的1220端口。使用telnet可以向serv
er输入文本并接受返回的文本。因此,telnet可以作为测试文本方式
协议的工具。
现在我们可以检验server的工作情况。首先我们进入其他主机,
如s04,使用telnet从s4 登录到另一主机s06,在telnet命令中指定服
务端口号2100。
s04$ telnet s06 2100
Trying...
Connected to s06.
Escape character is ‘^〗'.
cat console Jul 14 08:16
cat ttyp9 Jul 14 15:02
cria ttypa Jul 14 15:04
dony ttypb Jul 14 13:15
ccc pty/ttys1 Jul 14 15:19
cria ttype Jul 14 14:04
robert ttypf Jul 14 10:44
cria ttyp8 Jul 14 15:00
Connection closed by foreign host.
新的网络服务开始正常工作。
本文所述的UNIX操作系统为HP-UX 9.07。
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店