3.1.2 保留端口

根据UDP或TCP的报文结构我们可以知道,两台计算机的应用程序之间通过端口交互数据时,除了需要知道自己采用的端口号,还必须知道对方的端口号。那么,一台计算机如何才能知道对方所采用的端口号呢?

这里涉及到两种分配方式,一种是统一分配方式,另一种是动态分配方式。

统一分配方式的思想是由一个权威的中央管理机构确定一套统一的分配方案,预先指定什么应用软件对应什么端口。这样,只要所有的软件系统遵照这个方案执行,那么,一个发送程序只要知道对方通信的程序是什么,就能够确定对方的端口号。

但是,统一分配方式存在一定的局限性。由于网络上的各种应用程序层出不穷,这个统一的分配方案很难确定。比如,你编写了一个小的网络应用程序,为了能够正常运行并与其它网络程序交互,你必须到互联网的权威管理机构去登记,并请求分配一个对应的端口号。这显然是不切实际的。

动态分配方式的思想是动态绑定端口号和应用程序,即当一个程序动态运行的时候才给它分配一个端口号。换句话讲,一个程序每次运行时,所分配的端口号可能是动态变化的。

但是这种方案的问题是通过网络交互的两个程序如何知道对方这次绑定的端口号是多少呢?

于是TCP/IP的设计者们采用了一种混合的端口地址管理机制。它们将端口号较低的区域通过统一分配方式,指定给一些常用的网络服务程序或操作系统程序,这些端口被称为熟知端口。而普通的网络应用程序则采用动态分配方式。熟知端口的范围为0-1023,动态分配的端口号从1024开始。

由于互联网上,通常都采用客户/服务器计算模式,即由一个网络客户程序向某个网络服务程序发送请求,服务程序提供相应的响应。因此,客户程序尽管动态绑定一个端口地址,但是,它可以通过统一分配给服务程序的端口向服务程序发出请求,并告诉服务程序,本次客户程序绑定的端口。这样,服务程序也能知道客户程序所采用的端口号。

常见网络服务的端口号表:

可对当今伪端口技术和端口动态变化技术做简单的介绍:例如为避开针对P2P端口的扫描,BT将自己的端口伪装成80或8080,以冒充为HTTP连接。在FTP的连接中,控制端口使用21号端口,而数据传输端口则在建立连接时临时商定。