网络原理TCP/IP(2)

文章目录

  • TCP协议
  • 确认应答
  • 超时重传
  • 连接管理
  • 断开连接

TCP协议

TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细
的控制;
TCP协议段格式
在这里插入图片描述
• 源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去;
• 32位序号/32位确认号:后⾯详细讲;
• 4位TCP报头⻓度:表⽰该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最⼤⻓度是15*4=60
• 6位标志位:
URG:紧急指针是否有效
ACK:确认号是否有效
PSH:提⽰接收端应⽤程序⽴刻从TCP缓冲区把数据读⾛
RST:对⽅要求重新建⽴连接;我们把携带RST标识的称为复位报⽂段
SYN:请求建⽴连接;我们把携带SYN标识的称为同步报⽂段
FIN:通知对⽅,本端要关闭了,我们称携带FIN标识的为结束报⽂段

• 保留(六位)reserved保留位:UDP协议长度受到2个字节的限制,想要进行扩展,发现扩展不了,一旦改变报头长度,就会使机器发送的UDP数据报和其他机器不兼容,TCP在设定报头的时候就提前准备了几个保留位,后续一旦需要扩展功能,使用保留位就可以实现,就可以避免TCP的扩展不兼容的问题
• 16位校验和:发送端填充,CRC校验.接收端校验不通过,则认为数据有问题.此处的检验和不光包含TCP⾸部,也包含TCP数据部分.
• 16位紧急指针:标识哪部分数据是紧急数据;

确认应答

网络传输过程中,经常会出现后发先至的情况,原因是:一个数据包从发送方到接收方传输过程中走的路径可能不一样,导致先发后至。
为了解决上述问题,引入了序号和确认序号,对数据进行编号,应答报文告诉发送方我应答是哪个数据
在这里插入图片描述
TCP将每个字节的数据都进⾏了编号.即为序列号
主机B收到1-1000这些字节数据之后反馈一个应答报文,应答报文中的确定序号的值就是1001,
1001的含义:
1.小于1001的数据都已经收到了
2.发送方接下来要给我发1001开始的数据了

TCP的确认应答是确保TCP可靠性的最核心机制
在这里插入图片描述
每⼀个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下⼀次你从哪⾥开始发.

超时重传

超时重传是确认应答的补充,如果一切顺利,通过应答报文就可以告诉发送方当前数据是不是成功收到,但是网络上可能存在丢包的情况,如果数据包丢了没有到达对方,对方自然也就没有ack报文,这种情况下就需要超时重传,当认为丢包之后,就会把刚才的数据包再传输一次,等待的过程有一个时间的阈值,就是“超时”。
在这里插入图片描述
• 主机A发送数据给B之后,可能因为⽹络拥堵等原因,数据⽆法到达主机B;
• 如果主机A在⼀个特定时间间隔内没有收到B发来的确认应答,就会进⾏重发;但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了;

在这里插入图片描述
TCP socket在内核中存在接收缓冲区(一块内存空间),发送方发来的数据是要先放到接收缓冲区的然后应用程序调用read/scanner.next才能读到数据,当数据再次接收到缓冲区时候,接收方首先会先判定是否存在,如果存在就会丢弃重复数据。

接收方如何判定这个数据是否是“重复数据” ? 核心判定依据是根据数据的序号

1.数据还在接收缓冲区里,没被read走,此时就拿着新接收的数据序号和缓冲区中的所有数据的序号核对
2.数据在接收缓冲区外,已经被应用程序read走了,此时新来的数据序号直接无法再接收缓冲区查到(注意:应用程序读取数据的时候是按照序号的先后顺序连续读取的,一定是先读序号小的数据后读序号大的数据

超时重传不是无限的重传,重传过程也是有一定策略的
1.重传次数是有上限的,重传到一定程度还没有ack应答就尝试重置连接,如果重置也失败了,就直接放弃连接
2.重传的超时时间阈值也不是固定不变的,随着重传的次数的增大,而增大(重传的频率越来越低)

连接管理

建立连接和断开连接是网络原理中高频的问题
在内核中是如何建立连接的?
TCP要经过 三次握手 建⽴连接,目的就是让通信双方都能保存对方的相关信息

在这里插入图片描述
上述的流程上讲,是有四次交互,但是实际过程中,其中的两次交互可以合二为一,最终形成了“三次握手”,所谓的建立连接过程,本质上就是通信双方各自给对方发起一个syn,各自给对方回应一个ack

注意:

  1. 客户端是主动的一方,第一次交互一定是客户端主动发起的
  2. 所谓的syn是一个特别的TCP数据报,没有载荷,不会携带应用层数据,六个标志位中的第五位,为1

在这里插入图片描述
三次握手的意义是什么?

  1. 三次握手,可以先针对通信路径,进行投石问路,初步的确定一下通信链路是否畅通
  2. 三次握手也是在验证通信双方发送能力和接受能力是否正常

断开连接

断开连接的本质目的就是为了把对端的信息从数据结构中删除掉/释放掉
四次挥手也是存在确认应答和超时重传
在这里插入图片描述
四次挥手,断开连接的第二次和第三次操作不能合二为一,因为在实际通信过程中,ack和第二个fin时间间隔比较长,此时就无法进行合并了,就要分成两次来传输

三次握手和四次挥手
相似之处:
都是通信双方各自给对方发起一个syn/fin,各自给对方返回ack
数据传输的顺序,syn/ack/syn/ack fin/ack/fin/ack
不同之处:
三次握手中间两次一定能合并,四次挥手则不一定
三次握手必须是客户端主动,四次挥手,客户端/服务器都可以主动

连接管理过程中涉及到的TCP状态转换
TCP服务器和客户端都有一定的数据结构来保存这个连接的信息
在这个数据结构中其中就有一个属性叫做“状态”
操作系统内核根据状态的不同,决定了当前应该干什么
在这里插入图片描述
在这里插入图片描述
LISTEN状态,表示服务器这边创建好了serverSocket了,并且绑定端口号完成
ESTABLISHED状态,表示客户端和服务器连接已经建立完毕(三次握手完成)
CLOST WAIT状态,表示收到对方的fin之后进入这个状态(谁被动断开连接谁进入CLOSE WAIT)
TIME WAIT状态,表示本端给对方发起FIN之后,对端也给本端发FIN,此时本端进入TIME WAIT(谁主动断开连接谁进入TIME WAIT)

TIME_WAIT 存在的意义,主要是防止,最后一个ACK丢包。客户端如果在这个环节,把TCP连接释放掉,此时意味着重传的FIN就无法被返回ACK了(保存对端信息的数据结构存在,才能给这个连接提供各种操作,才能返回ACK)
此时的TIME_WAIT等待也不是无休止的等待,最多等2MSL(MSL是一个系统内核的配置项,表示客户端到服务器之间,消耗的最长时间,这个时间一般是一个非常大的时间,常见的设置值是1min)

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

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

相关文章

ClickHouse基于数据分析常用函数

文章标题 一、WITH语法-定义变量1.1 定义变量1.2 调用函数1.3 子查询 二、GROUP BY子句(结合WITH ROLLUP、CUBE、TOTALS)三、FORM语法3.1表函数3.1.1 file3.1.2 numbers3.1.3 mysql3.1.4 hdfs 四、ARRAY JOIN语法(区别于arrayJoin(arr)函数&a…

12个RAG常见痛点及解决方案

Barnett等人的论文《Seven Failure Points When Engineering a Retrieval Augmented Generation System》介绍了RAG的七个痛点,我们将其延申扩展再补充开发RAG流程中常遇到的另外五个常见问题。并且将深入研究这些RAG痛点的解决方案,这样我们能够更好地在…

导出pdf 加密、加水印、加页脚

1.依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> …

cnpm : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\cnpm.ps1

cnpm命令被禁止使用 我已经安装cnpm &#xff0c;但是使用不了&#xff0c;重新安装也没用。 报错如下图&#xff1a; cnpm无法使用报错 解决问题 1、打开系统Windows PowerShell,使用管理员身份运行。 打开Windows PowerShell 2、输入set-ExecutionPolicy RemoteSigned&a…

第三篇:跨平台QT开发-元对象系统

元对象系统 元对象系统是一个基于 标准 C的扩展 &#xff0c;为 Qt 提供了信号与槽机制、实时类型信息,动态属性系统 元对象系统的三个基本条件&#xff1a;类必须继承自 QObject、类声明 Q_OBJECT 宏&#xff08;默认私有 有&#xff09;、元对象编译器 moc。 class ExamDia…

Matplotlib雷达图教程:学会绘制炫酷多彩的多维数据可视化【第53篇—python:Seaborn大全】

文章目录 Matplotlib雷达图绘制指南&#xff1a;炫酷雷达图参数解析与实战1. 普通雷达图2. 堆叠雷达图3. 多个雷达图4. 矩阵雷达图5. 极坐标雷达图6. 定制化雷达图外观7. 调整雷达图坐标轴范围8. 雷达图的子图布局9. 导出雷达图总结 Matplotlib雷达图绘制指南&#xff1a;炫酷雷…

在flutter中集成Excel导入和导出

flutter中集成Excel导入和导出功能 1、需要的依赖 在pubspec.yaml #excel导出syncfusion_flutter_xlsio: ^24.1.45open_file: ^3.0.1#导入excelflutter_excel: ^1.0.1#选择文件的依赖file_picker: ^6.1.1&#xff08;1&#xff09;依赖说明 在测试时&#xff0c;我们在使用导…

spring问题点

1.事务 1.1.事务传播 同一个类中 事务A调非事务B B抛异常 AB事务生效&#xff08;具有传播性&#xff09; 同一个类中 事务A调非事务B A抛异常 AB事务生效 也就是主方法加了事务注解 则方法内调用的其他本类方法无需加事务注解&#xff0c; 发生异常时可以保证事务的回滚 最常…

Docker极速入门掌握基本概念和用法

1、Docker概念 1.1什么是docker Docker是一个快速交付应用、运行应用的技术&#xff0c;具备以下优势 可将程序及其依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器&#xff0c;各个应用互不干扰启动、移除都可以通…

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)

目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组&#xff0c;本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组&#xff0c;每行先给出正整数N&#xff08;≤20&#xff09;&#xff0c;随后是N个整数&a…

小鱼深度产品测评之:阿里云一键部署幻兽帕鲁,真正1分钟部署,3分钟进入游戏,无限畅玩,双倍快乐。

阿里云一键部署幻兽帕鲁 一、 引言二、 部署过程2.1 进入游戏联机服务专题页2.2 服务购买2.3 服务创建 三、游戏体验3.1 进入Palword3.2 游戏体验3.3 服务器更新3.4 定时备份存档 三、 总结3.1 部署体验3.2 游戏体验 一、 引言 首先。感谢阿里云的运营小姐姐定邀我来参与这次幻…

机器学习 | 如何构建自己的决策树算法?

决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 目录 初识决策树 决策树原理 cart剪枝 特征提取 泰坦尼克号乘客生存预测(实操) 回归决策树 初识决策树 决策树是一种…

idea 中 tomcat 乱码问题修复

之前是修改 Tomcat 目录下 conf/logging.properties 的配置&#xff0c;将 UTF-8 修改为 GBK&#xff0c;现在发现不用这样修改了。只需要修改 IDEA 中 Tomcat 的配置就可以了。 修改IDEA中Tomcat的配置&#xff1a;添加-Dfile.encodingUTF-8 本文结束

嵌入式软件中常见的 8 种数据结构

数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算机科学和软件工程的基础。当…

pytorch创建tensor

目录 1. 从numpy创建2. 从list创建3. 创建未初始化tensor4. 设置默认tensor创建类型5. rand/rand_like, randint6. randn生成正态分布随机数7. full8. arange/range9. linspace/logspace10. Ones/zeros/eye11. randperm 1. 从numpy创建 2. 从list创建 3. 创建未初始化tensor T…

【iOS ARKit】2D肢体动作捕捉

人体肢体动作捕捉在动漫影视制作、游戏CG 动画、实时模型驱动中有着广泛的应用&#xff0c;利用 ARKit&#xff0c;无须额外的硬件设备即可实现 2D和3D人体一系列关节和骨骼的动态捕捉&#xff0c;由于移动AR 的便携性及低成本&#xff0c;必将促进相关产业的发展。 ARBody Tr…

物流自动化移动机器人|HEGERLS三维智能四向穿梭车助力优化企业供应链

智能化仓库/仓储贯穿于物流的各个环节&#xff0c;不局限于存储、输送、分拣、搬运等单一作业环节的自动化&#xff0c;更多的是利用科技手段实现整个物流供应链流程的自动化与智能化&#xff0c;将传统自动化仓储物流各环节进行多维度的有效融合。 例如在数智化物流仓储的建设…

记录element-plus树型表格的bug

问题描述 如果数据的子节点命名时children,就没有任何问题&#xff0c;如果后端数据结构子节点是其他名字&#xff0c;比如thisChildList就有bug const tableData [{id: 1,date: 2016-05-02,name: wangxiaohu,address: No. 189, Grove St, Los Angeles,selectedAble: true,th…

阿里云一键部署雾锁王国联机服务器详细教程

雾锁王国(Enshrouded)作为一款热门多人在线游戏&#xff0c;为了给玩家提供稳定、流畅的联机体验&#xff0c;阿里云提供了高效便捷的快速部署解决方案&#xff0c;本文将为大家分享阿里云一键部署雾锁王国联机服务器详细教程。 第一步&#xff1a;使用快速部署模板 1、登录阿…

数据湖系列之二 | 打造无限扩展的云存储系统,元数据存储底座的设计和实践

海量数据对数据湖存储的扩展能力提出了极高的要求。元数据面作为云存储最核心、最底层的系统之一&#xff0c;直接决定了存储系统的扩展性。 本文作为数据湖系列的第二篇&#xff0c;将为大家揭开元数据面存储底座的秘密&#xff0c;如何设计能够支撑存储容量的“无限扩展”。…