408真题解析-2009-38-网络-TCP累积确认

一 真题2009-38

2009-38题. 主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300B和500B的有效载荷,第一个段的序列号为200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是()。

A. 500

B. 700

C. 800

D. 1000

二 题目要素解析

场景: TCP 连接的数据传输阶段。

已知条件:

  • 发送方:主机甲
  • 接收方:主机乙
  • 第一个段:序列号(Seq)= 200,数据长度 = 300B
  • 第二个段:紧接第一个段,数据长度 = 500B
  • 接收状态:主机乙正确接收了这两个段

求: 主机乙返回的确认序列号(ACK)。

核心考点: TCP 的确认机制 ------累积确认(Cumulative Acknowledgment)。

TCP 的 ACK 号表示 "期望收到的下一个字节的序列号"。

三 哔哔详解

这道题考察的是 TCP 最基础也最重要的序列号计算逻辑。

  1. 理解序列号(Seq)的含义:

    TCP 是面向字节流的协议。每个字节都有一个编号。

    • 第一个段的 Seq = 200,意味着这个段里的第 1 个字节编号是 200。
    • 该段有 300B,所以它覆盖的字节范围是:200 ~ 499(计算:200 + 300 - 1 = 499)。
  2. 推算第二个段的序列号:

    题目说是 "连续" 的 TCP 段。

    • 第二个段紧接着第一个段,所以它的起始序列号应该是第一个段的结束号 + 1。
    • 第二个段的 Seq = 500。
    • 该段有 500B,所以它覆盖的字节范围是:500 ~ 999(计算:500 + 500 - 1 = 999)。
  3. 理解确认号(ACK)的含义:

    TCP 使用累积确认 。接收方回复的 ACK 号,代表它已经正确接收了该序号之前的所有字节 ,并且期望接收该序号的字节作为下一个数据。

    • 公式:ACK=最后一个正确收到的字节序号+1。
  4. 计算 ACK 号:

    • 主机乙收到了两个段,最后一个正确收到的字节序号是 999。
    • 那么,它期望下一次收到的字节序号就是 999 + 1 = 1000。
    • 所以,确认号 ACK = 1000。

四 参考答案

参考答案 D

五 考点精析

5.1 TCP 序号与确认号基本规则

1. 序号(Sequence Number, SEQ)

  • 定义 :标识本报文段中第一个字节在发送方字节流中的位置。
  • 编号单位按字节编号(不是按报文段)。
  • 初始值:ISN(Initial Sequence Number),随机生成(防 SYN Flood 攻击)。
  • 递增规则:
    • 每发送 n 字节数据,下一段 SEQ = 当前 SEQ + n
    • SYN/FIN 标志位也消耗一个序号(即使无数据)

✅ 示例:

SEQ=100,载荷=200B → 字节范围 [100, 299],下一段 SEQ=300

2. 确认号(Acknowledgment Number, ACK)

  • 定义 :表示期望收到的下一个字节的序号
  • 含义 :已成功接收 [0, ACK−1] 的所有字节(累积确认)。
  • 有效条件 :仅当 ACK 标志位 = 1 时,确认号字段有效。
  • 响应关系:
    • 对方发来 SEQ=x,载荷=L → 本端应回复 ACK = x + L
    • 若含 SYN 或 FIN,则 ACK = x + 1(因它们各占 1 个序号)

✅ 示例:

收到 SEQ=500,500B 数据 → 回复 ACK=1000

收到 SYN(SEQ=100)→ 回复 ACK=101

5.2 SYN/FIN 对序号的影响

关键规则

  • SYN 消耗 1 个序号(即使无数据)
  • FIN 消耗 1 个序号
  • 纯 ACK 段不消耗序号

5.3 三次握手 (3-Way Handshake) 过程

第一次握手 (Client *→* Server):

  • 标志位:SYN = 1
  • 序号:Seq = x (ISN, 初始序列号)
  • 注意:此时 Client 没有发送数据,但消耗了 1 个序号。

第二次握手 (Server *→* Client):

  • 标志位:SYN = 1, ACK = 1
  • 序号:Seq = y (Server 的 ISN)
  • 确认号:ACK = *x+1* (期望收到 Client 的第一个数据字节)
  • 注意:Server 回复了 SYN,所以自己的 Seq 也要 +1 供下次使用。

第三次握手 (Client *→* Server):

  • 标志位:ACK = 1
  • 序号:Seq = *x+1* (因为第一次握手的 SYN 消耗了 1)
  • 确认号:ACK = *y+1* (期望收到 Server 的第一个数据字节)

5.4 四次挥手 (4-Way Wavehand) 过程

注意 FIN 报文也消耗序号。

  • 第一次挥手 (Client *→* Server):
    • 标志位:FIN = 1
    • 序号:Seq = u
    • 状态:Client 进入 FIN_WAIT_1。
  • 第二次挥手 (Server *→* Client):
    • 标志位:ACK = 1 (仅仅是确认关闭请求,还没准备好关闭)
    • 序号:Seq = v
    • 确认号:ACK = *u+1* (FIN 消耗了 1)
    • 状态:Server 进入 CLOSE_WAIT;Client 进入 FIN_WAIT_2。
  • 第三次挥手 (Server *→* Client):
    • 标志位:FIN = 1, ACK = 1 (Server 数据发完了,准备关闭)
    • 序号:Seq = w (通常 w=v,除非中间发了数据)
    • 确认号:ACK = u+1 (重复确认)
    • 注意:FIN 消耗 1 个序号。
  • 第四次挥手 (Client *→* Server):
    • 标志位:ACK = 1
    • 序号:Seq = u+1
    • 确认号:ACK = *w+1* (确认 Server 的 FIN)

5.5 序号回绕 (Sequence Wraparound)

概念: TCP 序号是 32 位的。当序号达到 232−1 后,下一个序号变为 0。

考点: 计算序号回绕时间。

公式:T=232带宽T = \frac{2^{32}}{\text{带宽}}T=带宽232

例子: 1Gbps 链路的回绕时间约为 34 秒。为了防止旧报文干扰,TCP 规定了 PAWS(Protect Against Wrapped Sequences)机制。

5.6 窗口与确认的关系

滑动窗口: 接收方在 ACK 报文中会携带一个 Window Size 字段。

含义: 告诉发送方 "我现在的接收缓冲区还剩多少空间,请以此控制发送速率"。

考点: 发送方的发送窗口大小取决于 Min [拥塞窗口 cwnd, 接收窗口 rwnd]

5.3 易错点总结

错误认知 正确认知
"确认号 = 最后收到的 SEQ" ❌ 应为 最后收到的 SEQ + 载荷
"SYN 不占序号" ❌ SYN/FIN 各占 1 个序号
"ACK 段会改变 SEQ" ❌ 纯 ACK 段 SEQ 不变(除非同时携带数据)
"序号按报文段编号" ❌ 按字节编号

六 考点跟踪

年份 题号 考查内容 CSDN 参考链接 VX参考链接
2009 第38题 TCP 序列号与确认号计算(基础累加)
2011 第39题 TCP三次握手中的 SEQ/ACK
2012 第47题 TCP三次握手中的 SEQ/ACK
2013 第39题 TCP 序列号与确认号计算
2016 第41题 TCP三次握手
2020 第39题 反推发送的字节数
2021 第41题 TCP 序列号与确认号计算
2023 第47题 TCP 序列号与确认号计算
2024 第38题 TCP 释放连接最少时间
2025 第38题 反向计算可发送的段数

说明 :本文内容基于公开资料整理,参考了包括但不限于《数据结构》(严蔚敏)、《计算机操作系统》(汤小丹)、《计算机网络》(谢希仁)、《计算机组成原理》(唐朔飞)等国内高校经典教材,以及其他国际权威著作。同时,借鉴了王道、天勤、启航等机构出版的计算机专业考研辅导系列丛书 中的知识体系框架与典型题型分析思路。文中所有观点、例题解析及文字表述均为作者结合自身理解进行的归纳与重述,未直接复制任何出版物原文。内容仅用于学习交流,若有引用不当或疏漏之处,敬请指正。

相关推荐
何双新2 小时前
TCP 协议深度解析与实践:从零基础到精通
网络·网络协议·tcp/ip
小李独爱秋2 小时前
计算机网络经典问题透视:RTCP协议深度解析——从应用场景到五大分组类型
网络·网络协议·tcp/ip·计算机网络·信息与通信·rtcp
小白电脑技术2 小时前
玩客云OneCloud开启SMB文件共享教程
网络·电脑
wheeldown3 小时前
【Linux】 Linux网络编程入门:Soket编程详解
linux·运维·网络
Godspeed Zhao10 小时前
现代智能汽车中的无线技术25——Wi-Fi(13)
网络·汽车·智能路由器·信息与通信
Bruce_Liuxiaowei11 小时前
基于HTA的Meterpreter反向Shell攻击实验
网络·windows·经验分享·网络安全·渗透测试
蜂蜜黄油呀土豆11 小时前
深入了解计算机网络中的传输层:TCP 和 UDP
tcp/ip·计算机网络·quic·拥塞控制
Dreamboat¿11 小时前
解析PHP安全漏洞:Phar反序列化、Filter链与文件包含的高级利用与防御
android·网络·php
laplace012312 小时前
第七章 构建自己的agent智能体框架
网络·人工智能·microsoft·agent