Loading

为什么要进行三次握手?两次握手可以吗?

两次握手不行,原因如下:

  • 为了防止通信双方建立错误的连接;

如上图所示,假设客户端开始给服务端发送了一个序列号为99的synTCP请求连接报文,不巧的是这个syn报文由于网络拥塞而没有及时到达服务端,然后客户端又发送了一个序列号为399的SYN请求报文给服务端,这时前面那个超时的报文恰好到达了服务端,而服务端确认了这个报文,从而服务端建立了TCP连接,然后客户端收到了序列号为99的请求报文的确认报文,于是他就一脸懵逼,但是因为两次握手已经达成,双方建立的TCP错误连接已经没有办法更改了,从而造成了通信双方建立错误的TCP连接;如果是三次握手,那么客户端会对这个错误的确认报文回复一个reset报文,从而防止建立TCP错误连接;

  • 告知对方自己的初始序号值,并确认收到对方的初始序号值。

TCP 实现了可靠的数据传输,原因之一就是 TCP 报文段中维护了序号字段和确认序号字段,通过这两个字段双方都可以知道在自己发出的数据中,哪些是已经被对方确认接收的。这两个字段的值会在初始序号值得基础递增,如果是两次握手,只有发起方的初始序号可以得到确认,而另一方的初始序号则得不到确认。

  • 三次握手才能让双方均确认自己和对方的发送和接收能力都正常。

第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常;
第二次握手:客户端可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;
第三次握手:服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;

可见三次握手才能让双方都确认自己和对方的发送和接收能力全部正常,这样就可以愉快地进行通信了。

posted @ 2022-05-03 17:52  yyw九歌  阅读(1098)  评论(0)    收藏  举报