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、流…...

[JavaWeb]【六】web后端开发-请求响应
前言:请求响应 目录 一 引子 二 请求 2.1 Postman 2.1.1 安装 2.1.2 创建工作空间 2.1.3 添加接口 2.2 简单参数 2.2.1 原始方式(不推荐) 2.2.2 SpringBoot方式-GET(参数名与形参变量名相同) 2.2.3 SpringBoot方式-POST(参数名与形参…...

uniapp websocket机制 心跳 重连
在开发程序过程中通信功能还是比较常用到的,本文主要介绍的是uniapp中websocket的使用 websocket建立连接后,断开、心跳机制重新链接的一个过程。 关于uni.connectSocket可仔细阅读uniapp官网中的uni.connetSocket以及连接socket创建的实例SocketTask …...

labelme安装以及标注自己的目标检测数据集
目录 一、labelme安装指令 二、使用教程 三、 快捷键 一、labelme安装指令 winR之后在弹出的对话框中输入cmd按回车进入终端 conda activate 虚拟环境名称 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/ 二、使用教程 安装成功之后在终端输入label…...

归并排序JS
当然,下面是使用JavaScript编写的归并排序的示例代码。归并排序是一种分治算法,其基本思想是将数组分成两半进行排序,然后将排序后的结果合并在一起。 function mergeSort(arr) {if (arr.length < 1) {return arr;}const middle Math.fl…...

matlab 计算点云平均密度
目录 一、算法原理二、代码实现三、结果展示四、C++版计算结果本文由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 采样设备不同、设备距离场景远近不同,会使点云密度产生差异。现有的对点云密度的估算方法有基…...

c++ | uint8_t、uint16_t、unint32_t 和size_t
头文件 #include <stdint.h> // for C #include <cstdint> // for Cuint8_t、uint16_t、unint32_t 这三个分别是表示无符号整型,不同点是他们的长度不同,分别是8位机器位、16、32,也就是一个字节、两个字节、四个字节 注意在…...

mysql 超大 sql 文件导入过程
问题 最近遇到 2 个超大 sql 文件导入,好一通折腾 文档在哪里 调优参数太多,文档都看不过来 找到这些参数也费劲, ubuntu 在 /etc/mysql/mysql.conf.d/mysqld.cnf 中找到这个链接 ...... # # The MySQL Server configuration file. # # For explanat…...

【悬挂绝缘子的串效模型】测量每个绝缘子盘之间的电压并测量串效研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

P3957 [NOIP2017 普及组] 跳房子
题目背景 NOIP2017 普及组 T4 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 nn 个格子,这些…...

VR数字工厂多元化展现,打造数字企业工厂名片
5G时代,各种营销都在走数字化的路子,VR数字工厂用VR赋能工厂数字升级,将企业环境、工厂生产、产品研发、质检运输等流程,无死角720度的展示在客户面前,不仅可以提升自身企业的实力,还可以提高客户的信任感。…...