当前位置: 首页 > news >正文

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&#xff1a; <div class"searchBox"><span class"bt">标&#8195&#8195题</span><div class"search"><div class"shuru"><!-- <span class"title">生产经营<…...

PCL protocol composition logic

PCL 协议组合逻辑 一 主体&#xff08;principal&#xff09;和线程&#xff08;thread&#xff09;的区分 1.主体&#xff1a;指 **协议的参与者&#xff0c;用X^来表示。**每个主体可以扮演一个或多个角色&#xff0c;如 InitCR和RespCR &#xff1b; 2.线程&#xff1a;主…...

聊聊看React和Vue的区别

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

OSPF在广播类型的网络拓扑中DR和BDR的选举

指定路由器&#xff08;DR&#xff09;&#xff1a; 一个网段上的其他路由器都和指定路由器&#xff08;DR&#xff09;构成邻接关系&#xff0c;而不是它们互相之间构成邻接关系。 备份指定路由器&#xff08;BDR&#xff09;&#xff1a; 当DR出现问题&#xff0c;由BDR接…...

系统学习Linux-Mariadb高可用MHA

概念 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上…...

慢SQL的原因

如何排查慢SQL问题 识别慢SQL&#xff1a;使用数据库性能监控工具&#xff0c;如慢SQL日志&#xff0c;识别耗时较长的查询。执行计划分析&#xff1a;使用数据库提供的分析工具&#xff0c;例如EXPLAIN来查看查询的执行计划&#xff0c;判断是否存在全表扫描&#xff0c;索引…...

php正则替换文章的图片

要使用正则表达式替换文章中的图片链接&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 获取文章内容&#xff1a;首先&#xff0c;你需要获取包含图片链接的文章内容。你可以从文件中读取文章&#xff0c;或者从数据库中检索文章内容。 2. 使用正则表达式匹配图片链接…...

57 | TAPTAP客户端分析

TAPTAP客户端分析 一、用户群分析 首先,TapTap用户群可分为三大类: 游戏爱好者游戏发烧者游戏开发者(次要用户,有开发者后台,可以显示数据,不重点分析)注:爱好者与发烧者区别在于,前者是用空余时间来玩游戏,时间不如后者充足,且后者更执着于游戏,游戏种类更多。 …...

开源了一套基于springboot+vue+uniapp的商城,包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发

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

Android进阶之多级列表

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

Stochastic: Distribution-Expectation-Inequalities

见&#xff1a;https://www.math.hkust.edu.hk/~makchen/MATH5411/Chap1Sec2.pdf...

Java算法_ 二叉树的最大深度(LeetCode_Hot100)

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

行业追踪,2023-08-18

自动复盘 2023-08-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

js将项目中的图片上传到服务器

项目上有时候会有奇怪的需求,比如前端有一些示例,想点击按钮就能上传图片,而这个图片是在前端的项目中的,如果不上传吧,又获取不到一些业务数据的id,但后端又不想为这块功能做特殊的处理,这时想通过前端直接上传到后端,需要file对象才可以。 这个时候我们需要将img转换…...

【C语言】指针的进阶

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

【Windows系统编程】03.远线程注入ShellCode

shellcode&#xff1a;本质上也是一段普通的代码&#xff0c;只不过特殊的编程手法&#xff0c;可以在任意环境下&#xff0c;不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…...

第1天----验证一个字符串是否是另一个字符串的子串

本文我们将学习如何去验证一个字符串是否是另一个字符串的子串。 一、小试牛刀&#xff1a; 题目描述 输入两个字符串&#xff0c;验证其中一个串是否为另一个串的子串。 输入格式 两行&#xff0c;每行一个字符串。 输出格式 若第一个串 s 1 是第二个串 s 2 的子串&#xff0c…...

项目实战第四十三讲:使用模版模式优雅实现财务编辑费用

项目实战第四十三讲:财务编辑费用 本文是项目实战第43讲:使用模版模式优雅实现财务编辑费用。支持查看司机填写费用信息,并且附件管理支持展示司机上传费用照片。 文章目录 项目实战第四十三讲:财务编辑费用1、项目背景2、主要技术3、项目职责4、项目实现4.1、表结构4.2、流…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...