数据链路和IP中的地址,分别指的是MAC地址和P地址。前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互连的主机和路由器。在传输层中也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。
根据端口号识别应用
一台计算机上同时可以运行多个程序。例如,接受WWW服务的Web 浏览器、电邮客户端、远程登录用的 ssh 客户端等程序都可同时运行。传输层协议正是利用这些端口号识别本机中正在进行通信的应用程序,并准确地将数据传输。
通过IP地址、端口号、协议号进行通信识别
如下图所示,①和②的通信是在两台计算机上进行的。它们的目标端口号相同,都是80。例如打开两个Web浏览器,同时访问两个服务器上不同的页面,就会在这个浏览器跟服务器之间产生类似前面的两个通信。在这种情况下可以根据源端口号加以区分。①跟③的目标端口号和源端口号完全相同,但是它们各自的源IP地址不同,可以通过源地址进行区分。
此外,还有一种情况,IP地址和端口全都一样,只是协议号(表示上层是TCP或UDP的一种编号)不同。这种情况下,也会认为是两个不同的通信。
因此,TCP/P或UDP/IP通信中通常采用5个信息来识别一个通信。它们是“源P地址”、“目标P地址”、“协议号”、“源端口号”、“目标端口号”。只要其中某一项不同,则被认为是其他通信。
如何确定端口号
在实际进行通信时,要事先确定端口号。确定端口号的方法分为两种:
- 标准既定的端口号(静态方法),它是指每个应用程序都有其指定的端口号。
- 像HTTP、TELNET、FTP等广为使用的应用协议中所使用的端口号是固定的。这些端口号也被称之为知名端口号(Well—Known Port Number )。应用程序应该避免使用知名端口号进行既定目的之外的通信,以免产生冲突。
- 除知名端口号之外,还有一些端口号也被正式注册,不过,这些端口号可用于任何通信用途。它们分布在1024到49151的数字之间。
- 时序分配法(动态分配法),此时,服务端有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。
- 在这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系統进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。例知,每需要一个新的端口号时,就在之前分配号码的基础上加1。这样,操作系统就可以动态地管理端口号了。
- 根据这种动态分配端口号的机制,即使是同一个客户端程序发起的多个TCP连接,识别这些通信连接的5部分数字也不会全部相同。动态分配的端口号取值范围在49152到65535之间。
端口号与协议的关系
端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。例如,TCP与UDP使用同一个端口号,但使用目的各不相同。这是因为端口号上的处理是根据每个传输协议的不同而进行的。
数据到达IP层后,会先检查IP首部中的协议号,再传给相应协议的模块。如果是TCP则传给TCP模块、如果是UDP则传给UDP模块去做端口号的处理。即使是同一个端口号,由于传输协议是各自独立地进行处理,因此相互之间不会受到影响。
,