网络工程师 · 高频练习

中间一段数据没到,后面的报文到了,TCP ACK 号为什么不前进?

中级 单选题 第 922 题 中等 网络工程师TCP累计确认乱序报文SACK
题目

TCP 接收方已经按序收到序号至 1499 的所有字节,下一期望字节为 1500。此时序号 2000、长度 500B 的报文段先到达,而 1500~1999 尚未收到。按累计确认机制,接收方发送的 ACK 号通常仍为()。

A 2000
B 1500
C 2499
D 2500
题目类型:原创高频练习题 用途:用于帮助理解网络工程师相关考点和答案解析,不等同于官方真题。
正确答案
B
答案解析

TCP ACK 号表示下一个期望按序收到的字节。虽然 2000~2499 已经乱序到达,但 1500~1999 仍是缺口,因此累计 ACK 不能越过缺口,仍为 1500。若启用 SACK,可另行报告已收到的乱序数据块。

选项分析

A

错误。2000 是乱序报文段起始序号,不代表 1500~1999 已收到。

B

正确。1500 是当前连续字节流中的第一个缺失序号。

C

错误。ACK 表示下一期望字节,不写成最后一个已收字节。

D

错误。2500 只有在 1500~2499 已连续收齐后才可作为累计 ACK。

本题为什么容易错

抓到一个更大的序号不等于字节流已经连续。TCP 累计确认只承认没有缺口的前缀,这是快速重传能依赖重复 ACK 发现丢包的基础。

先看结论

简短答案

中间一段数据没到,后面的报文到了,TCP ACK 号为什么不前进,正确答案是 B(1500)。TCP ACK 号表示下一个期望按序收到的字节。虽然 2000~2499 已经乱序到达,但 1500~1999 仍是缺口,因此累计 ACK 不能越过缺口,仍为 1500。若启用 SACK,可另行报告已收到的乱序数据块。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
2000 本题干扰项 错误。2000 是乱序报文段起始序号,不代表 1500~1999 已收到。 看到该词不要急着选,先判断是否真正解决题干问题
1500 本题正确答案 正确。1500 是当前连续字节流中的第一个缺失序号。 看到题干核心场景时优先联想到它
2499 本题干扰项 错误。ACK 表示下一期望字节,不写成最后一个已收字节。 看到该词不要急着选,先判断是否真正解决题干问题
2500 本题干扰项 错误。2500 只有在 1500~2499 已连续收齐后才可作为累计 ACK。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 2000:错误。2000 是乱序报文段起始序号,不代表 1500~1999 已收到。
  • 2499:错误。ACK 表示下一期望字节,不写成最后一个已收字节。
  • 2500:错误。2500 只有在 1500~2499 已连续收齐后才可作为累计 ACK。
复习

知识点详解

TCP 字节序号按载荷字节计数,ACK 通常确认此前所有连续字节。接收方可缓存乱序段并重复发送当前 ACK;SACK 选项则报告额外收到的非连续区间。缺口补齐后,累计 ACK 可以一次向前跳过已缓存区间。SYN 和 FIN 也各占用一个序号,遇到握手与挥手题时要单独计入。

备考速记

ACK 盯第一个缺口,不追最后到达的报文。

TCP 在SACK场景中的作用

TCP在本题中的核心价值,是解决“TCP 接收方已经按序收到序号至 1499 的所有字节,下一期望字节为 1500。此时序号 2000、长度 500B 的报文段先到达,而 1500~1999 尚未收到。按累计确认机制,接收方发送的 ACK 号通常仍为()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出多个乱序报文段,计算接收方累计 ACK。
  • 根据三个重复 ACK 判断发送方何时触发快速重传。
TCP 在网络工程师软考中的考法

软考选择题通常不会只考概念定义,还会把TCP放到SACK场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

在接收窗口上画一条线最清楚:1499 以前全齐,1500 到 1999 空着,2000 到 2499 虽然到了,但它跨不过前面的坑。累计 ACK 只能站在第一个缺口 1500。SACK 像附加便条,可以告诉发送方“后面的 2000~2499 我已经收了”,减少恢复时的重复发送,但主 ACK 仍不变。

考点定位

ACK 号不是“最后看见的序号”,而是“连续数据之后的下一个期望序号”。先找连续前缀,再决定 ACK。

易错提醒

  • 把 ACK 写成最后已收字节而不是下一期望字节。
  • 忽略报文长度,只看起始序号。
  • 认为启用 SACK 后累计 ACK 就可以跳过缺口。

备考提示

  • 草稿上标出每段的半开区间,例如[2000,2500),边界不易算错。
  • 把累计 ACK、重复 ACK、SACK 和快速重传放在同一时间线复习。

你可能还想了解

  • TCP ACK 号为什么是下一个期望字节?
  • SACK 会改变累计 ACK 规则吗?
  • 三个重复 ACK 为什么触发快速重传?

本文小结

接收方连续数据只到1499,1500~1999仍缺失,所以即使2000~2499先到,累计ACK仍是1500。SACK可补充报告后面的已收区间,但不能让主ACK越过缺口。