【网络系统与控制】3-传输层

Posted by Orchid on March 4, 2025

一、传输层的作用

  • 逻辑通信:为运行在不同主机上的应用进程之间提供逻辑通信。它在端系统中实现,将应用进程的报文封装成传输层报文段后传递给网络层;在接收端,重组网络层上交的报文段并传递给接收应用进程。
  • 多路复用与多路分解:发送端通过多路复用从不同套接字收集数据块,增加首部信息后生成报文段;接收端通过多路分解将报文段中的数据交付到正确的套接字。
  • 提供可靠或不可靠的服务:根据不同的协议(如TCP和UDP),传输层可以提供可靠的数据传输服务(TCP)或不可靠的数据传输服务(UDP)。

二、UDP(用户数据报协议)

  • 特点
    • 无连接:发送和接收端之间没有握手协议,每一个UDP报文段的管理是独立的。
    • “尽力而为”服务:UDP报文段可能会丢失和乱序,不提供可靠性保证。
    • 首部开销小:UDP报文段结构简单,首部字段只有8字节,包括源端口、目的端口、长度和检验和。
    • 时延短:适合对时延敏感的应用,如网络管理、DNS、流媒体等。
  • 报文段结构
    • 首部字段:源端口、目的端口、长度、检验和。
    • 伪首部:用于计算检验和,包括源IP地址、目的IP地址、协议号等。

  • 检验和:提供差错检测功能,采用2字节的整型数据求和反码的方式计算。若接收方将全部数据与检验和相加的和为全1的数据,则没有检测出差错。

    • UDP检验和的计算涉及以下几个部分:

      1. 伪首部(Pseudo-header):这是一个虚拟的首部,仅用于计算检验和,但不会真正出现在UDP报文段中。伪首部包括:
        • 源IP地址(32位)。
        • 目的IP地址(32位)。
        • 协议号(8位,UDP的协议号为17)。
        • UDP报文段的长度(16位)。
      2. UDP首部:UDP报文段的8字节首部,包括:
        • 源端口号(16位)。
        • 目的端口号(16位)。
        • 长度(16位)。
        • 检验和(16位)。在计算检验和时,检验和字段本身被置为0。
      3. UDP数据部分:应用层传递给UDP的数据。
    • UDP检验和的计算过程如下:

      1. 将伪首部、UDP首部和数据部分按顺序拼接成一个连续的字节流。
      2. 将字节流划分为16位(2字节)的整数序列。
      3. 对所有16位整数进行二进制反码求和(即按位加,溢出回卷)。
      4. 将最终的和取反码,得到检验和。

三、TCP(传输控制协议)

  • 特点
    • 面向连接:在数据传输之前需要建立连接,通过三次握手过程来建立连接,确保双方都准备好进行数据传输。
    • 可靠传输:通过确认应答、超时重传、滑动窗口等机制实现可靠的数据传输,确保数据的完整性和顺序性。
    • 字节流服务:没有报文的界限,只区分报文段。
    • 全双工服务:允许同时进行双向数据传输。
    • 流量控制与拥塞控制:通过窗口机制防止接收端溢出和分组交换机溢出。
  • 报文段结构
    • 首部:20字节固定首部+可变长度的选项字段。
    • 首部字段
      • 源端口和目的端口:各占2字节,用于标识发送端和接收端的端口号。
      • 序号字段:占4字节,用于对TCP连接中的数据流中的每一个字节进行编号。
      • 确认号字段:占4字节,表示期望收到对方的下一个报文段的数据的第一个字节的序号。
      • 数据偏移:占4位,表示TCP报文段的数据起始处距离TCP报文段的起始处有多远,单位是32位字。
      • 保留字段:占6位,保留为今后使用,目前应置为0。
      • 标志字段:包括URG(紧急)、ACK(确认)、PSH(推送)、RST(复位)、SYN(同步)、FIN(终止)等标志位。
      • 窗口字段:占2字节,用于流量控制,表示接收方期望接收的字节数。
      • 检验和:占2字节,用于检验TCP报文段的首部和数据部分。
      • 紧急指针字段:占16位,指出在本报文段中紧急数据共有多少个字节。
      • 选项字段:长度可变,最初只规定了最大报文段长度MSS选项。

  • 连接管理
    • 连接建立:通过三次握手过程实现。
      • 客户端发送一个SYN报文段,请求建立连接,其中SYN=1,序号为x。
      • 服务器收到请求后,发送一个SYN ACK报文段作为响应,其中SYN=1,序号为y,ACK=1,确认号为x+1。
      • 客户端收到SYN ACK报文段后,发送一个ACK报文段,其中SYN=0,序号为x+1,ACK=1,确认号为y+1,完成连接建立。
    • 连接关闭:客户端和服务器端分别关闭它们的连接,通过发送包含FIN=1的报文段来表示释放连接,并对包含FIN=1的报文段进行确认ACK。
  • 往返时间估计与超时重传
    • 往返时间估计:采用指数加权移动平均(EWMA)方法估计往返时间(RTT),公式为

      \[EstimatedRTT = (1-α)*EstimatedRTT + α*SampleRTT\]

      其中 $\alpha$ 推荐取值为0.125。

    • 超时重传时间间隔:通过计算 $SampleRTT$ 与 $EstimatedRTT$ 之间的差值的 $EWMA(DevRTT)$,并加上一个安全余量来设置超时重传时间间隔,公式为

      \[DevRTT = (1-\beta)*DevRTT + \beta*|SampleRTT-EstimatedRTT|\\ TimeoutInterval = EstimatedRTT + 4*DevRTT\]

      推荐取值:$\beta$ = 0.25