识别会话

 
我们仍举前面说过的一个例子来说明。假设一台计算机在同时收发电子邮件和即时消息、浏览 Web 网页并进行 VoIP 电话呼叫。
 
支持 TCP 和 UDP 协议的服务将对正在通信的不同应用程序进行跟踪。为了区分每个应用程序的数据段和数据报,TCP 和 UDP 协议中都有标识应用程序的唯一报头字段,这些唯一标识符就是端口号。
 
在每个数据段或者数据报的报头内,各有一个源端口和目的端口。源端口号是与本地主机上始发应用程序相关联的通信端口号;而目的端口号则是与远程主机上目的应用程序相关联的通信端口号。
 
根据消息性质的不同(请求或响应),可以采用不同的方法分配端口号。服务器的进程有静态分配的端口号,而客户端则为每个会话动态选择端口号。
 
当客户端应用程序向服务器应用程序发送请求时,包含在报头中的目的端口号即为分配给远程主机上运行的服务守护程序的端口号。客户端软件必须要知道与远程主机上的该服务器进程相关联的端口号。该目的端口号通过手动或者默认方式配置。例如,当 Web 浏览器程序向 Web 服务器发出请求时,除非另行指定,否则浏览器程序都将使用 TCP 端口 80。这是由于 TCP 端口 80 是 Web 服务应用程序默认分配的端口号。很多常见应用程序都有其默认的端口号。
 
客户端请求信息时,数据段或数据报的报头包含随机生成的源端口号。只要不与系统中正在使用的其它端口冲突,客户端可以选择任意端口号。对于请求数据的应用程序而言,该端口号就像是一个返回地址。传输层将跟踪此端口和发出该请求的应用程序,当返回响应时,传输层可以将其转发到正确的应用程序。在从服务器返回响应信息时,请求应用程序的端口号用作目的端口号。
 
通过传输层端口号和网络层分配给主机的 IP 地址,我们可以唯一识别在特定主机上运行的特定进程。这种组合称为套接字。有时,“端口号”和“套接字”两个词可以互相替换使用。在本课程中,套接字仅指 IP 地址和端口号的独特组合。包含源 IP 地址和目的 IP 地址以及端口号的套接字对可以唯一识别两台主机之间的会话。
 
例如,当 HTTP Web 网页请求发送到第三层 IPv4 地址为 192.168.1.20 的主机上运行的 Web 服务器(端口 80)时,套接字为 192.168.1.20:80。
 
如果请求 Web 网页的 Web 浏览器位于地址为 192.168.100.48 的主机上,且分配给 Web 浏览器的动态端口号为 49152 时,该 Web 网页的套接字则应该是 192.168.100.48:49152。 
互联网编号指派机构 (IANA) 负责分配端口号。IANA 是一个负责分配多种地址的标准化团体。
 
端口号有如下不同类型:
 
公认端口(端口 0 到 1023) — 这些编号用于服务和应用程序。HTTP(Web 服务器)、POP3/SMTP(电子邮件服务器)以及 Telnet 等常用应用程序通常使用这些端口号。通过为服务器应用程序定义公认端口,可以将客户端应用程序设定为请求特定端口及其相关服务的连接。
 
已注册端口(端口 1024 到 49151)— 这些端口号将分配给用户进程或应用程序。这些进程主要是用户选择安装的一些应用程序,而不是已经分配了公认端口的常用应用程序。这些端口在没有被服务器资源占用时,可由客户端动态选用为源端口。
 
动态或私有端口(端口 49152 到 65535)— 也称为临时端口。这些端口往往在开始连接时被动态分配给客户端应用程序。客户端一般很少使用动态或私有端口连接服务(只有一些点对点文件共享程序使用)。
 
同时使用 TCP 和 UDP
 
一些应用程序可能既使用 TCP,又使用 UDP。例如,通过低开销的 UDP,DNS 可以很快响应很多客户端的请求。但有的时候,发送被请求的信息时需要满足 TCP 可靠性要求。在这种情况下,该程序内的两种协议将同时采用公认端口号 53。
 
链接
 
端口号的最新列表可参见 http://www.iana.org/assignments/port-numbers。
 
有些时候,需要了解联网主机中开放并运行了哪些活动的 TCP 连接。Netstat 是一种重要的网络实用程序,可用来检验此类连接。Netstat 可列出正在使用的协议、本地地址和端口号、外部地址和端口号以及连接的状态。
 
不明的 TCP 连接可能造成重大的安全威胁。因为此类连接表示某程序或某人正连接到本地主机。此外,不必要的 TCP 连接会消耗宝贵的系统资源,降低主机性能。当性能出现下降时,就应该使用 Netstat命令检查主机上开放的连接。