5-2 运输层端口号、复用与分用的概念
# 520.5-2 运输层端口号、复用与分用的概念
复用:就是可以重复使用的意思,即各个应用层协议都可以使用 TCP 协议。
分用:就是 TCP 根据端口号,将报文分给不同的应用进程。
本节课我们介绍运输层、端口号、复用与分用的概念。在上节课中我们对运输层进行了概述,运输层的任务是直接为应用进程间的逻辑通信提供服务,运输层使用端口号来区分不同的应用进程。
我们知道运行在计算机上的进程是使用进程标识符 PID 来标志的。然而因特网上的计算机并不是使用统一的操作系统,不同操作系统例如 WINDOWS、LINUX、MAC OS 等,又使用不同格式的进程标识符,为了使运行不同操作系统的计算机的应用进程之间,能够进行网络通信,就要必须使用统一的方法,对 TCPIP 体系的应用进程进行标识。
TCP 体系的运输层使用端口号来区分应用层的不同应用进程。端口号是用 16 比特来标识,取值范围是 0~65535,分为以下三种:
- 第一种是熟知端口号,取值范围是 0~1023,因特网数字分配机构 IANA 把这些端口号指派给了 TCPIP 体系中最重要的一些应用协议。例如 FTP 协议使用 21 和 22 号端口,HTTP 协议是要 80 号端口,DNS 使用 53 号端口。
- 第二种是登记端口号,取值范围是 1024~49151,为没有熟知端口号的应用程序所使用,使用这类端口号必须在 IANA 按照规定的手续登记,以防止重复。例如微软远程桌面应用程序,使用的端口号是 3389。
- 第三种是短暂端口号,取值范围是 49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
需要注意的是端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中不同计算机中的相同端口号是没有联系的。
接下来我们介绍发送方的复用和接收方的分用,如图所示,这是收发双方的应用进程,发送方的某些应用进程所发送的不同应用报文,在运输层使用 UDP 协议进行封装,这称为 UDP 复用。而另一些应用进程做发送的不同应用报文,在运输层使用 TCP 协议进行封装,这称为 TCP 复用,运输层使用端口号来区分不同的应用进程。
不管是使用运输层的 UDP 协议,封装成的 UDP 用户数据报,还是使用 TCP 协议封装成的 TCP 报文段,在网络层都需要使用 IP 协议封装成 IP 数据报,这称为 IP 复用。
IP 数据报首部中协议字段的值,用来表明 IP 数据报的数据载荷部分,封装的是何种协议数据单元,取值为 6 表示封装的是 TCP 报文段,取值为 17 表示封装的是 UDP 用户数据报接收方的网络层,收到 IP 数据报后,进行 IP 分用。
若 IP 数据报首部装协议字段的值为 17,则把 IP 数据报的数据载荷部分所封装的 UDP,用户数据报上交运输层的 UDP。
若协议字段的值为 6,则把 IP 数据报的数据载荷部分所封装的 TCP 报文段,上交运输层的 TCP。
运输层对 UDP,用户数据报进行 UDP 分用,对 TCP 报文段进行 TCP 分用,也就是根据端口号将它们交付给上层相应的应用进程。
下面我们给出 TCPIP 体系的应用层常用协议所使用的运输层熟知端口号,这些是 TCPIP 体系的应用层常用协议,其中这些协议在运输层使用 UDP 协议,这是他们各自使用的运输层熟知端口号。
这些协议在运输层使用 TCP 协议,这是他们各自使用的运输层熟知端口号,不管在运输层使用 UDP 还是 TCP 协议,在网络层都需要使用 IP 协议,IP 数据报首部中协议字段的值,表明了 IP 数据报数据载荷部分封装的是何种协议数据单元。
接下来我们通过一个实例来进一步说明运输层端口号的作用。如图所示,用户 PC,DNS 服务器,WEB 服务器通过交换机进行互联,它们处于同一个以太网中:
假设这是 WEB 服务器的域名:www.porttest.com,DNS 服务器中记录有该域名所对应的 IP 地址 192.168.0.3,我们在用户 PC 中使用网页浏览器来访问 WEB 服务器的内容。
在网页浏览器的地址栏中输入 WEB 服务器的域名,用户 PC 中的 DNS 客户端进程,会发送一个 DNS 查询请求报文,其内容为域名 www.porttest.com对应的 IP 地址是什么?
DNS 查询请求报文,需要使用运输层的 UDP 协议封装成 UDP,用户数据报,其首部中的源端口字段值,在短暂端口号 49151 到 65535 中挑选一个未被占用的、用来表示 DNS 客户端进程,例如 49152。目的端口字段的值设置为 53,这是 DNS 服务器端进程所使用的熟知端口号。
之后将 UDP、用户数据报封装在 IP 数据报中,通过以太网发送给 DNS 的服务器。DNS 服务器端收到该数据报后,从中解封出 UDP 用户数据报,UDP 首部中的目的端口号为 53,这表明应将该 UDP 用户数据报的数据载荷部分,也就是 DNS 查询请求报文,交付给本服务器中的 DNS 服务器端进程。
DNS 服务器端进程解析 DNS 查询请求报文的内容,然后按其要求查找对应的 IP 地址。之后会给用户 PC 发送 DNS 响应报文,及内容为域名www.porttest.com,所对应的 IP 地址是 192.168.0.3。DNS 响应报文,需要使用运输层的 UDP 协议封装成 UDP 用户数据报,其首部中的源端口字段的值,设置为熟知端口号 53,表明这是 DNS 服务器端进程所发送的 UDP 用户数据报,目的端口字段的值设置为 49152,这是之前用户 PC 中发送 DNS 查询请求报文的 DNS 客户端进程所使用的短暂端口号。
之后将 UDP 用户数据报封装在 IP 数据报中,通过以太网发送给用户 PC,用户 PC 收到该数据报后,从中解封出 UDP 用户数据报,UDP 首部中的目的端口号为 49152,这表明应将该 UDP 用户数据报的数据载荷部分,也就是 DNS 响应报文交付给用户 PC 中的 DNS 客户端进程,DNS 客户端进程解析 DNS 响应报文的内容,就可知道自己之前所请求的 WEB 服务器的域名所对应的 IP 地址为 192.168.0.3。
现在用户 PC 中的 HTTP 客户端进程,可以向 WEB 服务器发送 HTTP 请求报文了,其内容为“首页内容是什么?”
HTTP 请求报文,需要使用运输层的 TCP 协议,封装成 TCP 报文段,其首部中的原端口字段的值,在短暂端口号 49151 到 65535 中挑选一个未被占用的,用来表示 HTTP 客户端进程。例如,仍然使用之前用过的 49152;目的端口字段的值设置为 80,这是 HTTP 服务器端进程所使用的熟知端口号。
之后将 TCP 报文段封装在 IP 数据报中,通过以太网发送给 WEB 服务器。WEB 服务器收到该数据报后,从中解封出 TCP 报文段,TCP 首部中的目的端口号为 80,这表明应该将该 TCP 报文段的数据载荷部分,也就是 HTTP 请求报文交付给本服务器中的 HTTP 服务器端进程。
HTTP 服务器端进程,解析 HTTP 请求报文的内容,然后按其要求查找首页内容,之后会给用户 PC 发送 HTTP 响应报文,其内容是 HTTP 客户端所请求的首页内容。
HTTP 响应报文,需要使用运输层的 TCP 协议,封装成 TCP 报文段,其首部中的原端口号字段的值,设置为熟知端口号 80,表明这是 HTTP 服务器端进程所发送的 TCP 报文段;目的端口字段的值设置为 49152,这是之前用户 PC 中发送 HTTP 请求报文的 HTTP 客户端进程所使用的短暂端口号。
之后将 TCP 报文段封装在 IP 数据报中,通过以太网发送给用户 PC,用户收到该数据报后,从中解封出 TCP 报文段,TCP 首部中的目的端口号为 49152,这表明应该将该 TCP 报文段的数据载荷部分,也就是 HTTP 响应报文,交付给用户 PC 中的, HTTP 客户端进程,解析 HTTP 响应报文的内容,并在网页浏览器中进行显示,这样我们就可以在网页浏览器中看到 WEB 服务器所提供的首页内容了。
本节课的内容小结如下: