2.9.3端口
1.端口的概念和作用
传输层是TCP/IP参考模型中提供端到端通信服务的层次,既可以提供面向连接的可靠的通信服务,也可以提供无连接不可靠的通信服务。
由于同一台机器上可能会运行多个网络应用进程,因此,计算机需要确保接收主机上获取数据报的应用进程正是源主机的发送目标。要唯一地标识一个传输进程,首先需要标识传输进程所在主机的网络层服务访问点(Network Service Access Point,NSAP),其次还要给主机上的每个传输进程赋予一个本地唯一的标识符,这个本地唯一的标识符就是传输层的服务访问点(TSAP)。在TCP/IP协议簇中,NSAP就是IP地址,而TSAP就是传输层协议的端口号。
由于传输层可以有多种协议,不同协议提供不同类型的服务,TCP/IP协议簇中最主要的传输层协议就是TCP和UDP,因此,一个全局唯一的通信进程可以用三元组{协议,NSAP TSAP}来表示。在网络通信编程中,这样一个三元组叫作“一个半相关(Half-Association)”。而一个完整的进程通信需要五元组{协议,本地NSAP,本地TSAP,远地NSAP,远地TSAP}来表示。在网络通信编程中,这样一个五元组叫作“一个相关(Association)”。UNIX进程通信将这种通信模式称为基于Socket的通信,或者称为基于“套接字”的通信。
在TCP/IP协议簇中,各种应用进程都能将其数据通过端口向下交付给传输层,传输层也将其数据段中的数据通过端口向上交付给应用层相应的进程。利用端口号,一台主机上的多个进程可以同时使用TCP/UDP提供的传输服务,并且这种通信是端到端的,它的数据由IP传递,但与IP数据报的传递路径无关。
2.端口的分配模式
端口是进程访问传输服务的访问点,每个端口都拥有一个端口号(Port Number)。在TCP/IP协议簇中,端口号是两个字节长的数值,其取值范围为0~65 535。不同的协议,其端口号也相互独立。例如,TCP有一个80号端口,而UDP也有一个80号端口,但这两个端口并不相互冲突。端口号也是一种系统资源,分配方式有全局分配和本地分配两种模式。
(1)全局分配。一种集中分配方式,由一个公认权威的中央机构根据用户需要进行统一分配,为常见的协议分配默认的端口号,并将结果公布于众。如TCP的80号端口就分配给HTTP协议使用。
(2)本地分配。又称“动态联编”,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来。
为了协调全局分配和本地分配两种端口分配模式,IETF IANA创造了保留端口和自由端口两个概念。
(1)保留端口(Reserved Port)。也称“知名端口(Web—Known Port)”,以全局方式分配,只占全部端口数目很小的部分。每个标准的服务器都分配一个保留端口号。不同机器上同样的服务器,其端口号相同。TCP和UDP均规定小于1024的端口号才能作为保留端口。
(2)自由端口(Free port)。也称“动态端口(Dynamic Port)”,以本地方式分配,占全部端口的绝大部分。当进程要与远程进程通信时,先申请一个自由端口,然后根据全局分配的保留端口号与远程服务器联系,再和远程进程进行联系。TCP和UDP规定1 024以上的端口号为自由端口。
3.常见网络通信的TCP/UDP端口号
表2.6列举了保留端口范围内一些常见的网络通信协议端口号。
表2.6 部分常见的TCP/IP端口
