总结 TCP 协议的相关特性

news2025/1/15 19:47:20

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.coloradmin.cn/o/885403.html

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

相关文章

CentOS系统环境搭建(十二)——CentOS7安装Elasticsearch

centos系统环境搭建专栏🔗点击跳转 CentOS 7.9 安装 Elasticsearch 7.17.12 文章目录 CentOS 7.9 安装 Elasticsearch 7.17.121.下载2.上传3.解压4.调整es占用内存5.修改elasticsearch配置文件6.创建用户7.Elasticsearch 后台启动与关闭 1.下载 🔗http…

XXL-JOB学习笔记——调度中心

集群部署配置 3.1.服务启动 XXL-JOB的集群部署非常简单,只需要注意两点: 集群节点都连接的是同一个数据库。 多台机器部署时,需要统一系统时间,如果是单个机器部署,则不用管这条。 现在是在同一台机器中,…

W5100S-EVB-PICO做UDP Client进行数据回环测试(八)

前言 上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。 连接方式 使开发板和我们的电脑处于同一网段: 开发板通过交叉线直连主机开发板和主机都接在路由器LAN口 测试工具 网路调试工具&a…

神采PromeAI,设计师的高效创作搭子

2023年,没有一个打工人不关注AI,也没有一个老板不想乘上AI东风、革新行业的梦。在生成式AI的可控性越强,对市场和产业的颠覆性就越大! 神采PromeAI的可控性得到许多用户的认可,网站已上线草图渲染、照片转线稿、涂抹替…

UDP数据报结构分析(面试重点)

在传输层中有UDP和TCP两个重要的协议,下面将针对UDP数据报的结构进行分析 UDP结构图示 UDP报头结构的分析 UDP报头有4个属性,分别是源端口,目的端口,UDP报文长度,校验和,它们都占16位2个字节,所…

CSS自己实现一个步骤条

前言 步骤条是一种用于引导用户按照特定流程完成任务的导航条,在各种分步表单交互场景中广泛应用。例如:在HIS系统-门诊医生站中的接诊场景中,我们就可以使用步骤条来实现。她的执行步骤分别是:门诊病历>遗嘱录入>完成接诊…

福昕阅读器文档无法高亮的问题 转

转自福昕阅读器文档无法高亮的问题_福昕pdf高亮用不了_没有价值的生命的博客-CSDN博客 最近在阅读一篇PDF文档时,对一些内容进行高亮时,发现不能够进行高亮,然后通过在网上查找解决方法算是解决了我的问题。下面我将总结2点不能进行注释的情…

无涯教程-Perl - sqrt函数

描述 此函数返回EXPR的平方根;如果省略,则返回$_。大多数情况下,此函数返回浮点数。 语法 以下是此函数的简单语法- sqrt EXPRsqrt返回值 该函数返回浮点数。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w$resultsqrt(4); print " sqrt(4) …

2024第12届国际生物发酵展,3月6-8日济南举办

2024第12届国际生物发酵产品与技术装备展(济南展) 2024年3月6-8日 | 山东国际会展中心 2024第13届国际生物发酵产品与技术装备展(上海展) 2024年8月7-9日 | 上海新国际博览中心 主办单位: …

采用nodejs+vue语言和mysql汽车4s店服务管理系统 _od8k

为设计一个安全便捷,并且使用户更好获取本汽车服务信息,本文主要以安全、简洁为理念,实现用户快捷寻找汽车服务信息,从而解决汽车服务信息复杂难辨的问题。该系统以vue架构技术为基础,采用nodejs语言和mysql数据库进行…

终于理解正向代理和反向代理的联系和区别啦~

正向代理、反向代理 正向代理反向代理联系区别 正向代理 正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标&…

实时设备状态监测与故障诊断:制造业转型的驱动力

在当今快节奏、高竞争的制造业环境中,生产效率和设备可靠性成为企业成功的关键。随着技术的不断发展,实时设备状态监测与故障诊断正成为制造业转型的重要驱动力。这一创新技术不仅提供了提前预警和预测性维护,还为制造商带来了更高的生产效率…

事务异常:Transaction rolled back because it has been marked as rollback-only解决方案

目录 事务的概念为何需要事务事务异常的原因解决方案1、方案1(一般采用这种)2、方案2 事务的概念 事务这个词,其实我们最先接触的地方应该是数据库,我们会知道事务有着四种特性,分别是: 原子性&#xff1…

windows11 修改默认存储位置

windows11 修改默认存储位置 https://zhuanlan.zhihu.com/p/367637690

SCS【31】减少障碍,加速单细胞研究数据库(Single Cell PORTAL)

细胞生信分析教程 桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程,目前整理出来的相关教程目录如下: Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅,述说…

SElinux 导致 Keepalived 检测脚本无法执行

哈喽大家好,我是咸鱼 今天我们来看一个关于 Keepalived 检测脚本无法执行的问题 一位粉丝后台私信我,说他部署的 keepalived 集群 vrrp_script 模块中的脚本执行失败了,但是手动执行这个脚本却没有任何问题 这个问题也是咸鱼第一次遇到&…

koa2脚手架koa-generator的使用

koa2脚手架的基本使用 简介前言:使用koa2的脚手架koa-generator,使用非常简单,容易上手 首先,我们需要全局安装 npm install -g koa-generator安装成功后,需要创建项目 koa2 koapro[koapro 项目名称] 或者 koa2 -e [koapro 项目名…

华为网络篇 RIP路由手工汇总-27

难度2复杂度2 目录 一、实验原理 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 在网络规划过程中,我们避免不了使用VLSM技术,但是使用VLSM后会有一个问题,就是子网较多时会占用系统资源。我们可以使用路由汇总的方法&…

Doris Summit 2023 正式启航,议题征集 合作伙伴招募火热进行中

在数字化进程不断演进的时代,数据呈现爆发增长。在这数据洪流之中,数据实时分析的重要性愈发凸显,并成为企业成功的关键要素。 作为专注于实时分析的开源实时数据仓库 Apache Doris,从开源至今已走过 6 个年头,这些年…

学习笔记十九:Pod常见的状态和重启策略

Pod常见的状态和重启策略 常见的pod状态第一阶段:第二阶段:扩展: pod重启策略测试Always重启策略正常停止容器内的tomcat服务非正常停止容器里的tomcat服务 测试never重启策略正常停止容器里的tomcat服务非正常停止容器里的tomcat服务 测试On…