Skip to content

408

计算机网络

CN-05-03 TCP报文段格式


一、定位信息

  • 圈层:核心层
  • 前置知识:需要了解传输层基本功能(端口号、复用/分用),理解TCP面向字节流和面向连接的特点
  • 知识网络位置:TCP报文段格式是理解TCP所有机制(连接管理、可靠传输、流量控制、拥塞控制)的基础,是后续四个知识单元的"字典级"参考
  • 考点热度等级H级(高频重点)——TCP首部字段的含义和作用是选择题和综合题的高频考点,尤其是序号、确认号、标志位、窗口字段

二、知识点讲解

2.1 TCP报文段总体结构

TCP(Transmission Control Protocol,传输控制协议)是传输层最核心的协议,定义在RFC 793中。TCP传输的数据单位称为报文段(Segment)

TCP报文段由首部数据两部分组成。首部的前20字节是固定的,后面有最多40字节的可选部分,因此TCP首部长度为20~60字节

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          源端口号              |        目的端口号              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        序号(Sequence Number)                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     确认号(Acknowledgment Number)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 |U|A|P|R|S|F|            窗口大小              |
| (4位)   |(6位)|R|C|S|S|Y|I|                                   |
|         |     |G|K|H|T|N|N|                                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           校验和               |        紧急指针                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    选项(可选,0~40字节)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      数据(可变长)                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.2 各字段详解

字段长度说明
源端口号16位发送方进程端口号
目的端口号16位接收方进程端口号
序号(Seq)32位本报文段所发送数据的第一个字节在整个字节流中的编号
确认号(Ack)32位期望收到对方下一个报文段的第一个字节的序号,表示该序号之前的所有数据已正确接收
数据偏移4位TCP首部长度,单位为4字节(32位),最小值5(20字节),最大值15(60字节)
保留位6位置为0,留待将来使用
URG1位紧急标志,=1时表示紧急指针字段有效,本报文段中有紧急数据
ACK1位确认标志,=1时表示确认号字段有效。TCP连接建立后所有报文段都必须置ACK=1
PSH1位推送标志,=1时接收方应尽快将数据交付给应用层,不必等缓冲区满
RST1位复位标志,=1时表示TCP连接出现严重差错,必须释放连接后重新建立
SYN1位同步标志,=1时表示这是一个连接请求或连接接受报文段
FIN1位终止标志,=1时表示发送方数据已发送完毕,要求释放连接
窗口16位发送本报文段的一方的接收窗口大小,单位为字节,用于流量控制
校验和16位校验范围包括首部和数据,计算时也需要伪首部(类似UDP)
紧急指针16位仅在URG=1时有效,指出本报文段中紧急数据的字节数(从数据部分开头算起)
选项可变最大40字节,常见选项包括MSS、窗口扩大选项、时间戳选项、SACK等

2.3 关键字段深入解析

序号(Sequence Number): TCP将数据视为一个连续的字节流,每个字节都有一个编号。序号不是报文段的编号,而是本报文段所发数据的第一个字节在字节流中的编号。初始序号(ISN)在三次握手时由双方各自随机选择。

确认号(Acknowledgment Number): 确认号表示"期望收到对方下一个报文段的第一个字节的序号"。采用累积确认机制——确认号N表示序号N之前的所有数据都已正确接收。例如,确认号=1000表示序号0~999的数据已全部收到。

窗口(Window Size): 窗口字段用于流量控制,表示发送本报文段的一方当前愿意接收的数据量(以字节为单位)。这个值是动态变化的,接收方通过窗口字段告知发送方"我的接收缓冲区还能装多少数据"。

2.4 TCP报文段关键字段速查表

字段在连接管理中的作用在可靠传输中的作用在流量/拥塞控制中的作用
序号SYN报文段消耗一个序号标识数据位置,用于排序和去重
确认号确认对方的SYN累积确认,触发发送窗口滑动
SYN三次握手的标志
FIN四次挥手的标志
ACK连接建立后始终为1确认有效标志
RST异常释放连接
窗口流量控制的核心字段

三、记忆与理解辅助

  1. 口诀:"序号确认窗口SYN,六大标志ACK最勤;首部二十到六十,数据偏移四字节为单位"——记住TCP首部的核心字段和标志位。

  2. 标志位记忆法:六个标志位可以用"UAPRSF"记忆——URG(紧急)、ACK(确认)、PSH(推送)、RST(复位)、SYN(同步)、FIN(终止)。口诀:"你(URG)确认(ACK)推(PSH)倒(RST)那(SYN)个风扇(FIN)"。

  3. 对比记忆:序号 vs 确认号——序号是"我说到哪了"(发送方),确认号是"我听到哪了"(接收方)。确认号 = 期望收到的下一个字节序号 = 已收到的最大连续字节序号 + 1。

  4. 数字记忆:数据偏移字段4位,单位4字节,所以首部最长 = 15 × 4 = 60字节,最短 = 5 × 4 = 20字节。窗口字段16位,最大窗口 = 21612^{16} - 1 = 65535字节(配合窗口扩大选项可更大)。


四、例题与精解

例题1(基础巩固)

题目:TCP报文段首部中,用于实现流量控制的字段是( ),用于标识本报文段数据起始位置的字段是( )。

A. 窗口;序号

B. 确认号;窗口

C. 序号;确认号

D. 窗口;确认号

命题意图:考查TCP首部关键字段的功能定位,特别是序号、确认号和窗口的区别。

精解

  1. 审题分析:题目问两个问题——流量控制用什么字段?标识数据起始位置用什么字段?

  2. 解题思路:流量控制的机制是接收方告诉发送方自己的接收能力,这个信息通过"窗口"字段传递。标识数据在字节流中位置的字段是"序号"。

  3. 完整步骤

    • 流量控制:接收方通过TCP首部中的窗口字段告知发送方自己还能接收多少数据,发送方据此调整发送量。答案是窗口
    • 数据起始位置:TCP首部中的序号字段记录了本报文段所发送数据的第一个字节在整个字节流中的编号。答案是序号
    • 确认号的作用是告诉对方"我已经收到哪些数据",不是标识本报文段的起始位置。
  4. 方法反思:TCP首部字段的功能是基础但重要的考点。建议将序号、确认号、窗口三个核心字段与可靠传输、流量控制两大功能一一对应记忆。

答案:A


例题2(中等提升)

题目:主机A向主机B发送一个TCP报文段,其中序号=200,确认号=800,数据部分长度=100字节。主机B收到该报文段后正确接收,则主机B回复的TCP报文段中确认号应为( )。若主机A在发送该报文段之前已收到主机B的上一个报文段(其中窗口=500),则主机A此时的发送窗口上限为( )。

A. 300, 500

B. 300, 800

C. 800, 500

D. 800, 300

命题意图:考查确认号的计算方法和发送窗口的含义。

精解

  1. 审题分析:第一问:主机B正确接收后,应发送确认号=?;第二问:发送窗口的上限如何确定。

  2. 解题思路

    • 确认号 = 期望收到的下一个字节序号 = 本报文段序号 + 数据长度
    • 发送窗口上限 = 发送窗口下限 + 窗口大小
  3. 完整步骤

    • 确认号计算:主机A发送的报文段序号=200,数据长度=100字节,因此数据覆盖字节编号200~299。主机B正确接收后,期望收到的下一个字节序号为300。所以主机B回复的确认号=300
    • 发送窗口计算:主机B的窗口=500,表示主机B还能接收500字节的数据。主机A的发送窗口大小即为500字节。题目未给出发送窗口下限,但通常确认号300对应的发送窗口下限为已确认的最大序号(需结合上下文)。本题简化处理:发送窗口上限 = 已确认的序号 + 窗口大小。由于A刚发出的报文段还未被确认,A的发送窗口应以最近收到的确认号为基准。题目中未明确给出A之前收到的确认号,但从B的窗口=500可直接得出发送能力为500字节。
  4. 方法反思:确认号的计算是TCP中最基础也最高频的考点,公式为:确认号 = 序号 + 数据长度。窗口字段表示的是接收方的接收能力,发送方据此控制发送量。

答案:A


五、考情分析

  • 考查频次:TCP报文段格式相关题目在近5年408真题中几乎每年都有,约5~8次
  • 常见题型:选择题(字段功能辨析、确认号计算)和综合题(与连接管理、可靠传输结合)
  • 分值占比:2~6分
  • 命题趋势:近年倾向于综合考查——将首部字段与TCP的具体机制(三次握手、可靠传输)结合,而非孤立地考查字段含义。序号和确认号的计算是必考内容
  • 基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:认为TCP的序号是报文段的编号(第1个、第2个...)

    • 错误原因:直觉上将"序号"理解为消息编号
    • 正确理解/做法:TCP序号是字节流中第一个字节的编号,不是报文段的编号。一个报文段可以包含多个字节,序号标注的是起始位置。
  2. 错误表现:混淆确认号的含义,认为确认号=已收到的最后一个字节的序号

    • 错误原因:与序号的含义混淆
    • 正确理解/做法:确认号 = 期望收到的下一个字节的序号 = 已收到的最大连续字节序号 + 1。例如收到字节0~999,确认号应为1000,不是999。
  3. 错误表现:认为数据偏移字段的单位是字节

    • 错误原因:看到"偏移"就以为是字节偏移
    • 正确理解/做法:数据偏移的单位是4字节(32位)。数据偏移值为5表示首部长度为5×4=20字节。
  4. 错误表现:认为SYN报文段不消耗序号

    • 错误原因:SYN报文段通常没有数据部分,容易以为不消耗序号
    • 正确理解/做法:SYN报文段虽然可以没有数据,但它消耗一个序号。同理,FIN报文段也消耗一个序号。这是TCP协议的规定。

七、来源标注

  • 依据2026考研统考大纲·计算机网络部分
  • 依据《计算机网络(第8版)》谢希仁版
  • 依据RFC 793 - Transmission Control Protocol

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