总结 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标志位的数据段后,会尽快处理该数据,以便应用程序能够及时处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲Prometheus源代码--util

Prometheus的util目录包含了一些通用的工具模块,主要包含以下文件: buckets.go 这个文件定义了一些常用的指标采样值范围(Quantile buckets),如:0.001,0.01,0.05,0.5,0.9,0.95,0.99,0.999等。这些buckets常用于计算指标的分位数线。 regex.go 这个文件定义了一些正则表达式匹配…

Spring事务和事务传播机制(1)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…

使用nrm快速切换npm源以及解决Method Not Implemented

文章目录 什么是nrm如何使用nrm查看本机目前使用的npm 源安装nrm查看可选源查看当前使用源切换源添加源删除源测试源的响应时间 如果你遇到这个报错,就可以采用这种方案解决哦解决方案:1. 切换为官方源2. 查看漏洞3. 修复漏洞4. 下面命令慎重使用&#x…

Leetcode 0814周总结

本周刷题: 88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448 88 合并两个有序数组 nums1{1, 2, 3 ,0, 0, 0} nums2{2, 5, 6} 合成效果:nums1{1, 2, 2, 3, 5, 6} 思路:【双指针】对两个数组设置双指针,依次比较哪…

基于traccar快捷搭建gps轨迹应用

0. 环境 - win10 虚拟机ubuntu18 - i5 ubuntu22笔记本 - USB-GPS模块一台,比如华大北斗TAU1312-232板 - 双笔记本组网设备:路由器,使得win10笔记本ip:192.168.123.x,而i5笔记本IP是192.168.123.215。 - 安卓 手机 1.…

GPT系列总结

1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training (1)基于一个transformer decoder,通过一个窗口的输入得…

当Visual Studio遇到 “当前不会命中断点.还没有为该文档加载任何符号“的情况

1.配置项目调试路径: 2.问题解决方案: VS配置调试路径不是默认路径时,需要看生成的文件是否在配置路径内,如果不在的话,可能发生"当前不会命中断点.还没有为该文档加载任何符号"的情况; 右键项…

GAN生成对抗模型根据minist数据集生成手写数字图片

文章目录 1.项目介绍2相关网站3具体的代码及结果导入工具包设置超参数定义优化器,以及损失函数训练时的迭代过程训练结果的展示 1.项目介绍 通过用minist数据集进行训练,得到一个GAN模型,可以生成与minist数据集类似的图片。 GAN是一种生成模…

Kubernetes 安全机制 认证 授权 准入控制

客户端应用若想发送请求到 apiserver 操作管理K8S资源对象,需要先通过三关安全验证 认证(Authentication)鉴权(Authorization)准入控制(Admission Control) Kubernetes 作为一个分布式集群的管理…

C++11并发与多线程笔记(9) async、future、packaged_task、promise

C11并发与多线程笔记(9) async、future、packaged_task、promise 1、std::async、std::future创建后台任务并返回值2、std::packaged_task:打包任务,把任务包装起来3、std::promise3、小结 1、std::async、std::future创建后台任务…

编程练习(3)

一.选择题 第一题: 函数传参的两个变量都是传的地址,而数组名c本身就是地址,int型变量b需要使用&符号,因此答案为A 第二题: 本题考察const修饰指针变量,答案为A,B,C,D 第三题: 注意int 型变…

Linux忘记root密码解决方法

当我们忘记root密码进不去服务器怎么办?不要担心,可以进入到linux的救援模式修改root密码。 下面直接上干货,流程如下: 1.重启电脑,按上下键滑动,保证不进入开机流程,然后按e键 2.出现此页面…

Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)

最近收到了一个 Tang nano 9K FPGA开发板,就想借此机会研究一下。 官方文档里介绍如果想使用高云的 FPGA,就需要使用 GOWIN IDE,但是需要申请 license 提交一堆资料,我是别人送的就不太方便让别人弄。加上 IDE 其实并不是很适合学…

2023-08-19 LeetCode每日一题(两整数相加)

2023-08-19每日一题 一、题目编号 2235. 两整数相加二、题目链接 点击跳转到题目位置 三、题目描述 给你两个整数 num1 和 num2&#xff0c;返回这两个整数的和。 示例 1&#xff1a; 示例 2&#xff1a; 提示&#xff1a; -100 < num1, num2 < 100 四、解题代…

idea2023 springboot2.7.5+mybatisplus3.5.2+jsp 初学单表增删改查

创建项目 修改pom.xml 为2.7.5 引入mybatisplus 2.1 修改pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mysq…

Vue elementui 实现表格selection的默认勾选,翻页记录勾选状态

需求&#xff1a;当弹出一个列表页数据&#xff0c;对其进行筛选选择。 列表更新&#xff0c;填充已选数据 主要使用toggleRowSelection 代码如下&#xff1a; <el-table v-loading"loading" :data"drugList" selection-change"handleSelection…

华为手机Outlook手机APP无法登录邮箱,提示[2002]错误代码

近期遇到不少华为手机的Outlook APP无法登录邮箱Office365邮箱的案例&#xff0c;并且提示&#xff1a; 错误 出错了。[2002] 经测试&#xff0c;这应该是华为应用市场下载的Outlook版本有问题。 解决方法&#xff1a; 把Outlook卸载之后从微软官网重新下载官网版本去安装&am…

通过 kk 创建 k8s 集群和 kubesphere

官方文档&#xff1a;多节点安装 确保从正确的区域下载 KubeKey export KKZONEcn下载 KubeKey curl -sfL https://get-kk.kubesphere.io | VERSIONv3.0.7 sh -为 kk 添加可执行权限&#xff1a; chmod x kk创建 config 文件 KubeSphere 版本&#xff1a;v3.3 支持的 Kuber…

2018年3月全国计算机等级考试真题(语言二级C)

2018年3月全国计算机等级考试真题&#xff08;语言二级C&#xff09; 第1题 设有定义&#xff1a;char s[81]&#xff1b;int i0&#xff1b;以下不能将一行带有空格的字符串正确读入的语句或语句组是 A. while((s[i]getchar())!\n);s[i]\0; B. scanf("%s",s); C.…

Centos7完全卸载已安装的Nginx

docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升…