资讯专栏INFORMATION COLUMN

tcp协议为什么是三次握手而不是两次握手?

cloud / 3323人阅读

摘要:而上面两种情况,如果使用三次握手就可以成功避免,三次握手完成的两个重要功能既要双方做好发送数据的准备工作双方都知道彼此已准备好允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认

我们都知道tcp协议需要三次握手,那为什么不是两次握手呢,关于这个疑问我查了很多资料,看到很多的解释,现归纳总结如下,方便我们理解记忆

如果是两次握手,我们一起来看看下面两种场景

1.造成资源浪费

Client向Server发送了一个a1的包

假如这时由于传输链路上遇到故障,导致a1传输到Server的时间特别长 假设1min
在这一分钟的时间内,由于Client没有收到Server对于a1包的确认,Client会以为上一个包发送丢了或者失败
那么Client会再发送一个a2的包

Client又向Server发送了一个a2的包

这次Server正常收到

于是Server向Client发送了一个b2的确认包

Client和Server建立链接

而随后滞后的a1包传到了Server,Server又会返回b1包确认

但是由于Client已经清除了a1包,所以Client会丢弃掉这个包,但是Server又会保持这个相当于“僵尸”的连接

这样就会造成白白浪费资源

在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段又突然传送到服务器,因为产生错误”

在另一部经典的《计算机网络》(AndrewS.Tanenbaum著,第四版)一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。

我们会发现这两种不同的表述其实阐明的是同一个问题。

2.死锁可能发生

Client向Server发送了一个连接请求分组

Server收到这个分组,并发送了确认应答分组

按照两次握手的协定,Server认为已经成功的建立连接,可以开始发送数据分组
而此时Server的应答分组传输丢失了,Client不知道Server是否已准备好,不知道Server建立什么样的序列号
Client甚至怀疑Server是否收到了自己的连接请求分组,在这种情况下,Client认为连接还未建立成功,将忽略Server发来的任何数据请求,只等待连接确认影带分组。而Server在发出的分组超时后,重复发送同样的分组,资源就形成了死锁。

而上面两种情况,如果使用三次握手就可以成功避免,三次握手完成的两个重要功能

既要双方做好发送数据的准备工作(双方都知道彼此已准备好)

允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/53944.html

相关文章

  • tcp协议什么三次握手不是两次握手

    摘要:而上面两种情况,如果使用三次握手就可以成功避免,三次握手完成的两个重要功能既要双方做好发送数据的准备工作双方都知道彼此已准备好允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认 我们都知道tcp协议需要三次握手,那为什么不是两次握手呢,关于这个疑问我查了很多资料,看到很多的解释,现归纳总结如下,方便我们理解记忆 如果是两次握手,我们一起来看看下面两种场景 1.造成资源浪费...

    iliyaku 评论0 收藏0
  • 通俗大白话来理解TCP协议三次握手和四次分手

    摘要:原理套接字概念套接字是通信的基石,是支持协议的网络通信的基本操作单元。建立连接建立连接至少需要一对套接字,其中一个运行于客户端,称为,另一个运行于服务器端,称为。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机...

    Sanchi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<