总结 TCP 协议的相关特性

TCP协议段格式:

 如图,

端口号:

是其中一个重要的部分,知道端口号才能确认数据交给哪个应用程序(端口号属于传输层的概念).

4位首部长度:4bit表示的范围是0->15,在此处,单位是"4字节",因此,将这里的数值 * 4,才是真正的报头长度,即TCP 报头最大长度,60 字节.
TCP 报头的前 20 个字节,是固定的.(TCP 报头的最短长度,20 字节)选项部分,可以有,也可以没有.可以有一个选项,也可以有多个选项.

需要用首部长度,确认报头到哪结束,载荷数据从哪开始.

保留(6位):

现在不用,先占个位置,以防后面需要用(目前 tcp 也这么多年,大概率是不用了)

其实也就是给未来留下了可以升级扩展的空间.

TCP特点:

有连接,可靠传输(内核实现的 可靠传输,写代码的时候,是感知不到的),面向字节流,全双工



可靠传输实现机制

确认应答(保证"可靠性"最核心的机制)

在TCP的可靠传输机制中,“确认应答”(Acknowledgment)是一种用于确认数据的机制。发送方发送数据段给接收方后,接收方会发送一个特殊的确认应答段(ACK)来告知发送方已经成功接收到数据.

工作原理:

  1. 发送方发送数据段:发送方将数据分成一个或多个数据段,并通过TCP协议将这些数据段发送到接收方。

  2. 接收方接收数据段:接收方收到数据段后,会对数据进行校验,检查数据的完整性和是否有错误。

  3. 发送确认应答:如果数据段没有错误,接收方会发送一个确认应答段(ACK),该段中包含了接收到的数据段的序列号,通知发送方数据已成功接收。

  4. 发送方处理确认应答:发送方收到确认应答后,会更新发送窗口的状态,并根据接收方提供的确认应答信息进行相应处理,如确认成功发送的数据段、启动定时器等。

  5. 超时重传:如果发送方在指定的时间内未收到确认应答,它会认为该数据段丢失或损坏,触发超时重传机制。发送方会重新发送未收到确认应答的数据段,以确保数据的可靠传输。

后发先至

当连续发多条数据的时候,可能会出现"后发先至"的情况,即一个数据报,是先发的另一个是后发的后发的反而先到了(由于网络的延迟、拥塞或丢包等原因,可能会导致部分数据段的顺序被打乱,即后收到的数据段可能先到达接收方)

如何解决呢?

对数据进行编号

 

 确认序号的数值,就是收到的最后一个字节的编号再加一.

注意:TCP是面向字节流的,不是按照“条”为单位来传输.

 只要知道这一串字节的开始编号,以及数据的长度每个字节的编号自然也就知道了
只需要在 tcp 报头中,把这-串字节第一个字节的编号,表示出来再结合报文长度,此时每个字节的编号就确定了

 ACK 为 0 表示这是一个普通的报文,此时只有 32 位序号是有效的.ACK为 1,表示这是一个应答报文,这个报文的 序号 和 确认序号 都是有效的

如此就有办法能区分出,当前这个报文是普通报文,还是一个确认应答报文

超时重传:

确认应答,是 TCP 保证可靠性的最核心机制
超时重传,也是 TCP 可靠性机制的有效补充

丢包,在网络上很可能出现,发一个数据, 然后丢了.

路由器/交换机 就是交通枢纽
结构复杂,传输的数据量也是不确定这一会传输的数据比较少过一会数据就很多了
如果设备太繁忙了,后面新来的数据等太久了就可能被丢弃了网络负载越高,越繁忙就越容易丢包

丢包有两种情况如图:

 发送方无法区分哪种情况,既然无法区分,那就全都重传

丢包本质上是一个“概率性”问题
假设丢包的概率是 10%,传输成功的概率是 90%

连续两次传输,都丢包的概率是多少?
10%*10% =>1%
随着你重传次数的增加,总体能够传输成功的概率,是更大的
是否会存在,连续重传多次,仍然丢包呢?当然存在!! 如果当前的丢包概率已经极高了,达到 100%(比如网线断了),不管咋传,都是丢的

连接管理:

1.建立连接(三次握手)

2.断开连接(四次握手)

握手: handshake,使用打招呼来触发“特定场景
发一个打招呼的数据(这个数据并不会携带业务信息)

A和 B 完成建立连接的过程,就需要
文样的打招呼的数据交互

 

 为什么要合并呢?封装和分用
合并之后,节省了封装和分用的过程降低了成本,提高了效率原则,能合并就合并

 六个标志位说明总结:

 

  1. SYN(Synchronize):表示建立连接。在TCP的三次握手过程中,用于建立连接的第一个数据段会将SYN标志位设置为1。当接收方收到带有SYN标志位的数据段时,它会发送一个带有ACK和SYN标志位的确认应答段,用于确认连接并建立双向通信。

  2. ACK(Acknowledgment):表示确认。在TCP的确认应答中,ACK标志位用于确认成功接收到数据。它通常与其他标志位一起使用,如SYN、FIN等。

  3. FIN(Finish):表示关闭连接。在TCP的四次握手过程中,用于关闭连接的数据段会将FIN标志位设置为1。当一方发送带有FIN标志位的数据段时,它表示已经完成数据传输,请求关闭连接。另一方收到后会发送一个确认应答,并执行相应的关闭操作。

  4. RST(Reset):表示连接复位。当TCP遇到一些异常情况时,如收到无效的数据段或遇到网络故障,会发送带有RST标志位的数据段来中断连接。RST标志位可以用于快速中止连接,恢复到初始状态。

  5. PSH(Push):表示立即推送数据。当发送方设置PSH标志位时,接收方会尽快将数据交给应用程序处理,而不是等待缓存区填满或等待延迟确认。

  6. URG(Urgent):表示紧急数据。当发送方希望发送的数据段中有紧急数据要传输时,可以将URG标志位设置为1。接收方在收到含有URG标志位的数据段后,会尽快处理该数据,以便应用程序能够及时处理。

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

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

相关文章

Cenos7 搭建Minio最新版集群部署服务器(一)

------> 道 | 法 | 术 | 器 | 势 <------ 多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) Cenos7 搭建Minio集群Nginx统一访问入口|反向动态代理(二) Spring Boot 与Minio整合实现文件上传与下载(三) CentOS7的journalctl日志查看方法 …

已知四个坐标点,怎样求出四边形的四个内角

1&#xff0c;理论 最简单的方式利用向量进行求解 如图可得&#xff1a; cosθa*b/&#xff08;|a|*|b|&#xff09; 已知三点坐标&#xff0c;很容易可以得到两向量之积a*b&#xff0c;以及每个的模值 2&#xff0c;四个角度求解过程 首先&#xff0c;我们定义了四个坐标点…

在数字游民天堂,Polkadot Hubs 探索建设更紧密的全球社区

分布式办公是 Web3 行业的协作常态&#xff0c;当数字游民们享受着线上远程工作的自由和便捷时&#xff0c;也在怀念着一种面对面与他人交流与共创的经历。共享空间随之兴起&#xff0c;为许多初创项目公司提供开放舒适的环境&#xff0c;却难以在不同的人群之间搭起一张巨大的…

完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)

问题阐述 最近在Github上提交PR后&#xff0c;遇到了这么一个问题&#xff1a;golangci-lint运行失败&#xff0c;具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint&#xff1a; golangci-lint 是Go语言社区中常用的代码质量检查工具&#xff0c;它可以…

[自学记录06|*百人计划]Gamma矫正与线性工作流

一、前言 Gamma矫正其实也属于我前面落下的一块内容&#xff0c;打算把它补上&#xff0c;其它的没补是因为我之前写的GAMES101笔记里已经涵盖了&#xff0c;而Gamma矫正在101里面确实没提到&#xff0c;于是打算把它补上&#xff0c;这块内容并不难&#xff0c;但是想通透的理…

我的创作纪念日(256天)

前言 结缘 我与csdn的结缘&#xff0c;之前在创作纪念日&#xff08;128天&#xff09;便已提到&#xff0c;今在此便不再多言 收获 很惭愧&#xff0c;自六月底至八月中旬&#xff0c;因为忙于找工作&#xff0c;奔赴面试求职之际&#xff0c;写博客没有像之前那么勤&#x…

qt QPalette的原理与使用

QPalette类用于控制控件的风格&#xff0c;即任意一个地方的绘制方式。每个控件或者说qwidget对象内部都有一个QPalette对象。 在paintEvent(QPaintEvent *event)函数中&#xff0c;其实就是调用该控件的QPalette内容来进行绘制的了。 例如&#xff1a; QStyleOptionTab opt…

《论文阅读12》RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

一、论文 研究领域&#xff1a;全监督3D语义分割&#xff08;室内&#xff0c;室外RGB&#xff0c;kitti&#xff09;论文&#xff1a;RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds CVPR 2020 牛津大学、中山大学、国防科技大学 论文链接论文gi…

Kafka-eagle监控平台

Kafka-Eagle简介 在开发工作中&#xff0c;当业务不复杂时&#xff0c;可以使用Kafka命令来进行一些集群的管理工作。但如果业务变得复杂&#xff0c;例如&#xff1a;需要增加group、topic分区&#xff0c;此时&#xff0c;再使用命令行就感觉很不方便&#xff0c;此时&#x…

Vim学习(二)—— 编译C程序

打开终端&#xff0c;这里以MobaXterm为例&#xff0c; 邮件创建新的空文件并命名&#xff0c; 然后cd到对应路径下&#xff0c;用 vim hello.cvim打开创建的文件&#xff0c;进入编辑模式&#xff0c;编辑完程序后按Esc退出编辑模式&#xff0c;输入 :wq保存并退出&#xf…

linux安装wkhtmltopdf(清晰明了)

概述 在公司项目中使用到 wkhtmltopdf 转换PDF&#xff0c;由于 wkhtmltox-0.12.5 版本 echarts 图形虚线样式&#xff0c;需要升级 wkhtmltox-0.12.6 版本来解决。 官网地址 wkhtmltopdf &#xff1a;https://wkhtmltopdf.org/ windows 安装 下载流程及安装流程 进入官…

《系统架构设计师教程》重点章节思维导图

内容来自《系统架构设计师教程》&#xff0c;筛选系统架构设计师考试中分值重点分布的章节&#xff0c;根据章节的内容整理出相关思维导图。 重点章节 第2章&#xff1a;计算机系统知识第5章&#xff1a;软件工程基础知识第7章&#xff1a;系统架构设计基础知识第8章&#xff1…

Kotlin反射访问androidx.collection.LruCache类私有变量

Kotlin反射访问androidx.collection.LruCache类私有变量 androidx.collection.LruCache类中定义了一个名为map的LinkedHashMap&#xff0c;map存储了所有LruCache的数据&#xff0c;有时候需要遍历访问该LinkedHashMap&#xff0c;取出里面的值&#xff0c;但是LruCache代码实…

GPU Dissolve(GPU 消散)学习GPU Instancing

一&#xff1a;摘要 通过制作一个模型GPU消散效果来学习GPU Instancing 也就是实例化。 目标效果是杨超大佬文章《GPU shatter》里面的消散效果如图&#xff1a; Tags&#xff1a;模型顶点分裂(Mesh Vertex Splitting)&#xff0c; 实例化绘制(GPU Instancing Drawing)&#x…

开源可商业运营的ChatGpt网页源码v1.2.2

&#x1f916; 主要功能 后台管理系统,可对用户,Token,商品,卡密等进行管理 精心设计的 UI&#xff0c;响应式设计 极快的首屏加载速度&#xff08;~100kb&#xff09; 支持Midjourney绘画和DALLE模型绘画,GPT4等应用 海量的内置 prompt 列表&#xff0c;来自中文和英文 一键导…

【猿灰灰赠书活动 - 02期】- 【Java从入门到精通2023年7月最新(第7版)】

说明&#xff1a;博文为大家争取福利&#xff0c;与清华大学出版社合作进行送书活动 图书&#xff1a;《Java从入门到精通》 一、好书推荐 图书介绍 Java入门经典&#xff0c;95万Java程序员的入行选择。配备升级版Java开发资源库&#xff0c;在线大咖课在线答疑&#xff0c;学…

C语言 棱形图案

目录 一、问题分析 上部分&#xff1a; 下部分&#xff1a; 二、代码演示 一、问题分析 如上图所示&#xff0c;我们可以将棱形进行拆解&#xff0c;分为上下两个部分。 上部分&#xff1a; 通过观察&#xff0c;我们得到 单边空格数 上半部分总行数 - 行数 - 1 …

Nginx详解

1、高并发时代 单台tomcat在理想情况下可支持的最大并发数量在200~500之间&#xff0c;如果大于这个数量可能会造成响应缓慢甚至宕机。 解决方案是通过多台服务器分摊并发压力&#xff0c;这不仅需要有多台tomcat服务器&#xff0c;还需要一台服务器专门用来分配请求。这既是…

Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群

目录 高可用&#xff1a; 为什么需要高可用呢&#xff1f; 高可用的主要作用&#xff1a; keepalived是什么&#xff1f;它用在哪里&#xff1f; 什么是VRRP协议&#xff0c;它的作用是什么&#xff1f; 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…

Vue Baidu Map--自定义点图标bm-marker

自定义点图标 将准备好的图标放到项目中 使用import引入&#xff0c; 并在data中进行声明 <script> import mapIconRed from ./vue-baidu-map/img/marker_red_sprite.png export default {data() {return {mapIconRed,}}, } </script>在<bm-marker>中加入参…