TCP四次挥手——断开连接 滑动窗口-流量控制

四次挥手

在TCP的四次挥手中,其重要作用就是释放客户端和服务器的连接。

这里的一些参数非常重要,因为这些参数的作用是为了表达TCP四次挥手断开连接的过程。

其中的参数如下

1.FIN:FIN (Finish) 是TCP协议中的一个标志位,用于表示在数据传输完成后,发送方已经完成了数据的发送,并且不会再发送任何数据。当一个TCP连接的一方发送了带有 FIN 标志的数据段时,表示该方已经完成了数据的发送,但仍然可以接收来自另一方的数据。

2.ACK:ACK (Acknowledgment) 也是TCP协议中的另一个标志位,用于表示收到数据的确认。当一个TCP连接的一方发送了带有 ACK 标志的数据段时,表示该方已经成功接收到了之前发送方的数据。ACK 用来通知发送方数据已经到达目的地并得到正确处理。

3.CLOSE_WAIT:等待应用程序调用close方法,但是如果说程序出现问题,close没有及时的调用或者说根本没调用,那么就会使得机器上出现大量的CLOSE_WAIT。CLOSE_WAIT 是 TCP 状态之一,它表示在 TCP 连接的一端已经发送了关闭连接的请求(通过发送 FIN),但是另一端尚未发送关闭连接的请求或确认(通过发送 ACK。

3.TIME_WAIT:客户端在收到服务器返回的FIN后,不能立即释放TCP连接,如果立即释放了,后续一旦对端重传了FIN,此时客户端无法应对,因此客户端这边就需要一个特殊状态TIME_WAIT状态来等待可能到达的FIN重传数据。一般来说,TIME_WAIT持续一段时间,等待对方FIN的重传,等待的时间,一般是2MSL,MSL这个数值通常是1min,这意味着超过2min还没收到重传的FIN,就认为对方不会重传了。

面试题

如果发现服务器端出现大量的TIME_WAIT,如何处理?

出现大量的TIME_WAIT,说明服务器这边出发了大量的主动断开的TCP连接操作,这个操作对服务器来说,是非常不科学的,一般都是客户端主动断开连接

滑动窗口

确认应答,超时重传和连接管理保证了可靠传输

TCP除了保证可靠传输之外,也希望尽可能高效的完成数据传输,滑动窗口就是其中的一种,提高传输效率的机制。

1.正常来说,主机A这里每次收到一个ACK才发送下一个数据。

2.但是一条一条发送效率比较低,因此采用批量发送的方法,因此引入了滑动窗口,而批量发送的数据量大小就是窗口大小,在这里,比如说滑动窗口大小是4,那么批量发了四组数据之后,不是等到4个ack都回来才继续发送新的数据,而是收到一个ack,就往后发一个新的。

 滑动窗口出现丢包的情况:

情况1:数据包已经抵达了,ACK被弄丢了

这种情况下,前面的ACK被弄丢了,但是只要是最后的ACK到达,那么久没有问题,就默认前面的数据全部收到。

 情况2:数据包就直接丢了

在这个过程中,假如说中间有一个数据包丢了,那么主机A就迟迟无法等到对方返回的ACK从1001开始,B主机一直在等待A的SYN,索要1001这个数据包且永远也得不到。

总结这两种丢包的处理

第一种情况对于ACK的丢失,不作任何处理  

第二种情况对于数据的丢失,只需要把缺失的数据重传就行,其他数据不用重传。

流量控制

窗口的机制很重要,窗口大小是可变的,通过窗口的大小来控制发送方发送的速度,发送的太快,接收方容易处理不过来。但是窗口越大单位时间发的数据就越多,效率就越高。窗口越小,单位时间发的数据就越少。

那么具体来说是如何控制速度呢,接收方有一个接受缓冲区,也就是阻塞队列。

以空闲空间的大小作为发送方发送数据的窗口大小,也就是上图中未使用的空间。需要把这个数值告诉发送方,接收方会返过来给发送方返回一个ACK,在ACK报文中,在TCP的报头中,制定一个字段来表示上述的空闲空间的大小。

 

上图中,16位窗口大小,只会在ack报文中生效,含义就是接收方接收缓冲区空闲空间的大小,这不意味着窗口大小就是64kb,因此TCP是可扩展的,有一个扩展因子可以将其扩展。 

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

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

相关文章

基于spingboot,vue线上辅导班系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分:用户,管理员 具有前后台展示,前台供用户使用;用户具有自己的后台,查看自己的老师课程等;管理员具有最大的权限后台。 用户&#xff1a…

76岁林子祥升级做爷爷,亲自为孙女取名

林子祥与前妻吴正元的儿子,现年39岁的林德信入行以来绯闻不少,自与圈外女友Candace拍拖后便修心养性,去年他已经低调与拍拖5年多Candace完婚,正式步入人生另一阶段。 昨日(5月12日)林德信借母亲节这个温馨日…

Linux - make与makefile

文章目录 什么是make和makefile如何使用依赖关系 和 依赖方法伪目标 写个程序-进度条换行和回车的区别 什么是make和makefile make是一个命令 makefile是一个文件 这就是make和makefile的本质 make和 ll , pwd ,su 一样都是命令 makefile和 test , test.c 一样都是…

vue2人力资源项目8员工详情

页面结构 <template><div class"dashboard-container"><div class"app-container"><div class"edit-form"><el-form ref"userForm" label-width"220px"><!-- 姓名 部门 --><el-row…

C#之如何判断数据类型

一、GetType方法 a.GetType()&#xff1a;获取当前变量的类型对象 string str "Hello World";Console.WriteLine(str.GetType()); 结果: 二、typeof方法 typeof(Int)&#xff1a;获取的是Int类型的类型对象 int num 10;Console.WriteLine(num.GetType() typeof(i…

常见磁盘分区问题

给磁盘分区有几个主要的原因&#xff1a; 组织和管理数据&#xff1a;分区可以帮助用户更好地组织和管理数据。例如&#xff0c;你可以在一个分区上安装操作系统&#xff0c;而在另一个分区上存储个人文件。这样&#xff0c;即使操作系统崩溃或需要重新安装&#xff0c;你的个…

【cmake】Windows 环境下编译第三方依赖源码(以编译Xerces库为例)

第三方依赖源码的编译分为两种&#xff0c;一种是使用 Configure 脚本编译&#xff0c;另一种是使用 CMakeLists.txt 编译。Xerces 3.2.3 的编译方式是 CMakeLists.txt 脚本编译。 必要软件&#xff1a; CMake &#xff08;CMake | Download&#xff09;Visual Studio 2019&a…

java版数据结构:堆,大根堆,小根堆

目录 堆的基本概念&#xff1a; 如何将一个二叉树调整成一个大根堆&#xff1a; 转成大根堆的时间复杂度 根堆中的插入&#xff0c;取出数据&#xff1a; 堆的基本概念&#xff1a; 堆是一种特殊的树形数据结构&#xff0c;它满足以下两个性质&#xff1a; 堆是一个完全二叉…

Mirror从入门到入神

Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架&#xff0c;基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…

刷题之找到字符串所有字母异位词

找到字符串所有字母异位词 滑动窗口。滑动窗口大小为待比较数组的大小。 class Solution { public:vector<int> findAnagrams(string s, string p) {//滑动窗口vector<int>result;if(s.size()<p.size())return result;vector<int>pnum(26,0);//记录p的字…

[第五空间 2021]WebFTP

目录扫描git泄露phpinfo.php 一开始想到是sql注入&#xff0c;但是不行。目录扫描&#xff0c;发现 .git 和 phpinfo.php 访问phpinfo.php&#xff0c;ctrlf 搜索 flag&#xff0c;找到 flag。

【风变】Python爬虫精进复习-20240430

参考笔记 下面给出一个巨佬学习风变pyhton基础语法和爬虫精进的笔记&#xff08;链接&#xff09; 风变编程笔记(一)-Python基础语法 风变编程笔记(二)-Python爬虫精进 技术总结 request BeautifulSoup selenium BeautifulSoup 练习0-1&#xff1a;文章下载 import requ…

TypeScript学习日志-第二十六天(weakMap,weakSet,set,map)

weakMap,weakSet,set,map 一、set set 的基本用法如下&#xff1a; 二、map map 与 set 的 区别 就是 map 的 key 可以是引用类型 object array , map 的添加时使用 set 三、weakmap weakset weakmap和weakset 都是弱项 弱引用 其键必须是引用类型&#xff0c;不能是其它类…

【C/C++笔试练习】DNS劫持、三次握手、TCP协议、HTTPS、四次挥手、HTTP报文、拥塞窗口、POP3协议、UDP协议、收件人列表、养兔子

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;DNS劫持&#xff08;2&#xff09;三次握手&#xff08;3&#xff09;TCP协议&#xff08;4&#xff09;HTTPS&#xff08;5&#xff09;四次挥手&#xff08;6&#xff09;HTTP报文&#xff08;7&#xff09;拥塞窗口&a…

网优干货:ACP交付详解版(3)

1. 全局指标分析 点击GIS页面左侧的 按钮&#xff0c;展开指标树&#xff0c;可查看各项优化目标的当前值、预测值和差值。 拖动指标树中的某个指标到GIS页面&#xff0c;可呈现该指标的整体分布。GIS页面共有两个半屏&#xff0c;用户可以做优化前后相同指标的对比&#xff0c…

从CSDN搬家到微信公众号

博主将会在微信公众号里不断输出精品内容&#xff0c;陪伴大家共同成长。 如果你对博主的经历感兴趣&#xff0c;或者对博主的IT技术感兴趣&#xff0c;欢迎关注我的微信公众号&#xff0c;阅读我的技术文章&#xff0c;免费获取各种IT资源。也可以加我的微信成为我的好友&…

【Javaer学习Python】 1、Django安装

安装 Python 和 PyCharm 的方法就略过了&#xff0c;附一个有效激活PyCharm的链接&#xff1a;https://www.quanxiaoha.com/pycharm-pojie/pycharm-pojie-20241.html 1、安装Django # 安装Django pip install Django# 查看当前版本 python -m django --version 5.0.62、创建项…

ollama离线部署llama3(window系统)

首先介绍下ollama是什么&#xff1f;Ollama是一个开源的大型语言模型服务工具&#xff0c;旨在为用户提供本地化的运行环境&#xff0c;满足个性化的需求。具体来说&#xff0c;Ollama是一个功能强大的开源框架&#xff0c;可以简化在Docker容器中部署和管理大型语言模型&a…

24深圳杯C题18页高质量论文+可执行代码+图表

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

2024年5月中,AITOP100平台活动专区迎来六场AI大赛盛事!

AITOP100平台的活动专区在2024年5月中旬更新的6场AI大赛来了&#xff01; 随着人工智能技术的飞速发展&#xff0c;AI设计已经成为了创新与创意的新领域。2024年5月中旬&#xff0c;由腾讯研究院、剪映、站酷等互联网大厂主办的6场AI设计大赛震撼来袭&#xff0c;为广大AI设计…