Skip to content

408

计算机网络

CN-05-05 TCP可靠传输机制


一、定位信息

  • 圈层:核心层
  • 前置知识:需要掌握TCP报文段格式(序号、确认号、校验和),理解TCP面向字节流的特点
  • 知识网络位置:TCP可靠传输是TCP协议的核心价值所在——它建立在网络层不可靠服务之上,通过序号、确认、重传三大机制向上层提供可靠的数据传输服务,是流量控制和拥塞控制的底层基础
  • 考点热度等级H级(高频重点)——可靠传输机制是TCP综合题的核心考查内容,涉及序号计算、超时重传、快重传等

二、知识点讲解

2.1 可靠传输的基本原理

TCP在不可靠的IP层之上实现可靠传输,核心思想是:通过序号保证有序,通过确认保证到达,通过重传保证不丢

可靠传输的三个基本机制:

  1. 序号机制:每个字节都有编号,接收方据此排序
  2. 确认机制:接收方告知发送方已收到的数据范围
  3. 重传机制:超时未确认或收到冗余确认时重新发送

2.2 序号机制

TCP将数据视为连续的字节流,每个字节都有一个32位的序号。发送方为每个报文段设置序号(该报文段第一个字节的编号),接收方根据序号将数据重新排序。

例如:发送方要发送3000字节的数据,MSS(最大报文段长度)为1000字节,则:

  • 第1个报文段:seq=1000,数据=字节1000~1999
  • 第2个报文段:seq=2000,数据=字节2000~2999
  • 第3个报文段:seq=3000,数据=字节3000~3999

2.3 确认机制

TCP采用**累积确认(Cumulative ACK)**机制:确认号N表示序号N之前的所有数据都已正确接收。

确认方式说明TCP是否采用
逐条确认每收到一个报文段就确认一次是(基本方式)
累积确认确认号表示"此号之前全部收到"是(核心机制)
选择确认(SACK)窗口中哪些字节已收到,哪些缺失是(可选扩展)

延迟确认(Delayed ACK):TCP接收方不必立即确认每个报文段,可以延迟一段时间(通常200ms),如果有数据要发送则捎带确认(Piggybacking)。但延迟不能超过最大延迟(通常500ms),且每收到两个报文段至少发送一个确认。

2.4 超时重传机制

发送方发出报文段后启动一个重传计时器(Retransmission Timer)。如果在计时器超时前没有收到确认,就重传该报文段。

超时时间(RTO, Retransmission Timeout)的确定是关键问题。RTO应略大于往返时间RTT,但RTT是动态变化的。TCP使用以下公式估算:

  1. 测量样本RTT(SampleRTT):从发送报文段到收到确认的时间
  2. 计算加权平均RTT(EstimatedRTT)EstimatedRTT=(1α)×EstimatedRTT+α×SampleRTT\text{EstimatedRTT} = (1 - \alpha) \times \text{EstimatedRTT} + \alpha \times \text{SampleRTT} 其中 α\alpha 通常取0.125(1/8)
  3. 计算RTT偏差(DevRTT)DevRTT=(1β)×DevRTT+β×SampleRTTEstimatedRTT\text{DevRTT} = (1 - \beta) \times \text{DevRTT} + \beta \times |\text{SampleRTT} - \text{EstimatedRTT}| 其中 β\beta 通常取0.25(1/4)
  4. 计算超时时间(RTO)RTO=EstimatedRTT+4×DevRTT\text{RTO} = \text{EstimatedRTT} + 4 \times \text{DevRTT}

2.5 快重传机制

超时重传的问题是等待时间太长。**快重传(Fast Retransmit)**机制让发送方尽早知道个别报文段的丢失。

快重传的工作原理:

  1. 接收方每收到一个失序的报文段,就立即发送一个冗余确认(重复确认),确认号为期望收到的下一个字节序号
  2. 接收方在收到下一个期望的报文段之前,每收到一个后续报文段都要发送冗余确认
  3. 发送方一旦收到3个冗余确认(即同一个确认号的第4次出现),就立即重传丢失的报文段,而不等待超时
发送方                           接收方
  |                                |
  |--- seq=1, 100字节 ----------->|  正常收到,ack=101
  |<-------- ack=101 ------------|
  |                                |
  |--- seq=101, 100字节 --------->|  丢失!
  |                                |
  |--- seq=201, 100字节 --------->|  收到但失序,发冗余确认
  |<-------- ack=101 ------------|  冗余确认#1
  |                                |
  |--- seq=301, 100字节 --------->|  收到但失序,发冗余确认
  |<-------- ack=101 ------------|  冗余确认#2
  |                                |
  |--- seq=401, 100字节 --------->|  收到但失序,发冗余确认
  |<-------- ack=101 ------------|  冗余确认#3(第4个相同ack)
  |                                |
  |--- seq=101, 100字节 --------->|  立即重传!(快重传)
  |<-------- ack=401 ------------|  累积确认到401

2.6 冗余确认与SACK

冗余确认(Duplicate ACK):接收方收到失序报文段时发送的确认,确认号为期望的下一个字节序号。快重传利用连续3个冗余确认来判断报文段丢失。

SACK(Selective Acknowledgment,选择确认):累积确认只告诉发送方"我收到哪了",不能告诉发送方"哪些具体字节已收到"。SACK选项允许接收方在确认中附加一个"已收到的字节范围"列表,让发送方只重传真正丢失的部分。

SACK选项通过TCP首部的"选项"字段实现,格式为:[左边界1, 右边界1], [左边界2, 右边界2], ...

2.7 TCP可靠传输机制总览

机制解决的问题核心方法
序号数据可能乱序到达每个字节编号,接收方按序号重组
确认不知道对方是否收到累积确认,告知已收到的最大连续序号
超时重传数据可能丢失RTO超时后重传
快重传超时等待太久收到3个冗余确认立即重传
校验和数据可能出错16位校验和检测
SACK累积确认效率低告知具体哪些字节已收到

三、记忆与理解辅助

  1. 口诀:"序号确认加重传,可靠传输三板斧;超时太慢用快传,三个冗余就动手"——记住可靠传输的三大基本机制和快重传的触发条件。

  2. 公式记忆:RTO = EstimatedRTT + 4×DevRTT。记忆技巧:"估计值加上四倍偏差"——偏差越大,超时越保守。

  3. 对比记忆:超时重传 vs 快重传——超时重传是"等不及了"(计时器超时),快重传是"听出来了"(3个冗余确认暗示丢包)。快重传通常比超时重传更快触发。

  4. 类比记忆:累积确认像老师批改作业——"第1到第5题都对了"(确认号=6),而不是"第1题对了、第2题对了..."逐个确认。SACK像老师说"第1、2、4、5题对了,第3题没交"。


四、例题与精解

例题1(基础巩固)

题目:TCP发送方连续发送了序号为1000、2000、3000的三个报文段(每个1000字节)。接收方依次收到了序号为1000和3000的报文段,序号为2000的报文段丢失。此时接收方发送的确认号为( ),发送方收到3个冗余确认后应重传的报文段序号为( )。

A. 2000, 2000

B. 3000, 2000

C. 2000, 3000

D. 4000, 2000

命题意图:考查累积确认机制和快重传的触发条件。

精解

  1. 审题分析:接收方收到seq=1000(正常)和seq=3000(失序),seq=2000丢失。

  2. 解题思路

    • 累积确认:确认号 = 期望收到的下一个字节序号 = 已收到的最大连续字节序号 + 1
    • 收到seq=1000的数据(字节1000~1999),确认号应更新为2000
    • seq=2000的数据丢失,seq=3000的数据到达但失序
    • 接收方对seq=3000的报文段发送冗余确认,确认号仍为2000
  3. 完整步骤

    • 收到seq=1000:累积确认ack=2000
    • seq=2000丢失,seq=3000到达(失序):发送冗余确认ack=2000
    • 确认号 = 2000(因为2000~2999的数据缺失)
    • 快重传:收到3个冗余确认(ack=2000出现4次)后,重传seq=2000的报文段
  4. 方法反思:累积确认的关键是确认号只关注"最大连续已收"的边界。失序报文段不会更新确认号,只会触发冗余确认。

答案:A


例题2(中等提升)

题目:TCP发送方测量到的SampleRTT值依次为:100ms, 120ms, 90ms。初始EstimatedRTT=100ms,初始DevRTT=5ms,α=0.125,β=0.25。经过三次测量后,RTO的值约为( )。

A. 130ms

B. 120ms

C. 115ms

D. 140ms

命题意图:考查TCP超时时间RTO的计算过程,包括EstimatedRTT、DevRTT和RTO的递推公式。

精解

  1. 审题分析:需要按照TCP的公式逐次更新EstimatedRTT和DevRTT,最后计算RTO。

  2. 解题思路:使用递推公式,每次测量后更新EstimatedRTT和DevRTT。

  3. 完整步骤

    第一次测量:SampleRTT=100ms

    • EstimatedRTT = (1-0.125)×100 + 0.125×100 = 0.875×100 + 0.125×100 = 100ms
    • DevRTT = (1-0.25)×5 + 0.25×|100-100| = 0.75×5 + 0.25×0 = 3.75ms
    • RTO = 100 + 4×3.75 = 115ms

    第二次测量:SampleRTT=120ms

    • EstimatedRTT = 0.875×100 + 0.125×120 = 87.5 + 15 = 102.5ms
    • DevRTT = 0.75×3.75 + 0.25×|120-102.5| = 2.8125 + 0.25×17.5 = 2.8125 + 4.375 = 7.1875ms
    • RTO = 102.5 + 4×7.1875 = 102.5 + 28.75 = 131.25ms

    第三次测量:SampleRTT=90ms

    • EstimatedRTT = 0.875×102.5 + 0.125×90 = 89.6875 + 11.25 = 100.9375ms
    • DevRTT = 0.75×7.1875 + 0.25×|90-100.9375| = 5.390625 + 0.25×10.9375 = 5.390625 + 2.734375 = 8.125ms
    • RTO = 100.9375 + 4×8.125 = 100.9375 + 32.5 = 133.4375ms ≈ 133ms

    最接近的选项是A(130ms)。

  4. 方法反思:RTO计算虽然公式简单但步骤繁琐,考研中通常只考一轮或两轮递推。关键是记住三个公式的含义:EstimatedRTT是加权平均,DevRTT是偏差的加权平均,RTO是估计值加四倍偏差。

答案:A


五、考情分析

  • 考查频次:近5年408真题中可靠传输相关题目约出现5~8次
  • 常见题型:选择题(确认号计算、快重传触发条件)和综合题(结合流量控制/拥塞控制的完整分析)
  • 分值占比:4~8分
  • 命题趋势:近年倾向于将可靠传输与流量控制、拥塞控制综合考查,题目综合性增强。RTO计算和SACK机制也有考查趋势
  • 基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:将累积确认号理解为"已收到的最后一个字节的序号"

    • 错误原因:直觉上认为"确认号=最后收到的"
    • 正确理解/做法:确认号 = 期望收到的下一个字节序号 = 已收到的最大连续字节序号 + 1。例如收到字节0~999,确认号=1000,不是999。
  2. 错误表现:认为收到3个冗余确认后就进入拥塞控制的"快恢复"阶段

    • 错误原因:将"快重传"和"快恢复"混为一谈
    • 正确理解/做法:快重传是一种可靠传输机制(尽早重传丢失报文段),快恢复是一种拥塞控制算法(调整拥塞窗口)。快重传后是否进入快恢复取决于具体的拥塞控制策略(Reno版本会,Tahoe版本不会)。
  3. 错误表现:认为TCP的每个报文段都必须立即确认

    • 错误原因:过度简化确认机制
    • 正确理解/做法:TCP支持延迟确认——接收方可以等待最多500ms再发送确认,期间如果有数据要发送则捎带确认。每收到两个报文段至少发送一个确认。
  4. 错误表现:在RTO计算中忘记DevRTT的更新

    • 错误原因:只关注EstimatedRTT的更新,忽略了DevRTT也需要同步更新
    • 正确理解/做法:每次测量都要同时更新EstimatedRTT和DevRTT,然后用更新后的两个值计算RTO。

七、来源标注

  • 依据2026考研统考大纲·计算机网络部分
  • 依据《计算机网络(第8版)》谢希仁版
  • 依据《计算机网络:自顶向下方法(第8版)》James F. Kurose版
  • 依据RFC 6298 - Computing TCP's Retransmission Timer

考研全科复习资料 - 基于2026考研统考大纲