44、TCP报文(二)
接上节内容,本节我们继续TCP报文首部字段含义的学习。上节为止我们学习到“数据偏移”和“保留”字段。接下来我们学习后面的一些字段(暂不包含“检验和”的计算方法和选项字段)。
TCP首部结构(续)
“数据偏移”和“保留”字段的后面,紧挨着是六个控制位,这六个控制位在整个TCP报文中起着举足轻重的作用。
为什么把这六个称做控制位呢?因为它们有两个特点:第一,每一个控制位的取值都是只有0和1,也就是相当于日常生活中的控制开关,只有开和关两种状态。第二,其中有些控制位的作用就是能够控制首部中其它的字段,比如其中的ACK位,只有把它的值设置为1,“确认号”字段的值才能有效,如果ACK位设置为0,“确认号”字段的值就是无效的了。
控制位
1、控制位第一个是URG,也叫“紧急位”。这个位是配合后面的“紧急指针”字段使用的,只有URG位的值设置为1时,首部中的“紧急指针”字段才有效。
这时候就有问题了,为什么需要“紧急”呢?什么样的数据是“紧急数据”呢?比如说,本地主机A有一个程序要在远程的主机B上运行,在运行过程中,突然想起这个程序是有病毒的,因此A必须立即停止运行,例如按下ctrl+c键中断程序的运行。ctrl+c中断命令就属于是紧急数据,也就相当于优先级高的数据,TCP对这类数据应当尽快地传输,把它放到本报文段数据的最前面,而不要再按先后顺序。如果按先后顺序的话,紧急数据到达以后,程序已经运行完了,也就没什么意义了。
2、控制位第二个是ACK,也叫“确认位”。仅当这个位的值设置为1时,“确认号”字段的值才有效,所以TCP也规定,在连接建立后所有传送的报文段都必须把ACK位设置为1。
3、第三个控制位是PSH,也叫“推送位”。这个操作一般很少使用,它主要是用于交互式通信的情况。比如在一端的应用程序输入一些命令后希望立刻得到对方的回应,这时候可以把PSH位设置为1,TCP就会立即创建一个报文段发送出去,接收方收到后也会尽快的把这个报文段交付给应用进程。
4、第四个是RST位,也叫“重置位”,是用来重置一条TCP连接的。当RST位的值设置为1时,表示这条TCP连接出了很严重的差错(例如主机崩溃)时需要释放这条连接,然后再建立一条新的连接。
5、第五个是SYN位,也叫“同步位”,报文段的SYN位设置为1主要是用在建立TCP连接的时候,建立连接的请求发发出请求,接受方接受建立请求的时候,都要把报文的SYN位设置为1进行交互。
6、最后一个控制位是FIN位,也叫“终止位”,看字面意思就知道这个控制位表示的是释放一条TCP连接。当FIN位的值为1时,表示发送方的数据都已经发送完毕,可以释放连接了。
窗口
6个控制位的后面挨着,是16个二进制位长度的“窗口”字段。我们前面已经学过发送窗口和接收窗口,窗口的本质也就是数据缓存空间的大小。而在TCP报文首部中,“窗口”字段的值指的应该是接收窗口的大小。因为接收窗口的大小是可以限制发送窗口的大小的,接收方把自己接收窗口的大小写在TCP首部中,让发送方在发送数据的时候必须考虑到接收方目前有多大的缓存容量可以接收。
举个例子,发送了一个报文段,其窗口字段的值是1000,这也就是告诉对方:现在我的接收缓存容量还有1000个字节,允许你再最多发送1000个字节,否则我就接收不了了。
读到这里,我们应该提醒两件事情:
第一,发送窗口并不是单纯的相当于“发送方的窗口”,同理,接收窗口也并不是单纯的等于“接收方的窗口”,因为现在的网络通信大多数都是全双工通信,双方在同时都可以收发,是双向交互的,也就是双方互为发送方和接收方。我们在前面一直在区分发送方和接收方,只是为了叙述原理的方便。
因此发送方也有接收窗口(因为接收来自对方发来的确认),同理接收方也有发送窗口(因为要给对方发送确认报文)。
第二,窗口值的大小并不是固定不变的。因为接收方也是一直在处理自己的接收缓存中的数据,所以接收缓存是动态变化着的。
检验和
接下来,“窗口”字段的后面是“检验和”字段,检验和的作用是通过一种算法来校验当前报文中的数据在传输过程中有没有出现错误。由于TCP和UDP的检验和计算方法一致,所以具体的方法我们在后面学到UDP的时候放在一起介绍。
紧急指针
“紧急指针”字段,刚才在学习URG控制位的时候已经见到过,只有当URG=1时,紧急指针字段才有效。配合URG位,那么紧急指针字段的值应该是紧急数据的末尾在报文段中的位置,因为紧急数据要被插入在数据的最前面,所以其实这个字段也就相当于指出了紧急数据占多少个字节。另外,需要记住的一点是:即使窗口值为零时,也可以发送紧急数据,因为紧急数据的优先级高,就像生活中的手机欠费了也能拨打110。
选项(长度可变)和填充
“选项”和“填充”不属于TCP的固定首部,因此这两个字段是可选的。其中,选项是长度可变,不过我们上一节说到过,TCP首部最大60个字节,减去固定首部20字节,那么选项字段最大也就是能达到40字节。选项包括了TCP的一些附加功能,下节我们学习常用的几个选项。最后的填充字段,就是为了在使用长度可变的选项之后,能够保证整个TCP首部的长度是4字节的整数倍。
本节我们学习了TCP首部的其余的字段,主要是6个控制位和窗口值比较重要。下一节我们学习TCP常用的选项,作为这一部分的收尾。
参考教材:谢希仁《计算机网络》第八版
相关文章:

44、TCP报文(二)
接上节内容,本节我们继续TCP报文首部字段含义的学习。上节为止我们学习到“数据偏移”和“保留”字段。接下来我们学习后面的一些字段(暂不包含“检验和”的计算方法和选项字段)。 TCP首部结构(续) “数据偏移”和“保…...

目标检测(Object Detection)
文章目录 1. 目标检测1.1 目标检测简要概述及名词解释1.2 IOU1.3 TP TN FP FN1.4 precision(精确度)和recall(召回率) 2. 边框回归Bounding-Box regression3. Faster R-CNN3.1 Faster-RCNN:conv layer3.2 Faster-RCNN&…...

vue中实现文字检索时候将搜索内容标红
实现结果 html: <div class"searchBox"><span class"bt">标  题</span><div class"search"><div class"shuru"><!-- <span class"title">生产经营<…...
PCL protocol composition logic
PCL 协议组合逻辑 一 主体(principal)和线程(thread)的区分 1.主体:指 **协议的参与者,用X^来表示。**每个主体可以扮演一个或多个角色,如 InitCR和RespCR ; 2.线程:主…...

聊聊看React和Vue的区别
Vue 更适合小项目,React 更适合大公司大项目; Vue 的学习成本较低,很容易上手,但项目质量不能保证...... 真的是这样吗?借助本篇文章,我们来从一些方面的比较来客观的去看这个问题。 论文档的丰富性 从两个…...

OSPF在广播类型的网络拓扑中DR和BDR的选举
指定路由器(DR): 一个网段上的其他路由器都和指定路由器(DR)构成邻接关系,而不是它们互相之间构成邻接关系。 备份指定路由器(BDR): 当DR出现问题,由BDR接…...

系统学习Linux-Mariadb高可用MHA
概念 MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上…...
慢SQL的原因
如何排查慢SQL问题 识别慢SQL:使用数据库性能监控工具,如慢SQL日志,识别耗时较长的查询。执行计划分析:使用数据库提供的分析工具,例如EXPLAIN来查看查询的执行计划,判断是否存在全表扫描,索引…...
php正则替换文章的图片
要使用正则表达式替换文章中的图片链接,可以按照以下步骤进行操作: 1. 获取文章内容:首先,你需要获取包含图片链接的文章内容。你可以从文件中读取文章,或者从数据库中检索文章内容。 2. 使用正则表达式匹配图片链接…...
57 | TAPTAP客户端分析
TAPTAP客户端分析 一、用户群分析 首先,TapTap用户群可分为三大类: 游戏爱好者游戏发烧者游戏开发者(次要用户,有开发者后台,可以显示数据,不重点分析)注:爱好者与发烧者区别在于,前者是用空余时间来玩游戏,时间不如后者充足,且后者更执着于游戏,游戏种类更多。 …...

开源了一套基于springboot+vue+uniapp的商城,包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发
RuoYi-Mall-JAVA商城-电商系统简介 开源了一套基于若依框架,SringBoot2MybatisPlusSpringSecurityjwtredisVueUniapp的前后端分离的商城系统, 包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发。 前端采用Vue、Element UI(ant…...

Android进阶之多级列表
遇到一个需求需要显示多级列表,因为界面是在平板上的,所以层级是从左向右往下排的,类似于 我当时的写法是在xml布局里一个个RecyclerView往下排的 当然前提是已经规定好最大的层级我才敢如此去写界面,如果已经明确规定只有两级或…...

Stochastic: Distribution-Expectation-Inequalities
见:https://www.math.hkust.edu.hk/~makchen/MATH5411/Chap1Sec2.pdf...

Java算法_ 二叉树的最大深度(LeetCode_Hot100)
题目描述:给定一个二叉树 ,返回其最大深度。root 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/…...

行业追踪,2023-08-18
自动复盘 2023-08-18 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
js将项目中的图片上传到服务器
项目上有时候会有奇怪的需求,比如前端有一些示例,想点击按钮就能上传图片,而这个图片是在前端的项目中的,如果不上传吧,又获取不到一些业务数据的id,但后端又不想为这块功能做特殊的处理,这时想通过前端直接上传到后端,需要file对象才可以。 这个时候我们需要将img转换…...

【C语言】指针的进阶
目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名和数组名区别 3.数组指针的使用 四、数组参数与指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针…...

【Windows系统编程】03.远线程注入ShellCode
shellcode:本质上也是一段普通的代码,只不过特殊的编程手法,可以在任意环境下,不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…...

第1天----验证一个字符串是否是另一个字符串的子串
本文我们将学习如何去验证一个字符串是否是另一个字符串的子串。 一、小试牛刀: 题目描述 输入两个字符串,验证其中一个串是否为另一个串的子串。 输入格式 两行,每行一个字符串。 输出格式 若第一个串 s 1 是第二个串 s 2 的子串,…...
项目实战第四十三讲:使用模版模式优雅实现财务编辑费用
项目实战第四十三讲:财务编辑费用 本文是项目实战第43讲:使用模版模式优雅实现财务编辑费用。支持查看司机填写费用信息,并且附件管理支持展示司机上传费用照片。 文章目录 项目实战第四十三讲:财务编辑费用1、项目背景2、主要技术3、项目职责4、项目实现4.1、表结构4.2、流…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...