1.1.4 端口号分配
TCP和UDP采用16bit的端口号来识别应用程序。那么这些端口号是如何选择的呢?
服务器一般都是通过知名端口号来识别的。例如,对于TCP/IP实现来说,每个FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(普通文件传输协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1 023之间的端口号。这些知名端口号由Internet号分配机构(Internet Assigned Numbers Authority,IANA)来管理。到1992年为止,知名端口号介于1~255之间。256~1 023之间的端口号通常都是由UNIX系统占用,以提供一些特定的UNIX服务,也就是说,提供一些只有UNIX系统才有的,而其他操作系统可能不提供的服务。现在IANA管理1~1 023之间所有的端口号。
Internet扩展服务与UNIX特定服务之间的一个差别就是telnet和rlogin,它们二者都允许通过计算机网络登录到其他主机上。telnet是采用端口号为23的TCP/IP标准,且几乎可以在所有操作系统上进行实现。相反,rlogin最开始时只是为UNIX系统设计的(尽管许多非UNIX系统现在也提供该服务),因此在20世纪80年代初,它的端口号为513,客户端通常对它所使用的端口号并不关心,只须保证该端口号在本机上是唯一的即可。客户端口号又称做临时端口号(即存在时间很短暂),这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着,其服务就运行。
大多数TCP/IP实现给临时端口分配1 024~5 000之间的端口号。大于5 000的端口号是为其他服务器预留的(Internet上并不常用的服务)。我们可以在后面看见许多给临时端口分配端口号的例子。大多数Linux系统的文件/etc/services都包含了人们熟知的端口号。为了找到Telnet服务,可以运行以下语句:"grep telnet /etc/services"。表1-3是一些常用TCP服务和端口。
表1-3 常用TCP服务和端口
TCP 端口 | 服 务 名 | 功 能 |
7 | echo | echo字符(用于测试) |
9 | discard | 丢弃字符串(用于测试) |
13 | daytime | 日期服务 |
19 | chargen | 字符生成器 |
21 | ftp | 文件传输协议(FTP) |
22 | ssh | 安全shell(虚拟终端或文件传输) |
23 | telnet | 远程登录 |
TCP 端口 | 服 务 名 | 功 能 |
25 | smtp | 电子邮件 |
37 | time | 时间服务 |
42 | nameserve | TCP名字服务 |
43 | whois | NIC whois服务 |
53 | domain | 域名服务(DNS) |
79 | finger | 用户信息 |
80 | http | WWW(万维网) |
110 | pop3 | 邮局协议3(POP3) |
111 | sunrpc | Sun的远程过程调用(RPC) |
113 | auth | 远程用户名认证服务 |
119 | nntp | 网络新闻传输协议(NNTP) |
143 | imap | 交互式邮件访问协议 |
443 | https | 用SSL加密的HTTP |
512 | exec | 在远程UNIX主机上执行命令 |
513 | login | 登录到远程UNIX主机(rlogin) |
514 | shell | 从远程UNIX主机获得shell(rsh) |
515 | printer | 远程打印 |
1080 | socks | SOCKS应用代理服务 |
2049 | NFS | TCP之上的NFS(NFS over TCP) |
6000~6001 | X | X Window系统 |
UDP为运行于同一台或不同机器之上的两个或多个程序之间传输数据包提供了简单的、不可靠的连接。"不可靠"意味着操作系统不保证每个发出的包都能到达,也不保证包能够按序到达。不过UDP是尽力传输的,在LAN中UDP通常能达到100%的可靠性。UDP的优点在于它比TCP的开销少,较少的开销使得基于UDP的服务可以用TCP 10倍的吞吐量传输数据。
UDP主要用于SUN的NFS、NIS、主机名解析和传输路由信息。对于有些服务而言,偶然丢失一个包并不会带来太大的负面影响,因为它们会周期性地请求一个新包,或者那些包本身并不是很重要。这些服务包括who、talk和一些时间服务。表1-4是一些常用UDP服务和端口。
表1-4 常见UDP服务和端口
UDP端口 | 服 务 名 | 功 能 |
7 | echo | 在另一个数据包中返回用户的数据 |
9 | discard | 什么也不做 |
13 | daytime | 返回日期 |
19 | chargen | 字符生成器 |
37 | time | 返回时间 |
53 | domain | 域名服务(DNS) |
69 | tftp | 普通文件传输协议 |
111 | sunrpc | SUN的远程过程调用(RPC) |
UDP端口 | 服 务 名 | 功 能 |
123 | ntp | 网络时间协议(Network Time Protocol,NTP) |
161 | snmp | 简单网络管理协议 |
512 | biff | 新邮件提示 |
513 | who | 收集关于用户登录到同一子网的其他机器的广播 |
514 | syslog | 系统日志工具 |
517 | talk | 发送talk请求 |
518 | ntalk | 一个“新”的talk请求 |
520 | route | 路由信息协议 |
533 | netwall | 写每个用户的终端 |
2049 | NFS | 网络文件系统协议(NFS) |