Linux:详解TCP协议段格式

文章目录

  • 认识TCP
  • TCP协议段格式

本篇主要总结的是TCP协议的一些字段

认识TCP

TCP协议全称是传输控制协议,也就是说是要对于数据的传输进行一个控制

在这里插入图片描述
以上所示的是对于TCP协议进行数据传输的一个理解过程

全双工

至此就可以对于TCP协议是全双工的来进行理解了,所谓全双工其实就是有自己对应的接收缓冲区和发送缓冲区,所以这就意味着TCP协议的发送和接受是完全可以分开独立进行的,这就和UDP协议有很大的不同,因此我们说TCP协议是全双工的

发送接收的本质

对于发送和接受的本质来说,其实都是一种拷贝,以系统调用read和write来说,站在操作系统上是把数据从磁盘加载到内存当中,而这样的加载过程的本质其实就是一个拷贝的过程,经过这样的拷贝从而把数据从磁盘中拷贝到内存中

而以recv和send为例,这两个系统调用展现出的本质实际上也是一种拷贝的过程,只不过这里的拷贝是把数据从内存拷贝到网络,或是把数据从网络拷贝到内存,这其实也是一种拷贝

TCP协议段格式

下面就要进行的是对于TCP协议段的阐述,也是本篇的重点内容

在这里插入图片描述
在进行UDP的学习当中,可以看到UDP的协议段定制是比较简单的,它是面向数据报的,所以只需要根据数据长度来进行判断发送成功或者是失败,并且它并不关心数据是否递达,而对于TCP来说就不是这样,它关心的点更多,它需要确保数据是否送达,这就必定意味着它需要传递更多的消息

报头和有效载荷的分离

在整个网络协议栈中,首先要关心的内容必然是对于报头和有效载荷分离的这个过程,因为对于任何一种协议来说都必须有这样的功能,结合报头和与报头进行分离,有这样的操作能力才能使得信息可以在网络协议栈中进行传输

那对于报头和有效载荷分离的这个过程来说,必然涉及到的一个点是如何把数据传输到上层当中,于是就要引入第一个报头参数,4位首部长度

4位首部长度

对于TCP的标准报头来说,它占据的是20个字节,而有效载荷则是最下面的数据区,那中间的选项其实严格意义来说也属于报头中的一种,因此就有了这个首部长度的概念

4位首部长度的最大取值是15,那如何表示20个字节呢?其实是因为在计算的时候四位首部长度是有基本的计算单位的,计算单位是4字节,这就意味着这个范围实际上是0-60字节,所以将报头和有效载荷的分离就直接借助这个4位首部长度就可以,本质上是通过固定长度和自描述字段

源端口号和目的端口号

这个字段其实和UDP是一样的,都是用来确认发送双方的一些信息,这样可以准确的通过端口号找到所需要传递的进程

16位窗口大小

TCP协议是面向字节流的,所以它和文件其实是有些相似的,那么现在的问题是对于这个协议来说,通信的双方该如何进行判断,对方的缓冲区中的数据到底满了还是没满?换句话说,发送数据的速度该如何进行判断呢?这就用到了这个窗口大小的概念了

对于窗口大小来说,值得是自己的接收缓冲区中剩余空间的大小,那么基于这个数据段,就能告诉对方我当前的缓冲区还有多少内容,如果此时剩余空间已经没有了,那么就代表我的接收缓冲区已经满了,不要再给我发送数据了,反之就是可以快点继续发,我当前缓冲区可以接受数据

32位序号

提到32位序号,就必须要提及确认应答机制了

在这里插入图片描述
TCP协议是传输可靠的协议,那么这个可靠该如何理解?它必然是因为有它特定的机制来保证它的传输是可靠的,因此下面就要介绍可靠的来源:确认应答机制

通俗来讲,这个机制的意思就是当前有主机A和主机B,当主机A向主机B发送数据的时候,主机B在接收到消息之后会传递给主机A一个消息,表示自己收到了这个消息。根据这个原理,我们说这就叫做是一次可靠的传输,落实到具体的来说,当我传输出去的数据收到了应答,那么就说明这次的传输是可靠的,意味着对方已经收到了我的消息,那反过来说,对于没有应答的数据,就不能保证它的可靠性,因此最新的一条消息是没有应答的,这也就意味着是不知道这个消息到达的结果如何,也就说明并不存在100%可靠的网络协议,不过TCP可以很大程度上帮助使得协议本身变得可靠

序号问题

下面要谈的一个问题是,数据的乱序问题

假设现在TCP的服务端向客户端发送了10条消息,那抵达到客户端后,这10条消息是依次抵达的吗?理想状态下是这样,但是实际上在进行基站的传输过程中,肯定不是这样的,所以带来的一个问题是,TCP数据传输造成的乱序,本身就是TCP协议不可靠的一种体现,我们以下图为例

在这里插入图片描述
上图所示的就是TCP最基本,最原始的通信过程,也是一种理想的通信过程,但是实际上传输遇到乱序是很正常的现象,那么TCP是如何处理这样的现象的呢?

TCP协议引入了序号的概念,TCP将每个字节的数据都进行了编号,每一个编号就叫做是序列号

在这里插入图片描述
该如何理解这个概念呢?我们可以认为TCP的发送缓冲区就是一个数组,而在这当中填入了很多的数据,天然的每一个字节就会有一个字节编号,这个编号本质上就数组的下标,而在发送的报头中会有对应32位序号,当发送一个TCP数据的时候,就会在报头中填写对应的数据块的最后一个字符的下标,这就意味着是当前发送的报文序号,这样就把数据发送过去了

32位确认序号

反之我们对应的是32位确认序号,这个确认序号代表的是确认序号之前的数据已经全部收到了,那这个确认序号填多少呢?它填充的是收到报文序号+1,比如第一次发报文序号是1000,第二个报文的序号是2000,那么在进行应答的时,对应的确认序号就是1001和2001,以下图为例

在这里插入图片描述
为什么要这样进行规定呢?这里我目前给出的解释是,表示的是1001之前的报文已经全部收到了,它表示的是当前确认序号之前的数据已经都收到了,那现在假设,发送了很多的报文,其中有一个报文丢失了,虽然我此时没有收到1001之前的内容和2001之前的内容,但是3001之前的内容已经收到了,那么就意味着服务器已经安全的把3001的报文接受了,那么就算要进行重传,也只需要把1001和2001进行传递就可以了

6个标记位

下面要谈的内容是6个标记位的问题,对于服务端来说,它会收到各种各样的来自很多客户端的TCP请求,那么在这些请求中其实是有很多类型的,比如说有请求连接,请求断开,请求申请数据,请求发送数据,那么这些请求该如何进行区分呢?就依靠这6个标记位,就可以实现不同类型的TCP请求进行识别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/290080.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机图形学】3D Implicit Transporter for Temporally Consistent Keypoint Discovery

对3D Implicit Transporter for Temporally Consistent Keypoint Discovery的简单理解 文章目录 1. 现有方法限制和文章改进2. 方法2.1 寻找时间上一致的3D特征点2.1.1 3D特征Transporter2.1.2 几何隐式解码器2.1.3 损失函数 2.2 使用一致特征点的操纵 1. 现有方法限制和文章改…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…

VSCode 如何同步显示网页在手机或者平板上

首先要确保 ①电脑上安装了VsCode ②VsCode安装插件LiveServer 安装成功之后 连续按住 Alt L 、Alt O 会跳转到对应的html页面上 http://127.0.0.1:5500/....... 是这个开头的 然后打开网络 如果桌面有网上邻居的可以直接点桌面的网上邻居 进来找到WLAN这个…

为什么我的微信小程序 窗口背景色backgroundColor设置参数 无效的问题处理记录!

当我们在微信小程序 json 中设置 backgroundColor 时&#xff0c;实际在电脑的模拟器中根本看不到效果。 这是因为 backgroundColor 指的窗体背景颜色&#xff0c;而不是页面的背景颜色&#xff0c;即窗体下拉刷新或上拉加载时露出的背景。在电脑的模拟器中是看不到这个动作的…

智能工具管理系统-智能工具柜系统

智能工具管理系统-智能工具柜系统 智能工具可视化管理系统(智工具DW-S308)是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID工具进行统一管理、分析的信息化、智能化、规范化的系统。 一、工具管理现状 东识RFID工具管理系统是一种便捷化的工具…

C# 高级文件操作与异步编程探索(初步)

文章目录 文本文件的读写探秘StreamReader 类深度剖析StreamWriter 类细节解读编码和中文乱码的解决方案 二进制文件的读写BinaryReader 类全面解析BinaryWriter 类深度探讨 异步编程与C#的未来方向同步与异步&#xff1a;本质解读Task 的神奇所在async/await 的魔法 在现代编程…

【ESP32S3 Sense接入语音识别+MiniMax模型对话】

1. 前言 围绕ESP32S3 Sense接入语音识别MiniMax模型对话展开&#xff0c;首先串口输入“1”字符&#xff0c;随后麦克风采集2s声音数据&#xff0c;对接百度在线语音识别&#xff0c;将返回文本结果丢入MiniMax模型&#xff0c;进而返回第二次结果文本&#xff0c;实现语言对话…

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS&#xff1a;Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点&#xff1a; 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…

【MySQL】6.MySQL主从复制和读写分离

主从复制 主从复制与读写分离 通常数据库的读/写都在同一个数据库服务器中进行&#xff1b; 但这样在安全性、高可用性和高并发等各个方面无法满足生产环境的实际需求&#xff1b; 因此&#xff0c;通过主从复制的方式同步数据&#xff0c;再通过读写分离提升数据库的并发负载…

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” &#xff1a;SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

【算法刷题 | 二叉树 05】3.28(左叶子之和、找树 左下角的值)

文章目录 11.左叶子之和11.1问题11.2解法一&#xff1a;递归11.2.1递归思路11.2.2代码实现 11.3解法二&#xff1a;栈11.3.1栈思想11.3.2代码实现 12.找树左下角的值12.1问题12.2解法一&#xff1a;层序遍历 11.左叶子之和 11.1问题 给定二叉树的根节点 root &#xff0c;返回…

大模型时代下的“金融业生物识别安全挑战”机遇

作者&#xff1a;中关村科金AI安全攻防实验室 冯月 金融行业正在面临着前所未有的安全挑战&#xff0c;人脸安全事件频发&#xff0c;国家高度重视并提出警告&#xff0c;全行业每年黑产欺诈涉及资金额超过1100亿元。冰山上是安全事件&#xff0c;冰山下隐藏的是“裸奔”的技术…

STM32 PWM通过RC低通滤波转双极性SPWM测试

STM32 PWM通过RC低通滤波转双极性SPWM测试 &#x1f4cd;参考内容《利用是stm32cubemx实现双极性spwm调制 基于stm32f407vet6》&#x1f4fa;相关视频链接&#xff1a;https://www.bilibili.com/video/BV16S4y147hB/?spm_id_from333.788 双极性SPWM调制讲解以及基于stm32的代码…

主流公链 - BCH BSV BTG

为什么出现分叉 BTC是自由的&#xff0c;BTC社区也是自由的&#xff0c;自然而然的会出现不同观点的群体 1. 比特币现金&#xff08;Bitcoin Cash&#xff0c;BCH&#xff09; 分叉日期&#xff1a; 2017年8月1日主要目的&#xff1a; 提高比特币的交易吞吐量和降低交易费用技术…

文献学习(自备)

收官大作&#xff0c;多组学融合的新套路发NC&#xff01;&#xff01; - 知乎 (zhihu.com) Hofbauer cell function in the term placenta associates with adult cardiovascular and depressive outcomes | Nature Communications 病理性胎盘炎症会增加几种成人疾病的风险&a…

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长&#xff0c;网站管理员和内容创作者需要不断更新和发布新的文章&#xff0c;以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具&#xff0c;在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章&#xff0c;以…

【TB作品】MSP430G2553,超声波倒车雷达PCB,单片机,超声波SR04,键盘,oled,

题目 硬件&#xff1a;MSP430G2553、 SR04超声波传感器 、3*4键盘、 无源蜂鸣器、oled显示屏 软件 1 、实时显示测量得到的距离 2、按键设置一个报警门限数值&#xff0c;直接输入数值后确认 3、低于报警门限数值就开始报警&#xff0c;而且距离越近蜂鸣器的鸣叫频率越高 程序…

数据库索引及优化

数据库索引及优化 什么是索引&#xff1f; MySQL官方对索引的定义为&#xff1a;索引&#xff08;INDEX&#xff09;是帮助MySQL高效获取数据的数据结构。 索引的本质&#xff1a; 数据结构 为什么要引入索引&#xff1f; 引入索引的目的在于提高查询效率&#xff0c;就好像是…

深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;深入浅出的揭秘游标尺模式与迭代…

Zabbix6 - Centos7源码编译部署HA高可用集群手册

Zabbix6 - Centos7源码编译部署HA高可用集群手册 HA高可用集群 总所周知,在我们IT运维的圈圈中,HA高可用集群服务算是逼格最高的吧也是运维里保障力度最大的环境。 HA是HighlyAvailable缩写,是双机集群系统简称,提高可用性集群,是保证业务连续性的有效解决方案,一般有两个…