计算机网络-传输层

5.1 传输层提供的服务

端口的作用

  • 通过**“端口号”**标识本主机的一个特定进程

    • 每台主机的端口号是相互独立的
    • TCP、UDP两种协议的端口号也是相互独立的
  • TCP或UDP协议,通过Socket 套接字={IP地址:端口号},唯一标识网络中的一台主机上的一个应用进程

  • 端口号的分类

    • 服务器使用的端口号
      • 熟知端口号(0~1023)熟知端口号
      • 登记端口号(1024~49151)
    • 客户端使用的端口号——短暂端口号 49152~65535

功能

  • 实现端到端(进程到进程)的通信
  • 复用和分用
    • 复用(从上到下)
      • 在发送数据的时候,同一台主机上的多个进程可以使用同一个传输协议
    • 分用(从下到上)
      • 在接收数据的时候,传输层可以把数据正确交付到目的进程
  • 差错检测
    • TCP检测出差错后丢弃数据,并通知发送方重传
    • UDP检测出错误后直接丢弃,且不通知发送方
  • 向应用层提供两种服务
    • 面向连接的、可靠的端到端传输服务(TCP)——确保数据正确/完整,但开销大、实时性差
    • 无连接的、不可靠的端到端传输服务(UDP)——数据可能出错/丢失,但速度快、开销小

5.2 UDP

UDP

  • UDP首部很小,只占 8B
  • UDP每次传输一个完整的报文,不支持报文自动拆分、重装
  • UDP是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制
  • UDP支持一对一(封装成单播IP数据报)、一对多传输(封装成广播/多播IP数据报)

与TCP的区别

  • TCP首部更大,占60~80B
  • TCP支持报文自动拆分、重装,因此可以传输长报文
  • TCP是有连接的、可靠的、支持拥塞控制
  • TCP仅支持一对一传输(因为通信双方的传输层必须先建立连接)

UDP数据报格式

image-20250628133217355

UDP检验(差错检验)

​ 发送方计算原始数据之和(最高位进位要“回卷”),对其逐位取反,结果为校验和,一起发给接收方,接收方将所有数据相加,结果为1则正确,否则发送比特错误。

发送方:

image-20250628140929253

接收方

image-20250628141210020


5.3 TCP

框架梳理

大致流程

  • 建立连接(三次握手)
  • 数据传输
  • 释放连接(四次挥手,两次挥手只断开一方的连接)

建立TCP连接时,双方协商各自的MSS(最大段长)

每次建立TCP连接,可以传输多个报文(双向),TCP是面向字节流的(而UDP是面向报文的)。无论传输多少个报文,在TCP协议看来都是一连串字节流。

TCP连接大致流程:

image-20250628170202608

TCP报文段

另译为“TCP段”

TCP首部和IP首部比特数相同

TCP段格式:image-20250628150539716

确认号具有累积确认的特性。

数据偏移字段标识TCP首部长度,以 \(\times 4B\) 为单位,填充字段负责为其凑足 \(4B\) 的整数倍。

窗口字段表示接受窗口的大小。从本报文段中的ack_seq算起,接收方还能接受多少数据。这个字段是实现流量控制的关键

校验和字段和UDP雷同,也需添加12B伪首部(将UDP伪首部的协议字段的17改为6,UDP长度字段改成TCP的)

注:在TCP首部中,并不会专门记录TCP数据部分长度(会根据IP首部、TCP首部的信息算出来)

保留字段(6bit)一般无用,置为0

标志位

  • 紧急位URG=1时,紧急指针有效。表示这时紧急数据,应尽快插队发送。紧急指针的序号是独立的
  • 推送位PSH=1时,表示希望接收方尽快回复(用于交互式通信)
  • 复位位RST=1时,表示出现严重差错(如主机崩溃),必须释放连接。也可用于拒绝一个非法报文段(如恶意的黑客攻击)
  • 同步位SYN=1时,表示这是一个连接请求或连接接受报文,只握手①和握手②时会让SYN=1
  • 终止位FIN=1时,表明此报文段的发送方数据已发送完毕,要求释放传输连接。挥手①和挥手③时FIN=1

当标志位为1时,可称为(改标志位)段,如ACK段。

TCP连接管理

连接建立阶段

  • 握手①②不能携带数据,握手③可以携带数据
  • 握手①②固定消耗1个序号(握手②的确认号是握手①+1)
  • 握手③如果不携带数据,就不消耗序号

TCP连接建立时的状态转换与耗时分析:

image-20250628172627481

SYS可能是SYN的误写

释放连接阶段①②③④

  • 只有挥手①和挥手③的FIN=1
  • 挥手①和挥手③即使不携带数据,也要消耗一个序号(①③实际上往往也不会携带数据)
  • 挥手②可以携带数据
  • 挥手④不可以携带数据

TCP释放连接时的状态转换与耗时分析:

注意也有可能是服务器先发出挥手

image-20250628173902892

由于终止等待2和关闭等待的时间极短,可忽略。其他时间计算可用RTT和MSL

TCP可靠传输、流量控制

可靠传输

  • 序号——进程在建立连接时确定起始序号,数据传输过程中,每个字节对应一个序号
  • 确认机制
  • 重传机制

流量控制(滑动窗口机制)

  • 接收方维持一个接收窗口
  • 发送方维持一个发送窗口

快重传机制