- 论坛徽章:
- 0
|
好累啊,歇会,先泡着,然后再接着灌!
第八章 客户端/服务器模式
目标
通过本章的学习,你将会能够:
l 定义项目:客户端,服务器,和服务
l 定义一个端口和端口号
l 描述客户-服务器的交互
l 描述网络和RPC服务
l 识别在客户端/服务器模式下使用的文件
l 增加和去除网络服务
l 增加和去除RPC服务
l 使用命令:netstat 和 rpcinfo 来监视服务
介绍
客户/服务器模式是网络管理的基本组件。它有一个主要的冲突在用户和他们共享资源的能力上,及管理者在网络上提供的服务上。服务就是一个应用通过网络进行的存取。
客户/服务器模式描述了客户(一个需求服务的系统),和服务器(一个提供服务的系统)之间的联系。这个关系作用于TCP/IP模式的应用层。
端口号
每个网络服务都提供或需要使用一个端口或地址空间,它是为服务所保留的。通常一个用户通过一个任意的端口退出一个工作站,通过一个众所周知的端口与服务器通信。
一个端口是内核为这个服务所使用的地址,非常类似于一个提供登录服务的物理端口,不同的是,这个端口是抽象的,而不是物理上的。
在建立客户/服务器的交互过程中,必须达成一个协议,即:哪个端口号对应于哪个服务或应用。端口号必须唯一在网络通信所提供的服务中。
文件:/etc/inet/services 被用来标识或注册保留的端口号,服务和网络服务所使用的协议。这些服务已经被NIC注册过。
举个文件:/etc/inet/services 的例子:
# cat /etc/inet/services
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp mail
sunrpc 111/udp rpcbind
sunrpc 111/tcp rpcbind
在文件:/etc/inet/services中定义的端口号常指明一个众所周知的端口,因为这是一个特定服务所指定的端口定位。当在网络上增加一个新的网络协议时,这个文件必须被客户端和服务器更新来重新标识服务的定位。
注意:前1024个端口是保留端口。
服务器进程是如何开始的
每个服务需要一个服务器进程来响应客户端请求,如客户端运行 mail或 ftp命令。
许多服务器进程通过通常的启动过程以级别2开始的。附加的服务可以以级别3开始。举例如:in.routed, in.rdisc,或 sendmail这些进程运行在主机上。
然而,其它的服务并不在启动顺序里启动。这些服务如:rlogin, ftp,在有需求的时候才启动。服务器不启动这些服务,直到有客户请求这些服务的时候。当服务完成时,服务器的进程也就终止了。
网络服务进程是如何开始的
——进程inetd
inetd 是一个特殊的网络进程,用来在每台主机上监听众多的服务器进程,并不在系统启动时运行。它用来监听公用端口上的请求。当适当的端口地址被请求时,inet进程才启动它的服务器进程。Inet 在启动脚本 /etc/init.d/inetsvc中以2级启动。
——文件:/etc/inet/inetd.conf
inetd进程通知服务进行监听并且运行通信进程都通过文件:/etc/inet/inetd.conf
# cat /etc/inet/inetd.conf
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind
talk dgram udp wait root /usr/sbin/in.talkd in.talkd
如果文件 /etc/inet/inetd.conf发生改变,你必须给进程 inetd发送一个挂起信号。这可以使 inetd进程重新读取这个配置文件。
例如:
# ps –ef | grep inetd
# kill –HUP <ID#>;
注意:/etc/inet/inetd.conf 是一个象征性的链接从文件 /etc/inetd.conf。当使用主机管理程序在管理工具中来定义客户端时,这个链接被中止,而且 inetd不能正确的读取文件/etc/inet/inetd.conf。为了改正这个问题,重新创建链接或拷贝/etc/inetd.conf到/etc/inet/inet.conf
远端程序调用(Remote Produre Call)
正如我们所描述的客户/服务器模式,它有一个问题,也就是,每个新服务必须有一个在网络上被所有主机所认证的唯一端口号。对于一个大的网络公司,如Sun公司来说,它能把被所有主机认证所产生的端口号向全世界通告吗?
Sun的回答是:发展一个扩展的客户/服务器模式,即:RPC(Remote Produre Call),当启动一个RPC服务时,客户端连接到一个特定的服务进程,rpcbind(在SunOS系统中的端口映射)是一个已经注册过的网络服务。Rpcbind 为所有基于RPC的应用监听端口111,并为用户请求绑定端口号。
RPC可以不必使所有服务都在文件 /etc/inet/services中注册。客户不需要知道目标服务的端口号。客户端从进程rpcbind(端口111)来请求端口号。当进程用 rpcbind来注册时,服务器返回实际分配的端口号。
RPC应用程序在启动时就被写入,它们用rpcbind来进行自身的注册,并被分配一个任意的端口(下一个有效端口)。这样,当客户端到达端口111,rpcbind返回为服务分配的实际端口号,如果它已经注册的话。假如这个服务没有注册,rpcbind则返回一个错误的信息:“RCP TIME OUT, PROGRAM NOT FOUND.”
Rpcbind 在启动脚本:/etc/init.d/rpc 中以2运行级别启动。
一个RPC进程是如何开始的
以基于RPC的启动进程与不基于RPC的启动进程的启动方式相同,一些在系统启动时就开始启动运行了,如:rpc.nisd, mountd,和 nfsd。另一些只有在有需求时才由 inetd来启动,如: rwalld,sprayd, 和sadmind。
——文件 /etc/inet/inetd.conf
# cat /etc/inet/inetd.conf
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
100232/10 tli rpc/udp wait root /usr/sbin/sadmind sadmind
你可能会注意到,所涉及的一些服务在文件:/etc/inet/inetd.conf中是以端口号的顺序排列的,而不是经名字来排的。这些在Solaris 2.x环境下的新服务有可能不被SunOS 4.x的NIS主所识别在 /etc/rpc中。为避免“RPC TIME OUT”错误,他们由程序号指定,如:在Solaris TM系统中,被涉及的网络管理类的代理服务由程序号来识别是:100232。
——文件 /etc/rpc
RPC程序通过一个唯一的程序号来识别,如:sadmind, 是一个被Solaris TM管理应用所使用的守护进程。它的程序号是100232它的版本号是10。客户端请求 rwall,启动的服务器程序名为 walld,程序名和号的映射由文件 /etc/rpc来完成。
# cat /etc/rpc
rpcbind 100000 portmap sunrpc rpcbind
nisd 100300 rpc.nisd
walld 100008 rwall shutdown
mountd 100005 mount shutdown
sadmind 100232
更新文件 /etc/rpc用他们的名称来反应在文件 /etc/inet/inetd.conf是非常重要的。这个协定用来识别所有的程序号和名称。
——状态命令
为集中管理 /etc/inet/services和 /etc/rpc文件,他们的端口映射成NIS映射和NIS+表。但是文件:/etc/inet/inetd.conf不是一个名字服务文件。
——命令:/usr/bin/netstat –a
命令 /usr/bin/netstat –s可以用来识别在你的主机上哪个端口是保留的和标识已经建立的连接。
# /usr/bin/netstat –a
UDP
Local Address State
*.route Idle
*.* Unbound
*.sunrpc Idle
*.nfsd Idle
TCP Remote
Local Address Address Swind Send-Q Rwind Recv-Q State
*.* *.* 0 0 8576 0 Idle
*.ftp *.* 0 0 8576 0 LISTEN
*.telnet *.* 0 0 8576 0 LISTEN
*.login *.* 0 0 8576 0 LISTEN
*.sunrpc *.* 0 0 8576 0 LISTEN
chesapeake.login yogi.1023 16384 0 16384 0 ESTABLISHED
——命令:/usr/bin/rpcinfo
命令 rpcinfo用来提供有关RPC服务的信息。
例如:
l 显示程序号,版本,协议,端口,服务和RPC服务的自身。
# rpcinfo
l 标识所有在主机上注册的RPC服务
# rpcinfo –p [hostname]
program ver proto port service
100000 4 tcp 111 portmapper
100007 1 udp 32771 ypbind
100008 1 udp 32803 walld
100012 1 udp 32805 sprayd
l 广播一个程序来标识一个已经注册的程序的服务器。输出定义了服务器的IP地址端口地址和主机名。
# rpcinfo –b mountd 1
192.9.200.10.199 servera
192.9.200.13.187 serverb
l 标识一个特殊的服务是否在服务器上正在运行
# rpcinfo –u servera mountd
program 100005 version 1 ready and waiting
program 100005 version 2 ready and waiting
l 不注册一个RPC程序在你的主机上
# rpcinfo –d mountd 1
总结
在本章的学习中,你已经掌握了:
l 定义客户/服务器的重要项目
l 描述服务器进程是如何启动的
l 标识用来在客户/服务器端使用的文件
l 增加和去除网络和RPC服务
l 使用命令:netstat 和 rpcinfo 来监视主机上的服务 |
|