VuePress 站点
首页
数学
计算机基础
Java后端
AI大模型
UI设计
首页
数学
计算机基础
Java后端
AI大模型
UI设计
  • 计算机基础
  • 计算机网络应用

    • 课程笔记:TCP三次握手建立连接
    • 课程笔记:TCP三次握手的必要性
    • 课程笔记:TCP协议缺陷与SYN Flood攻击
    • 课程笔记:TCP四次挥手释放连接
    • 课程笔记:TCP四次挥手释放连接的必要性
    • 课程笔记:TCP 报文段格式与 IP 分组
    • 课程笔记:HTTP/2 新特性——二进制分帧
    • 课程笔记:HTTP/2 新特性——多路复用
    • 课程笔记:HTTP/2 新特性——服务器推送(Server Push)
    • 课程笔记:HTTPS 简介与架构图
    • 课程笔记:HTTPS原理与传输层安全协议(TLS)
    • 课程笔记:HTTPS原理——对称加密算法
    • 课程笔记:HTTPS原理——非对称加密算法
    • 课程笔记:HTTPS 原理 —— 数字签名
    • 课程笔记:HTTPS 原理——证书与 CA
    • 课程笔记:完整的HTTPS协议通信流程
    • 课程笔记:HTTPS 协议的性能损耗
    • 课程笔记:TLS False Start 加速 HTTPS
    • 课程笔记:升级 HTTP 协议到 HTTP/2
    • 课程笔记:通过会话恢复加速 HTTPS
    • 课程笔记:OWASP 组织与十大 Web 安全漏洞
    • 课程笔记:XSS 跨站脚本攻击
    • 课程笔记:存储型XSS跨站脚本攻击
    • 课程笔记:XSS攻击窃取Cookie
    • 课程笔记:反射型XSS跨站脚本攻击
    • 课程笔记:DOM型XSS跨站脚本攻击
    • 课程笔记:植入 JS、HTML 代码攻击
    • 课程笔记:XSS攻击的防护策略
    • 课程笔记:XSS攻击的输入环节防护
    • 课程笔记:XSS 劫持 Cookie 的防护策略
    • 课程笔记:XSS 内容输出防护方案
    • 课程笔记:CSP 内容安全策略
    • 课程笔记:CSP 内容安全策略的应用方式
    • 课程笔记:CSRF 跨站请求伪造攻击原理
    • 课程笔记:CSRF 跨站点请求伪造攻击案例
    • 课程笔记:CSRF 跨站请求伪造防护方案
    • 课程笔记:OWASP CSRFTester 工具的原理与使用
    • 课程笔记:点击劫持攻击原理
    • 课程笔记:点击劫持防护方案
    • 课程笔记:URL 跳转漏洞原理与防护
    • 课程笔记:Session 认证与会话劫持
    • 课程笔记:Session固定与Session保持攻击
    • 课程笔记:注入攻击与 OWASP 靶机平台
    • 课程笔记:SQL盲注与ORM注入攻击及防护
    • 课程笔记:XML注入、代码注入、OS命令注入攻击
    • 课程笔记:文件上传漏洞与文件下载/目录浏览漏洞
    • 课程笔记:访问控制与权限访问漏洞
    • 课程笔记:DDoS 分布式拒绝服务攻击原理与防护
    • 课程笔记:CC(Challenge Collapsar)攻击与防护
    • 课程笔记:CDN 的工作原理
    • 课程笔记:CDN的网络架构和术语说明
    • 课程笔记:CDN应用场景与阿里云CDN
    • 课程笔记:如何使用阿里云CDN服务
    • 课程笔记:CDN 刷新与预热
    • 课程笔记:阿里云 CDN 回源配置
    • 课程笔记:CDN 缓存配置
    • 课程笔记:CDN 访问控制与性能优化
  • 计算机网网络

    • 📖 教材介绍与课程导言
    • 📖 1.1 信息时代的计算机网络
    • 📖 1.2 因特网概述
    • 📖 1.3 电路交换、分组交换和报文交换
    • 📖 1.4 计算机网络的定义和分类
    • 📖 1.5 计算机网络的性能指标(1)
    • 📖 1.5 计算机网络的性能指标(2)
    • 📖 1.6.1 常见的三种计算机网络体系结构
    • 📖 1.6.2 计算机网络体系结构分层的必要性
    • 📖 1.6.3 计算机网络体系结构分层思想举例
    • 📖 计算机网络体系结构中的专用术语
    • 📖 物理层概述
    • 📖 物理层下面的传输媒体
    • 📖 传输方式
    • 📖 编码与调制
    • 📖 2.5 信道的极限容量
    • 📖 2.6 信道复用技术
    • 📖 3.1 数据链路层概述
    • 📖 3.2 数据链路层的三个重要问题
    • 📖 3.2.1 封装成帧和透明传输
    • 📖 3.2.2 差错检测
    • 📖 3.2.3 (1) 可靠传输的相关基本概念
    • 📖 3.2.3 (2) 可靠传输的实现机制 - 停止-等待协议(SW)
    • 📖 3.2.3 (3) 可靠传输的实现机制 - 回退N帧协议(GBN)
    • 📖 3.2.3 (4) 可靠传输的实现机制 - 选择重传协议(SR)
    • 📖 3.3 点对点协议 PPP
    • 📖 3.4 共享式以太网
    • 📖 3.4.1 网络适配器和 MAC 地址
    • 📖 3.4.2 (1) CSMA/CD 协议的基本原理
    • 📖 3.4.2 (2) 共享式以太网的争用期、最小帧长和最大帧长
    • 📖 3.4.2 (3) 共享式以太网的退避算法和信道利用率
    • 📖 3.4.3 使用集线器的共享式以太网
    • 📖 3.4.4 在物理层扩展以太网
    • 📖 3.4.5 (1) 网桥的主要结构和基本工作原理
    • 📖 3.4.5 (2) 透明网桥的自学习和转发帧的过程以及生成树协议STP
    • 📖 3.5 交换式以太网
    • 📖 3.5.1 以太网交换机
    • 📖 3.5.2 共享式以太网和交换式以太网的对比
    • 📖 3.6 以太网的MAC帧格式
    • 📖 3.7.1 虚拟局域网 VLAN 概述
    • 📖 3.7.2 虚拟局域网 VLAN 的实现机制
    • 📖 3.8 以太网的发展
    • 📖 3.9.1 802.11 无线局域网的组成
    • 📖 3.9.2 802.11 无线局域网的物理层
    • 📖 3.9.3 (1) 802.11 无线局域网的数据链路层 —— 使用 CSMA/CA 协议(而不使用 CSMA/CD 协议)
    • 📖 CSMA/CA(载波监听多址接入/碰撞避免)协议的基本工作原理
    • 📖 802.11 无线局域网的 MAC 帧格式
    • 📖 网络层概述
    • 📖 网际协议 IP(网际协议)与异构网络互连
    • 📖 IPv4 地址及其编址方法——概述
    • 📖 IPv4 地址的分类编址方法
    • 📖 IPv4 地址的划分子网编址方法
    • 📖 IPv4 地址的无分类编址方法(CIDR)
    • 📖 IPv4 地址的应用规划
    • 📖 IPv4 地址与 MAC 地址
    • 📖 地址解析协议 ARP
    • 📖 IP 数据报的发送和转发流程
    • 📖 IPv4 数据报的首部格式
    • 📖 静态路由配置
    • 📖 因特网的路由选择协议概述
    • 📖 路由信息协议 RIP(路由信息协议)
    • 📖 开放最短路径优先 OSPF(开放最短路径优先)
    • 📖 边界网关协议 BGP(边界网关协议)
    • 📖 路由器的基本工作原理
    • 📖 网际控制报文协议 ICMP(网际控制报文协议)
    • 📖 虚拟专用网 VPN 和网络地址转换 NAT
    • 📖 IP 多播技术的相关基本概念
    • 📖 在局域网上进行硬件多播
    • 📖 在因特网上进行 IP 多播需要的两种协议
    • 📖 网际组管理协议 IGMP
    • 📖 多播路由选择协议
    • 📖 移动 IP 技术概述
    • 📖 IPv6 引进的主要变化
    • 📖 IPv6 数据报的基本首部和扩展首部
    • 📖 IPv6 地址
    • 📖 从 IPv4 向 IPv6 过渡
    • 📖 网际控制报文协议 ICMPv6
    • 📖 软件定义网络 SDN
    • 📖 运输层概述 — 进程间基于网络的通信
    • 📖 TCP/IP 体系结构运输层中的两个重要协议
    • 📖 运输层端口号、复用与分用的概念
    • 📖 UDP 和 TCP 的对比
    • 📖 TCP 报文段的首部格式
    • 📖 "三报文握手"建立 TCP 连接
    • 📖 "四报文挥手"释放 TCP 连接
    • 📖 TCP 的流量控制 (Flow Control)
    • 📖 TCP 的拥塞控制 (Congestion Control) 及与网际层拥塞控制的关系
    • 📖 TCP 可靠传输的实现
    • 📖 TCP 超时重传时间 (RTO) 的选择
    • 📖 TCP 的选择确认 (SACK)
    • 📖 6.1 应用层概述
    • 📖 6.2 客户—服务器方式和对等方式
    • 📖 6.3 动态主机配置协议 DHCP
    • 📖 6.4 域名系统 DNS
    • 📖 6.5 文件传送协议 FTP
    • 📖 电子邮件
    • 📖 万维网 WWW
    • 📖 网络安全概述
    • 📖 密码学相关基本概念
    • 📖 对称密钥密码体制
    • 📖 公钥密码体制
    • 📖 报文摘要和报文鉴别码
    • 📖 数字签名(digital signature)
    • 📖 实体鉴别
    • 📖 密钥分发
    • 📖 访问控制
    • 📖 网络体系结构各层采取的安全措施—物理层和数据链路层
    • 📖 网络体系结构各层采取的安全措施—网络层
    • 📖 网络体系结构各层采取的安全措施—运输层
    • 📖 网络体系结构各层采取的安全措施—应用层
    • 📖 防火墙访问控制与入侵检测系统
    • 📖 常见的网络攻击及其防范
    • 📖 定长子网划分和变长子网划分的二叉树解法

📖 TCP 报文段的首部格式

🎯 课程摘要:本节课详细介绍 TCP 报文段首部各字段的含义与作用,包括序号、确认号、确认标志位 ACK、数据偏移、窗口、检验和、六个标志位(URG/ACK/PSH/RST/SYN/FIN)、紧急指针、选项与填充等,并通过 408 考研真题讲解序号与确认号的计算方法。

📝 详细笔记

1. TCP 报文段首部构成

  • TCP 采用面向字节流的方式实现可靠传输,发送时根据发送策略从发送缓存中取出一定数量的字节并添加首部,使之成为 TCP 报文段后发送。
  • TCP 的全部功能都体现在首部中各字段的作用,只有弄清各字段才能掌握 TCP 基本工作原理。
  • TCP 报文段首部 = 20 字节固定首部 + 最大 40 字节扩展首部(选项),与 IPv4 数据报首部格式类似。

2. TCP 首部各字段总览

字段长度作用
源端口16 比特存储源端口号
目的端口16 比特存储目的端口号
序号(seq)32 比特指出本 TCP 报文段数据载荷的第一个字节的序号
确认号(ack)32 比特指出期望收到对方下一个 TCP 报文段数据载荷的第一个字节的序号,即对之前收到的所有数据的确认
数据偏移4 比特以 4 字节为单位,指出 TCP 报文段数据载荷起始处距 TCP 报文段起始处多远(即首部长度)
保留6 比特保留供今后使用,目前置为零
标志位(6 个)6 比特URG、ACK、PSH、RST、SYN、FIN
窗口16 比特以字节为单位,指出发送本报文段一方的接收窗口大小(接收缓存可用空间)
检验和16 比特检查整个 TCP 报文段在传输过程中是否出现误码
紧急指针16 比特以字节为单位,指明紧急数据的长度(URG=1 时有效)
选项可变(最大 40 字节)增加 TCP 功能(MSS、窗口扩大、时间戳、SACK 等)
填充可变确保首部长度能被 4 字节整除

3. 与可靠传输相关的字段

序号字段(seq)

  • 占 32 比特,取值范围 0~2^32-1,到末尾后回到零。
  • 值用来指出本 TCP 报文段数据载荷的第一个字节的序号。

确认号字段(ack)

  • 占 32 比特,取值范围 0~2^32-1,到末尾后回到零。
  • 值用来指出期望收到对方下一个 TCP 报文段数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。
  • 确认号为 N → 表明到序号 N-1 为止的所有数据都已正确接收,希望接收序号为 N 的数据。

确认标志位 ACK

  • 只有当 ACK=1 时,确认号字段才有效;ACK=0 时确认号字段无效。
  • ⚠️ 重点/考点:TCP 规定,连接建立后所有传送的 TCP 报文段都必须把 ACK 置 1。

序号与确认号举例

假设 TCP 客户与服务器已通过三报文握手建立连接:

报文方向seq数据载荷ackACK含义
客户 → 服务器201100 字节(序号 201~300)8001期望收到序号 800 开始的数据(已收 799 及以前)
服务器 → 客户800—3011已收 300 及以前,期望收到序号 301 开始的数据

4. 408 考研真题演练

真题一(答案 D)

主机甲、乙已建立 TCP 连接。主机甲给主机乙发送第一个 TCP 段:seq=200,数据载荷 300 字节(末字节序号 499)。第二个 TCP 段:seq=500,数据载荷 500 字节(末字节序号 999)。主机乙确认段的 ack = 1000(= 999 + 1)。

真题二(2013 年,答案 B)

主机乙给主机甲发送的 TCP 段 seq=1913,数据载荷 100 字节(末字节序号 2012)。主机乙之前发送的确认号 2046 → 主机甲发送的 TCP 段 seq=2046,ack=2013。

真题三(2011 年,答案 B)

主机甲发送三个连续 TCP 段,主机乙正确接收第一和第三个段(第二个丢失)。主机乙的确认段对已接收且按序到达的最后一个 TCP 段进行确认。第三个段 seq=900,数据载荷 400 字节 → 第二个段首字节序号 500(=900-400),第一个段末字节序号 499 → 确认号 ack=500(= 499 + 1)。

  • ⚠️ 重点/考点:确认号是对已接收且按序到达的最后一个字节的序号加一,未按序到达的数据不能累计确认。

5. 数据偏移字段

  • 占 4 比特,取值以 4 字节为单位,用来指出 TCP 报文段数据载荷起始处距 TCP 报文段起始处多远,即首部长度。
数据偏移值(二进制)十进制首部长度
010155×4 = 20 字节(最小)
11111515×4 = 60 字节(最大)

6. 窗口字段

  • 占 16 比特,取值范围 0~2^16-1,以字节为单位。
  • 指出发送本报文段一方的接收窗口大小(接收缓存的可用空间),表征接收方的接收能力。
  • 用接收方的接收能力控制发送方的数据发送量,即流量控制。

7. 检验和字段

  • 占 16 比特,检查整个 TCP 报文段是否出现误码。
  • 计算时要在 TCP 报文段前面加上 12 字节的伪首部(与 UDP 类似),其中:
    • 左起第三字段保留字节置零
    • 第四字段值由 17(UDP)改为 6(TCP,因 IP 协议字段 6 表示 TCP)
    • 第五字段由 UDP 长度改为 TCP 长度

发送方计算步骤:

  1. 将 TCP 首部中检验和字段置零
  2. 将伪首部、TCP 首部、数据载荷划分成若干 2 字节的字(总长非偶数字节则末尾补全零字节)
  3. 对全部 2 字节的字进行反码算术运算求和,结果取反码
  4. 将结果写入 TCP 首部检验和字段

接收方验证步骤:

  1. 给接收到的 TCP 报文段添加 12 字节伪首部
  2. 划分成若干 2 字节的字
  3. 反码算术运算求和并取反码
  4. 结果为零 → 无误码;非零 → 出现误码
  • ⚠️ 重点/考点:IPv4 数据报首部检验和只对首部检验,而 TCP 检验和对整个 TCP 报文段(首部 + 数据载荷)进行检验。

8. 六个标志位

标志位全称作用
URG(紧急)UrgentURG=1 时紧急指针字段有效
ACK(确认)AcknowledgeACK=1 时确认号字段有效;连接建立后所有报文段 ACK 必须置 1
PSH(推送)PushPSH=1 时发送方立即创建并发送报文段,接收方尽快交付应用进程(用于交互式通信)
RST(复位)ResetRST=1 表明连接出现严重差错,必须释放连接再重新建立;也可拒绝非法报文段或拒绝打开连接
SYN(同步)SynchronizeSYN=1 用于三报文握手建立连接;SYN=1 且 ACK=0 为连接请求报文段,SYN=1 且 ACK=1 为连接请求确认报文段
FIN(释放)FinishFIN=1 表明发送方数据已全部发送完毕,要求释放 TCP 连接(用于四报文挥手)
  • ⚠️ 重点/考点:SYN=1 的报文段要么是连接请求报文段,要么是连接请求确认报文段。

9. 紧急指针字段与紧急标志位 URG

  • URG=1 时紧急指针字段有效,URG=0 时无效。
  • 紧急指针占 16 比特,以字节为单位,指明紧急数据的长度。
  • 发送方有紧急数据时,可将紧急数据插队到发送缓存最前面,立刻封装到 TCP 报文段发送。
  • 紧急指针指出本报文段数据载荷中包含多长的紧急数据,其后是普通数据。
  • 接收方收到 URG=1 的报文段后,按紧急指针取出紧急数据直接上交应用进程,不必在接收缓存中排队。

10. 选项与填充

选项字段(最大 40 字节)

选项作用
最大报文段长度 MSS指出 TCP 报文段数据载荷的最大长度(非整个报文段长度)
窗口扩大选项扩大窗口,提高吞吐率
时间戳选项计算往返时间 RTT,还可用于处理序号超范围(防止序号绕回)
选择确认选项(SACK)实现选择确认功能

填充字段

  • 选项字段长度可变,若选项长度 + 20 字节固定首部不能被 4 字节整除,需填充比特零,确保首部长度能被 4 字节整除。
  • 原因:数据偏移字段(首部长度)以 4 字节为单位。与 IPv4 数据报首部填充字段用法相同。

💡 核心总结

  • TCP 首部 = 20 字节固定 + 最大 40 字节选项,最小 20 字节、最大 60 字节。
  • 序号指数据载荷首字节序号;确认号指期望收到的下一个首字节序号(即 N-1 及以前已收)。
  • ACK=1 确认号才有效;连接建立后所有报文段 ACK 必须置 1。
  • 六个标志位 URG/ACK/PSH/RST/SYN/FIN 各有用途,SYN 用于建连、FIN 用于释放。
  • 检验和对整个 TCP 报文段检验(含 12 字节伪首部,协议字段值 6)。
  • 数据偏移以 4 字节为单位表示首部长度。

❓ 课后思考 / 经典考题

  1. TCP 报文段首部最小和最大长度分别是多少?数据偏移字段为何以 4 字节为单位?
  2. 确认号为 N 表示什么含义?为什么连接建立后所有报文段的 ACK 都必须置 1?
  3. TCP 检验和与 IPv4 首部检验和的计算范围有何不同?伪首部中协议字段值应设为多少?
  4. SYN=1 的报文段有哪两种可能?FIN=1 的报文段用于什么场景?
  5. (408 真题)主机甲发送 seq=200、数据载荷 300 字节的 TCP 段,主机乙正确接收后回复的确认号应是多少?
最近更新: 2026/6/23 17:18
Contributors: yangwenguang
Prev
📖 UDP 和 TCP 的对比
Next
📖 "三报文握手"建立 TCP 连接