4.5 TCP 报文段的首部格式
欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- 前言
- 1 TCP 报文段的基本结构
- 2 固定部分
- 2.1 源端口与目的端口
- 2.2 序号
- 2.3 确认号
- 2.4 数据偏移
- 2.5 保留字段
- 2.6 控制位
- 2.7 窗口
- 2.8 检验和
- 2.9 紧急指针
- 3 可变部分
- 3.1 选项
- 3.2 填充
前言
本篇文章详细分析了 TCP 报文段首部的结构,并介绍其各字段的作用与相关选项,进一步理解 TCP 如何在不可靠的网络环境中实现可靠的数据传输。
1 TCP 报文段的基本结构
TCP(传输控制协议)是现代计算机网络中重要的协议之一,主要负责在网络中提供可靠的字节流传输。尽管 TCP 本身是面向字节流的,但它通过报文段的方式进行数据的封装与传输。TCP 的所有控制和功能机制都体现在报文段的首部字段中。
TCP 报文段的首部由固定部分和可选部分组成。固定部分的长度为 20 字节,可选部分的长度可以变化,最大可达到 40 字节。

最小的 TCP 报文段首部长度为 20 字节,包含了实现数据传输所需的所有基本字段。
2 固定部分
2.1 源端口与目的端口
每个端口字段占 2 字节。端口号用于实现应用层协议和传输层协议之间的复用和分用。
- 源端口:发送端的端口号。
- 目的端口:接收端的端口号。

2.2 序号
序号占 4 字节。每个 TCP 连接中传输的数据字节都有一个唯一的序号。

序号字段表示当前报文段中数据部分的第一个字节的序号。在连接的初始阶段,序号从 1 开始递增。通过序号,接收方能够按序接收数据并确保数据完整性。
【示例】

2.3 确认号
确认号占 4 字节。当 ACK 控制位被设置为 1 时,确认号字段才有效。
确认号字段指示接收方期望收到的下一个字节的序号。

TCP规定,在建立连接后所有传送的TCP报文段都必须把ACK置为1。
如果确认号为 N,则说明接收方已经正确收到序号为 N-1 之前的所有字节。
2.4 数据偏移
数据偏移占 4 位,以32 位字(即 4 字节为单位。
该字段指示 TCP 报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。
该字段实际上是指出了TCP报文段的首部长度。
2.5 保留字段
保留字段占 6 位。该字段目前保留为 0,供将来使用。

TCP 报文段中的其他控制位没有对应字段时,保留字段可用于扩展。
2.6 控制位
控制位用于指示不同的连接控制操作和报文段的状态。

TCP 报文段有六个控制位,其中每个位的意义如下:
- URG(紧急):占 1 位。当 URG = 1 时,表示当前报文段包含紧急数据,系统应尽快处理该数据,具有较高优先级。
- ACK(确认):占 1 位。只有当 ACK = 1 时,确认号字段才有效。用于确认数据的接收。
- PSH(推送):占 1 位。当 PSH = 1 时,接收方会立即将接收到的数据交付给应用程序,而不是等到缓存满了再处理。
- RST(复位):占 1 位。当 RST = 1 时,表示连接发生错误或出现异常,需要复位连接。
- SYN(同步):占 1 位。同步 SYN = 1 表示这是一个连接请求或连接接受报文。;当 SYN = 1,ACK = 0 时,表明这是一个连接请求报文段;当 SYN = 1,ACK = 1 时,表明这是一个连接接受报文段。
- FIN(终止):占 1 位。当 FIN = 1 时,表示发送端已经完成数据传输,并要求释放连接。
2.7 窗口
窗口占2 字节。窗口字段指示接收方当前能接受的字节数。

接收方的窗口大小会随接收缓冲区的空闲情况动态调整,以告知发送方可以继续发送的数据量。窗口值的大小直接影响了 TCP 的吞吐量。
2.8 检验和
检验和占 2 字节。检验和字段用于检测 TCP 报文段中的数据是否发生错误。

检验和的计算不仅包括 TCP 报文段的内容,还包括一个临时的“伪首部”,该伪首部包含源 IP 地址、目的 IP 地址、协议类型等信息,用来确保数据的完整性。

2.9 紧急指针
紧急指针占 2 字节。当 URG = 1 时,紧急指针字段有效。该字段指示紧急数据的最后一个字节相对于报文段起始位置的偏移量。

紧急指针用于标识数据流中哪些部分应优先处理。
3 可变部分
3.1 选项
选项字段长度可变,最长可达 40 字节。

选项用于扩展 TCP 协议的功能,常见的选项包括:
- 最大报文段长度(MSS):TCP 协议中用于控制每个报文段数据字段最大长度的选项,计算方式为TCP 报文段长度 - TCP 首部长度。
- 窗口扩大因子(Window Scale):在标准 TCP 协议中,窗口字段为 16 位,窗口大小最大为 64KB,窗口扩大因子选项允许增加窗口大小,最多支持到 1GB。
- 时间戳(Timestamp):占 10 字节,包含时间戳值和时间戳回送字段,可用于计算往返时间 RTT以及防止序号重复。
3.2 填充
TCP 报文段的头部长度必须是 4 字节的整数倍。因此,如果选项字段长度不足 4 字节的倍数,填充字段会被添加到报文段的末尾。

相关文章:
4.5 TCP 报文段的首部格式
欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言1 TCP 报文段的基本结构2 固定部分2.1 源端口与目的端口2.2 序号2.3 确认号2.4 数据偏移2.5 保留字段2.6 控制位2.7 窗口2.8 检验和2.9 紧急指针 3 可变部分3.1 选项3.2 填…...
SQL 获取今天的当月开始结束范围:
使用 GETDATE() 结合 DATEADD() 和 DATEDIFF() 函数来获取当前月的开始和结束时间范围。以下是实现当前月时间范围查询的 SQL: FDATE > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) FDATE < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) 1, 0) …...
Qt复习学习
https://www.bilibili.com/video/BV1Jp4y167R9/?spm_id_from333.999.0.0&vd_sourceb3723521e243814388688d813c9d475f https://subingwen.cn/qt/qt-primer/#1-4-Qt%E6%A1%88%E4%BE%8B https://subingwen.cn/qt/ https://download.qt.io/archive/qt/1.1Qt的特点 1.2QT中的…...
Leetcode经典题5--轮转数组
题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入输出示例 : 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…...
C++的一些经典算法
以下是C的一些经典算法: 一、排序算法 冒泡排序(Bubble Sort) 原理: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...
Windows环境中Python脚本开机自启动及其监控自启动
1 开机自启动 Windows 10/Windows Server 201X具有一个名为“启动”的已知文件夹,系统每次启动开始自动运行应用程序、快捷方式和脚本时都会检查该文件夹,而无需额外配置。 要在Windows启动时运行脚本,先使用WindowsR快捷键打开“运行”对话…...
XML 语言随笔
XML的含义 XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。XML与HTML(HyperText Markup Language,超文本标记语言)类似,但XML的设计目的是描述数据&…...
E卷-分割数组的最大差值
分割数组的最大差值 问题描述 给定一个由若干整数组成的数组 n u m s nums nums,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组)。分别对子数组求和得到两个值,然后计算这两个值的差值。请输出所有分割方案中,差值的最大值。 输入格…...
基于SpringBoot校园台球厅人员与设备管理系统设计与实现
1.1课题背景与意义 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管理的兴起…...
异步FIFO的实现
异步FIFO是verilog中常见的设计,通常用于不同时钟域下的数据同步。 在实现 FIFO 时,无论是同步 FIFO 还是异步 FIFO ,通常会通过双口 RAM ( Dual Port RAM )并添加一些必要的逻辑来实现。双口 RAM的设计如下࿱…...
关于找工作的一些感悟
2024年找工作可以说难度十分艰巨,尤其是年底,除了外包公司还在不停的招聘以外,自研的公司基本很少在招聘了。今年有一个很大的感受就是投递了简历可能都没有几个人回复,即使有人回复百分之八十都是拒绝的,拒绝的理由一…...
docker 相关问题记录
docker mysql 一直重启解决办法(断电或者重启) 一直重启。。因为是内部开发,也没有备份最新的。所以不能删了重来。 方法: docker logs mysql5.7 看到错误跟innodb有关。 具体原因可以参考 http://acuilab.com/articles/2019/1…...
Devops 实践
Devops 实践 基本概念jenkins实践安装jenkins仓库环境准备代码环境准备第一次构建持续集成持续部署集成插件 优秀实践心得体会 参考 摘要:本文首先将介绍一些基本概念,包括Devops,CI/CD等,然后基于知名开源CI/CD工具jenkins进行实…...
MySQL 索引(B+树)详解
MySQL 索引(B树)详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...
医疗系统国产数据库高质量发展路径探析
信息工程人员操作数据库 一、国外数据库在医疗系统中的困境 (一)数据分散与难以整合 在美国,分散式医疗服务成为癌症研究数据库优化的巨大障碍。患者先在社区接受肿瘤科医生常规检查,再到学术医疗中心进行尖端治疗,然…...
微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档
要解决此问题,需打开微信小程序开发者工具进行设置,打开详情-本地设置重新运行,该报错就没有啦...
智能租赁管理系统助力规范化住房租赁市场提升用户体验
内容概要 在当今的住房租赁市场中,智能租赁管理系统应运而生,为房东和租客带来了前所未有的便利。这套系统就像一位全能助手,将租赁信息、监管机制以及在线签约功能集成在一起,让整个过程变得流畅而高效。换句话说,您…...
MicroBlaze软核开发(一):Hello World
实现功能:使用 MicroBlaze软核 串口打印 Hello World Vivado版本:2018.3 目录 MicroBlaze介绍 vivado部分: 一、新建工程 二、配置MicroBlaze 三、添加Uart串口IP 四、生成HDL文件编译 SDK部分: 一、导出硬件启动SDK 二、…...
跟着问题学15——GRU网络结构详解及代码实战
1 RNN的缺陷——长期依赖的问题 (The Problem of Long-Term Dependencies) 前面一节我们学习了RNN神经网络,它可以用来处理序列型的数据,比如一段文字,视频等等。RNN网络的基本单元如下图所示,可以将前面的…...
【uniapp】swiper切换时,v-for重新渲染页面导致文字在视觉上的拉扯问题
问题描述 先用v-for渲染了几个列表,但这几个列表是占同一个位置的,只是通过切换swiper来显示哪个列表显示,也就是为了优化页面切换时候,没有根据swiper的current再更新v-for的数据,但现在就有个问题,怎么隐…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
