某些“标准”服务提供的端口号在 Assigned Numbers RFC 中定义。为了使服务器和客户端程序能够将服务名称转换为这些数字,至少部分列表保存在每台主机上;它存储在一个名为/etc/services的文件中。条目如下所示
service port/protocol [aliases] |
在这里,服务名称 (service)指定服务名称,端口 (port)定义服务提供的端口,以及协议 (protocol)定义使用的传输协议。通常,后一个字段是udp或tcp。一项服务可以使用多个协议,也可以在同一端口上提供不同的服务,只要协议不同即可。“别名 (aliases)”字段允许您为同一服务指定备用名称。
通常,您无需更改 Linux 系统上网络软件附带的服务文件。不过,我们在示例 12-2 中给出了该文件的一个小节选。
示例 12-2. /etc/services 文件的示例
# The services file: # # well-known services echo 7/tcp # Echo echo 7/udp # discard 9/tcp sink null # Discard discard 9/udp sink null # daytime 13/tcp # Daytime daytime 13/udp # chargen 19/tcp ttytst source # Character Generator chargen 19/udp ttytst source # ftp-data 20/tcp # File Transfer Protocol (Data) ftp 21/tcp # File Transfer Protocol (Control) telnet 23/tcp # Virtual Terminal Protocol smtp 25/tcp # Simple Mail Transfer Protocol nntp 119/tcp readnews # Network News Transfer Protocol # # UNIX services exec 512/tcp # BSD rexecd biff 512/udp comsat # mail notification login 513/tcp # remote login who 513/udp whod # remote who and uptime shell 514/tcp cmd # remote command, no passwd used syslog 514/udp # remote system logging printer 515/tcp spooler # remote print spooling route 520/udp router routed # routing information protocol |
请注意,echo 服务在端口 7 上同时提供 TCP 和 UDP,并且端口 512 用于两个不同的服务:使用 TCP 的远程执行 (rexec) 和 COMSAT 守护进程,它通过 UDP 通知用户新邮件(参见 xbiff(1x) )。
与服务文件类似,网络库需要一种方法将协议名称(例如,服务文件中使用的协议名称)转换为其他主机上的 IP 层可以理解的协议编号。 这是通过在/etc/protocols文件中查找名称来完成的。 它包含每行一个条目,每个条目包含一个协议名称和关联的数字。 需要修改此文件的可能性甚至比需要修改/etc/services的可能性更小。 示例 12-3 中给出了一个示例文件。
示例 12-3. /etc/protocols 文件的示例
# # Internet (IP) protocols # ip 0 IP # internet protocol, pseudo protocol number icmp 1 ICMP # internet control message protocol igmp 2 IGMP # internet group multicast protocol tcp 6 TCP # transmission control protocol udp 17 UDP # user datagram protocol raw 255 RAW # RAW IP interface |