网页快速收录/广州推广优化
欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- 前言
- 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的数据,但现在就有个问题,怎么隐…...

【Android】Compose初识
文章目录 1.Compose是什么2.Compose优势3.可组合函数4.布局5.配置布局6.Material Design7.列表与动画8.声明式UI9.组合10.重组 1.Compose是什么 Jetpack Compose是谷歌开发的一个现代的、声明式的UI工具包,用于构建原生的Android应用程序界面。它简化了创建复杂用户…...

前端工程化面试题(二)
前端模块化标准 CJS、ESM 和 UMD 的区别 CJS(CommonJS)、ESM(ESModule)和UMD(Universal Module Definition)是前端模块化标准的三种主要形式,它们各自有不同的特点和使用场景: CJS&…...

以攻击者的视角进行软件安全防护
1. 前言 孙子曰:知彼知己者,百战不殆;不知彼而知己,一胜一负,不知彼,不知己,每战必殆。 摘自《 孙子兵法谋攻篇 》在2500 年前的那个波澜壮阔的春秋战国时代,孙子兵法的这段话&…...

008.精读《Apache Paimon Docs - Table w/o PK》
文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文,上篇我们了解了Apache Paimon 主键表,本期我们将继续学习附加表(Append…...

C#实时监控指定文件夹中的动态,并将文件夹中生成的新图片显示在界面上(相机采图,并且从本地拿图)
结果展示 此类原理适用于文件夹中自动生成图片,并提取最新生成的图片将其显示, 如果你是相机采图将其保存到本地,可以用这中方法可视化,并将检测的结果和图片匹配 理论上任何文件都是可以监视并显示的,我这里只是做了…...

使用SQLark分析达梦慢SQL执行计划的一次实践
最近刚参加完达梦的 DCP 培训与考试,正好业务系统有个 sql 查询较慢,就想着练练手。 在深入了解达梦的过程中,发现达梦新出了一款叫 SQLark 百灵连接的工具。 我首先去官网大致浏览了下。虽然 SQLark 在功能深度上不如 DM Manager 和 PL/SQ…...

【人工智能】用Python构建高效的自动化数据标注工具:从理论到实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 数据标注是构建高质量机器学习模型的关键环节,但其耗时耗力常成为制约因素。本篇文章将介绍如何用Python构建一个自动化数据标注工具,结合机器学习和NLP技术,帮助加速数据标注过程。我们将从需求分析入…...

Java --- 注解(Annotation)
一.什么是注解? 在Java中,注解(Annotation)是一种元数据(metadata),它为程序中的类、方法、字段等提供额外的描述信息。注解本身不直接改变程序的行为,但可以被编译器、开发工具、框…...

nodejs作为provider接入nacos
需求:公司产品一直是nodejs的后台,采用的eggjs框架,也不是最新版本,现有有需求需求将这些应用集成到微服务的注册中心,领导要求用java。 思路:用spring cloud gateway将需要暴露的接口url转发,…...

SpringBoot3+Micormeter监控应用指标
监控内容简介 SpringBoot3项目监控服务 ,可以使用Micormeter度量指标库,帮助我们监控应用程序的度量指标,并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...