一文让你理解为什么tcp一定要三次握手

众所周知,tcp作为稳定的传输层协议,其三次握手机制提供了非常重要的保证。那么tcp为什么一定要三次握手才能保证正确传输呢?两次握手是否可以满足?

① 为什么要三次握手,三次握手做了什么?

先看三次握手过程:

一文让你理解为什么tcp一定要三次握手_第1张图片

简而言之,三次握手完成最重要的工作就是确定对方可以正常接收发送消息,并对初始的序列号进行一个协商。如上图,A发出了x,B收到了x并向A传达我下一次希望收到x+1,并发送了y;这时A也收到了y,给B传回它希望收到的x+1,并表明我也希望你下一次给我传y+1。至此,双方初始序列号以及商量完毕,双方发送状态也确认正常。那下面就是愉快的传输吧~

② 两次握手可以不可满足?

不可以!

我们模拟一下两次握手的情况。

假设客户端给服务端发送了一个连接请求,那么服务端接收了这个请求,并发送一个应答分组,这时候按照两次握手的标准,连接以及建立了。我们模拟服务端应答丢失的情况:

一文让你理解为什么tcp一定要三次握手_第2张图片

 服务器通过两次握手,认为连接以已经建立,于是发了应答分组,而这是如果这个应答分组丢失了,那么客户端一直没有收到应答,所以它会认为连接还没有建立,要一直等着收到客户端的应答(这样会忽视客户端发来的非应答分组,即数据分组),而服务器觉得此时以及连接好了,它就会一直给客户端发数据分组。于是乎,客户端一直需要应答分组,服务器一直发送数据分组,形成死锁!

那么为什么三次握手不会出现这种情况?
因为如果服务器最开始发的应答丢了,它不会认为连接建立了,那么还是会重发应答,而不是发送数据!

不得不说三次握手是一个非常好的网络协议设定。

你可能感兴趣的:(tcp/ip,网络,网络协议)