tcp协定为何是三次握手而不是两次握手?

我们都晓得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在发出的分组超时后,反复发送一样的分组,资本就形成了死锁。

而上面两种状况,假如运用三次握手就能够胜利防止,三次握手完成的两个主要功用

  1. 既要两边做好发送数据的准备工作(两边都晓得相互已准备好)
  2. 许可两边就初始序列号举行协商,这个序列号在握手历程中被发送和确认
    原文作者:紫贝壳儿
    原文地址: https://segmentfault.com/a/1190000019342022
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞