【计算机网络】运输层 - 概述

459 阅读5分钟

运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。从应用的角度看,它似乎与其他应用直接进行连接一样,但实际上他们或许位于地球的两端。

系列文章:

报文段

在发送端,运输层将从发送应用程序进程接收到的报文转换为运输层分组,这些分组称为运输层报文段(Segment)。运输层将这些报文段传递给网络层,网络层将其封装成网络层分组(即数据报)发送到目的地。

在接收端,网络层从数据报中提取运输层报文段,并将该报文段向上交给运输层。运输层处理接收到的报文段,将报文段解析并交给应用程序。

多路复用与多路分解

运输层的多路复用与多路分解指将网络层提供的主机到主机的交付服务延伸到为主机上的应用程序提供进程到进程的交付服务

将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(Demultiplexing)。从不同套接字中收集报文,并为每个报文封装上运输层首部信息而生成报文段,再将报文段投递到网络层的工作称为多路复用(Multiplexing)。

多路复用与多路分解是所有计算机网络所必需的。多路复用与多路分解实现了进程与进程间的数据交付,而进程与进程间的数据交付和差错检查是两种最低限度的运输层服务,也是 UDP 所能提供的两种服务,因此 UDP 仅仅提供了最低限度的运输层服务。

多路复用的要求

  1. 套接字拥有唯一标识符。
  2. 每个报文段都有特殊字段指示该报文段所要交付到的套接字。

套接字的唯一标识符是端口号,因此报文段中指示套接字的字段为源端口号目的端口号

端口号

端口号是一个 16 比特的数,大小在 0 ~ 65535 之间。0 ~ 1023 范围的端口号被称为周知端口号(Well-known Port Number)。1025 ~ 65535 范围的端口号被称为动态端口号(Dynamic Port Numbers)

| 端口 | 用途                       |
|:-----|:---------------------------|
| 21   | FTP 文件传输服务           |
| 22   | SSH 远程连接服务           |
| 23   | TELNET 终端仿真服务        |
| 25   | SMTP 简单邮件传输服务      |
| 53   | DNS 域名解析服务           |
| 80   | HTTP 超文本传输服务        |
| 443  | HTTPS 加密的超文本传输服务 |

无连接的多路复用与面向连接的多路复用

UDP 是无连接的运输层协议。一个 UDP 套接字由一个二元组标识,该二元组为目的 IP 地址和目的端口号。因此两个 UDP 报文即使源 IP 地址或源端口号不同,如果具有相同的目的 IP 地址和目的端口号,那么这两个报文也会通过相同的目的套接字被定向到相同的目的进程。

TCP 是面向连接的运输层协议。一个 TCP 套接字由一个四元组标识,该四元组为源 IP 地址、源端口号、目的 IP 地址和目的端口号。因此,只要四元组中任意元素不同,都将被定向到不同的套接字中去。

运输层协议

因特网为应用提供了两种截然不同的运输层协议,一种是用户数据报协议(User Datagram Protocol,UDP),一种是传输控制协议(Transmission Control Protocol,TCP)

UDP 在网络层的基础上,实现了运输层最低限度的要求,即多路复用、多路分解与差错校验。因此可以理解为 UDP 其实并没有提供什么特色功能,只提供最基础的支持,网络层无法解决的问题,在 UDP 中一样存在。

差错校验是必须的,如果无法保证数据的正确性,就算传输了又有什么用呢?每一个分层都有差错校验,网络层也有,但那仅仅只是校验数据报的而已,无法校验更顶层的数据,因此差错校验也是运输层协议必须实现的功能。

TCP 则提供了几种附加服务,即全双工服务可靠数据传输拥塞控制。可靠数据传输是面向进程的,它使得 TCP 可以正确、有序地将数据从发送端进程传递给接收端进程。拥塞控制是面向因特网的,它使得每一个通过拥塞网络链路的连接都能平等地共享网络链路带宽。

二者的具体解析见:

UDP 数据报与网络层数据报

我们知道,网络层分组我们称为数据报,而运输层分组我们称为报文段。但是 UDP 分组也被称为数据报,因为其实 UDP 的实现只是在网络层的基础上增加了最必需的运输层功能,并没有增加额外的功能。但是也有的文献因此将运输层分组称为数据报,这是错误的说法,最好不要这么说。

如果要保证严谨或者易于理解,就啰嗦点,直称运输层分组和网络层分组吧。