详谈三次握手

news/2024/11/30 7:59:33/

作者:爱塔居

专栏:计算机网络

作者简介:大三学生,希望和大家一起进步

 

 经过三次的对话,这两个火柴人才确认了双方都能够说话,都能听见。三次握手也是一样的,只要这样才能确认双方的接受与发送能力是否正常。

 1.第一次握手:客户端给服务器发一个SYN报文,并指明客户端的初始化序列号ISN(c)。此时,客户端处于SYN_Send状态

2.第二次握手:服务器收到客户端的SYN报文之后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN(s),同时会把客户端的ISN报文+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD的状态

3.第四次握手:客户端收到SYN报文之后,会发送一个ACK报文,也是将服务器的ISN+1作为ACK的值,表示已经收到了服务端的SYN报文,此时客户端处于establised状态。

4.服务器收到ACK报文之后,也处于setablised状态,双方建立连接。

 【注意】

🍬1.ISN是动态生成的。

三次握手的一个重要功能便是客户端和服务端交换ISN,以便于对方知道接下来接受数据的时候,如何按序列号组装数据。如果ISN是固定的,攻击者就会很容易就猜出后续的确认号。

🎀2.半连接序列和全连接序列

服务器第一次收到客户端的SYN之后,就会处于SYN——RCVD状态,此时双方还没有完全建立连接,服务器就会把此种状态下请求连接放在一个队列里,这种队列就称为半连接状态。

全连接序列就是已经完成三次握手,建立起连接的就会放在全连接队列。如果队列满了,就可能会出现丢包的现象。

🍒3.携带数据

第一次、第二次握手不能携带数据,第三层握手可以携带数据。

如果第一次握手能携带数据,如果有人恶意攻击服务器,每次在第一次握手中的SYN报文中放入大量的数据,因为攻击者不理会服务器的接受、发送能力是否正常,疯狂重复发送SYN报文,就会使服务器花费很多时间、内存空间来接受这些报文。当第三次的时候,对于客户端,已经建立连接了,接受、发送能力也正常,所以就能携带数据。

🥝4.出现差错的情况

两种情况:

①丢包

主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;

如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发。 

 ②ACK丢失了

没有接收到确认应答,会重新发送的机制,会使一方收到很多重复的数据。TCP协议需要能够识别出那些包是重复的,并且把重复的包丢弃掉。利用前面的序列号,就能很容易做到去重的效果。

确认超时重传的时间:

超时时间的长短会受网络环境的影响,太长会影响整体重传效率,太短,会频繁发送重复的包。

TCP为了保证无论在任何环境下都能比较高性能的通信,会动态计算这个最大超时时间。


http://www.ppmy.cn/news/842169.html

相关文章

小白到运维工程师自学之路 第五十一集 (三剑客之sed)

一、概述 sed是一个流式文本编辑器,可以对文本进行搜索、替换、删除等操作。它是一个非交 互式的命令行工具,通常用于处理大量的文本数据。sed的工作方式是逐行读取输入文 本,按照预定义的命令对每一行进行处理,并输出结果。它…

笔记本热点无法打开

转载自: 作者:木子 链接:https://www.zhihu.com/question/344943077/answer/1456248421 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 桌面打开“此电脑”点击“属性”2.出现以下…

图像处理|思维导图|期末资料分享

关于这些思维导图 都是博主期末考试之前临时抱佛脚的时候整理的资料,内容涵盖应该是比较全面,比较详细的。资料博主都放在了Github的链接里面,需要的伙伴自行上我的Github下载就行。 ImageProcessing-MindMapshttps://github.com/Yufccode/…

笔记本电脑开启热点后电脑无法上网问题——亲测可行【06-17】

1、window键I,打开【window设置】 上图为window键 打开后如下图: 2、点击【更新和安全】 3、点击【查看更新历史记录】 4、点击【卸载更新】 5、卸载更新【KB5014699】 6、重启电脑,便可以和完成一样开启热点了!

飞行动力学 - 第7节-part2-单发失效的起飞性能 之 基础点摘要

飞行动力学 - 第7节-part2-单发失效的起飞性能 之 基础点摘要 1. 单发失效2. 平衡场长3. 参考资料 1. 单发失效 前面我还在说呢,如果单发失效,那过了决策速度不就听天由命了嘛。 果然,这里就提到了一个开伞的问题,不过如果是塞斯…

2023年7月23日 星期三 Linux驱动作业

1.使用驱动代码实现如下要求 a.应用程序通过阻塞的io模型来读取number变量的值 b.number是内核驱动中的一个变量 c.number的值随着按键按下而改变(按键中断) 例如number0 按下按键number1再次按下按键number0 d.在按下按键的时候需要同时将1ed1的状态取反 e.驱动中需要编写字符…

人人都会设计模式---模版方法模式--Template-Method

PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/6c6191a47… 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过2、教程难度 初级,本人水平有限,文章内容难免会出…

京东网站代码

<!DOCTYPE html><html><head><meta charset="utf8" version=1/><title>京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!</title><meta name="viewport" content="width=device-width, initial-scale=…