1.3.3 端口号
端口号(Port numbers)是 16 位的非负整数(从 0 到 65535)
每个 IP 地址有 65536 个端口号,使用端口号的传输层协议用它来确定正确的接收应用
对于客户端/服务器应用程序来说(第 1.5.1 节),一个服务器首先 “ 绑定 ” 到一个端口号
然后,一个或更多的客户端使用传输层协议建立起到这个端口号的连接
标准的端口号由互联网数字分配机构(Internet Assigned Numbers Authority (IANA))分配
端口号被分为几个特定的范围
- 知名(well-known)端口号:0-1023
- 已注册(registered)端口号:1024–49151
- 动态(dynamic)端口号(或称为:私人(private)端口号):49152–65535
通常,服务器如果想要绑定知名端口号,需要获得特殊的权限,例如管理员或 “ root ” 访问
知名端口号被用于一些常见的服务,如:
- 端口 22
安全外壳协议(Secure Shell Protocol (SSH)) - 端口 20 与 21
FTP - 端口 23
Telnet 远程终端协议(remote terminal protocol) - 端口 25
e-mail/简单邮件传输协议(Simple Mail Transfer Protocol (SMTP)) - 端口 53
域名系统(Domain Name System (DNS)) - 端口 80 与 443
超文本传输协议(Hypertext Transfer Protocol (HTTP 与 HTTPS))(或称为 Web 协议) - 端口 143 与 993
交互邮件访问协议(Interactive Mail Access Protocol (IMAP 与 IMAPS)) - 端口 161 与 162
简单网络管理协议(Simple Network Management Protocol (SNMP)) - 端口 389
轻型目录访问协议(Lightweight Directory Access Protocol (LDAP))
拥有多个端口的协议(如:HTTP 与 HTTPS)具体使用哪个端口
通常取决于应用层协议是否使用了安全传输层协议(Transport Layer Security (TLS))(见第 18 章)
大多数的标准端口号都是奇数的,这是历史原因造成的
这些端口号沿用了 NCP 端口号
网络控制协议(Network Control Protocol (NCP))是一个在 TCP 之前,ARPANET 使用的传输层协议
NCP 是单工的,所以每个应用程序需要两个连接
NCP 为每个应用程序保留了两个成对的端口号,一个奇数一个偶数
TCP 与 UDP 都是全双工的,只需要为每个应用保留了一个端口号,沿用了 NCP 中的奇数端口号
有特殊权限的客户端与服务器可以使用已注册端口号,但 IANA 为特殊用途保留了一个注册中心
在开发新应用程序时,通常应该避免使用已注册端口号,除非获得了 IANA 的分配
动态(私人)端口号的使用本来是没有限制的
但在有些情况下(如:客户端)在使用的时候需要避免重复使用别人已经占用的同一个 IP 上的端口号,这些端口号是临时分配的
这些端口号也被称为临时(ephemeral)端口号
之所以是临时的,是因为通常只有当用户为了访问服务运行客户端时才会用到
这个端口号不需要固定下来,以为服务端并不需要在将来通过这个端口号来找到客户端
相反的,服务端通常需要一个不常变动的名称与端口号以便客户端能找到