传输层的功能与端口

第 3 章管相邻节点,第 4 章管主机,第 5 章管主机里的进程。 数据链路层提供链路上相邻节点之间的逻辑通信,网络层提供主机之间的逻辑通信,传输层位于网络层之上、应用层之下,为运行在不同主机上的进程之间提供逻辑通信。

区分进程靠的是端口号。本页的错题就是端口号的一条边界:端口号只在一台主机的一个传输协议内部有意义,TCP 的 80 和 UDP 的 80 是两个互不相干的端口。

机制

5.1.1 传输层的功能

逻辑通信是指对等层之间的通信好像是沿水平方向传送的,但两个对等层之间并没有一条水平方向的物理连接。传输层属于面向通信部分的最高层,同时也是用户功能中的最低层。即使网络层协议不可靠(网络层协议使分组丢失、混乱或重复),传输层同样能为应用程序提供可靠的服务。

网络的边缘部分的两台主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有传输层,而路由器在转发分组时都只用到下三层的功能(在通信子网中没有传输层,传输层只存在于通信子网以外的主机中)。

flowchart LR
  subgraph A["主机 A"]
    AP1["进程 AP1"]
    AP2["进程 AP2"]
  end
  subgraph B["主机 B"]
    AP3["进程 AP3"]
    AP4["进程 AP4"]
  end
  A -- "LAN1 → 路由器 1 → WAN → 路由器 2 → LAN2" --- B
  AP1 -. "传输层:进程之间的逻辑通信" .- AP3

IP 协议的作用范围是主机到主机(提供主机之间的逻辑通信),传输层协议的作用范围是进程到进程(提供进程之间的逻辑通信)。传输层的功能如下:

  1. 应用进程之间的逻辑通信。从网络层来说,通信的双方是两台主机,IP 数据报的首部给出了这两台主机的 IP 地址。但”两台主机之间的通信”实际上是两台主机中的应用进程之间的通信,也称端到端的逻辑通信。IP 虽然能把分组送到目的主机,但这个分组还停留在主机的网络层,而没有交付给主机中的进程。从传输层来看,通信的真正端点不是主机而是主机中的进程。
  2. 复用和分用。复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。王道的注意框指出:网络层也有复用和分用的功能,但网络层的复用是指发送方不同协议的数据都可被封装成 IP 数据报发送出去,分用是指接收方的网络层在剥去首部后把数据交付给相应的协议。
  3. 差错检测。传输层要对收到的报文(首部和数据部分)进行差错检测。对于 TCP,若接收方发现报文段出错,则要求发送方重发该报文段;对于 UDP,若接收方发现数据报出错,则直接丢弃。在网络层,IP 数据报首部中的检验和字段只检验首部是否出错,而不检查数据部分(4.2.1)。
  4. 提供面向连接和无连接的传输协议。传输层向高层用户屏蔽了低层网络核心的细节(如网络拓扑、路由协议等),它使应用进程看见的是在两个传输层实体之间好像有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的表现却因传输层协议不同而有很大的差别:采用面向连接的 TCP 时,尽管下面的网络是不可靠的(只提供尽最大努力的服务),但这种逻辑通信信道就相当于一条全双工的可靠信道;采用无连接的 UDP 时,这种逻辑通信信道仍然是一条不可靠信道(5.1.3)。

5.1.2 传输层的寻址与端口

端口的作用。端口能让应用层的各种进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口在传输层的作用类似于 IP 地址在网络层的作用,只不过 IP 地址标识的是主机,而端口标识的是主机中的应用进程。

各层的服务访问点:

层服务访问点
数据链路层帧的”类型”字段(3.6.2)
网络层IP 数据报的”协议”字段
传输层”端口号”字段
应用层”用户界面”

在协议栈层间的抽象的协议端口是软件端口,它与路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。传输层使用的是软件端口。

端口号。应用进程通过端口号进行标识,端口号长度为 16 比特,能够表示 65536()个不同的端口号。端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程,在因特网中不同计算机的相同端口号是没有联系的。根据端口号范围可将端口分为两类:

类别范围说明
熟知端口号0~1023服务器端使用;IANA 把这些端口号指派给了 TCP/IP 最重要的一些应用程序,让所有的用户都知道
登记端口号1024~49151服务器端使用;供没有熟知端口号的应用程序使用,使用这类端口号必须在 IANA 登记,以防止重复
客户端使用的端口号(短暂端口号)49152~65535仅在客户进程运行时才动态地选择;通信结束后,刚用过的客户端口号就不复存在,可供其他客户进程使用

一些常用的熟知端口号:

应用程序FTPTELNETSMTPDNSTFTPHTTPSNMP
熟知端口号212325536980161

FTP 控制连接用 21,数据连接用 20(王道 5.1.4 第 8 题;详见 6.3 FTP)。

套接字。在网络中通过 IP 地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到 IP 地址就构成套接字(Socket)。在网络中采用发送方和接收方的套接字来识别端点。套接字实际上是一个通信端点,即套接字地址端口号它唯一地标识网络中的一台主机上的一个应用进程。

在网络通信中,主机 A 发给主机 B 的报文包含目的端口号和源端口号,源端口号是”返回地址”的一部分,即当 B 需要发回一个报文给 A 时,B 到 A 的报文中的目的端口号便是 A 到 B 的报文中的源端口号(完全的返回地址是 A 的 IP 地址和源端口号)。

边界

错题复盘:TCP 和 UDP 各有一套端口号,互不干扰,可以用相同的号码

王道 5.1.4 第 9 题:下列关于 TCP 和 UDP 端口的说法中,正确的是(A. TCP 和 UDP 分别拥有自己的端口号,它们互不干扰,可以共存于同一台主机 B. TCP 和 UDP 分别拥有自己的端口号,但它们不能共存于同一台主机 C. TCP 和 UDP 的端口没有本质区别,但它们不能共存于同一台主机 D. 当一个 TCP 连接建立时,它们互不干扰,不能共存于同一台主机)。答案 A。

端口号只具有本地意义,即端口号只标识本计算机应用层中的各个进程。同一台计算机中 TCP 和 UDP 分别拥有自己的端口号,它们互不干扰,因此 UDP 和 TCP 可以使用相同的端口号。

传输层分用时,先由网络层根据 IP 首部的协议字段(6 或 17)把数据交给 TCP 或 UDP,再由 TCP 或 UDP 按端口号交给进程。所以”TCP 的 53 号端口”和”UDP 的 53 号端口”在分用的第一步就已经分开了——DNS 就同时使用这两个端口。

端口号只具有本地意义。 两台不同主机上的相同端口号没有任何联系;要在互联网上唯一确定一个进程,必须用 IP 地址加端口号(王道 5.1.4 第 6 题)。

传输层的端口是软件端口。 交换机、路由器的”端口”是硬件接口,与此无关。

路由器没有传输层。 路由器只实现下三层,传输层只存在于通信子网以外的主机中;NAT 路由器改写端口号是个例外(4.2.2)。

传输层检验首部和数据,IP 只检验首部。 两层的检验范围不同,考题常把它们对调。

口径差异:客户端短暂端口号的实际范围

教材口径:客户端使用的端口号为 49152~65535。

工程口径:这是 IANA 建议的动态端口范围,Windows 采用它;Linux 默认从 32768~60999 中选取短暂端口,范围可由系统参数调整。另外,套接字在编程中指操作系统提供的通信接口对象,教材中的”套接字 =(IP 地址 : 端口号)“是它的地址部分;一条 TCP 连接由两端的套接字共同确定(5.3.3)。

考试按教材口径作答。

对照速查

说法对错
传输层为主机之间提供逻辑通信❌(进程之间)
路由器转发分组时要用到传输层❌(只用下三层)
网络层不可靠,传输层也就无法提供可靠服务❌
传输层的差错检测只检验首部❌(首部和数据)
端口号长 16 位✅
不同主机上的相同端口号代表同一个应用❌(端口号只有本地意义)
TCP 和 UDP 可以使用相同的端口号✅
熟知端口号的范围是 0~1023✅
套接字 = IP 地址 + 端口号,唯一标识一个进程✅
FTP 的熟知端口号是 24❌(控制 21,数据 20)

考点

  • 传输层:进程之间的逻辑通信;只有主机有传输层
  • 四项功能:逻辑通信、复用与分用、差错检测(首部 + 数据)、面向连接与无连接
  • 端口号 16 位、只有本地意义;熟知 0~1023、登记 1024~49151、客户 49152~65535
  • 常用熟知端口:FTP 21、TELNET 23、SMTP 25、DNS 53、TFTP 69、HTTP 80、SNMP 161
  • 套接字 =(IP 地址 : 端口号)

链接