暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为什么tcp建立连接需要三次握手,断开连接需要四次挥手

陈晨辰呀 2021-06-14
932

  • 三次握手

  • 四次挥手

三次握手

三次握手的目的,是为了防止A端已经失效的连接请求突然又传到B端,被误认为是A端再次发出的一个新的连接请求,如果B端这时又再次向A发出确认报文,表示同意建立连接,就会产生错误。

第一次是A端向B端发送请求,如果是只有一次握手的话,A端不知道B端是不是收到了这个请求。

第二次是B端确认收到A端请求,如果只有两次的话,B端不确定A端是否收到了确认消息,这个确认消息有可能会在半路丢了。

第三次是A端确认收到了B的确认消息,A和B双方都是通的,然后AB就可以建立连接相互通信了。


四次挥手

四次挥手的本质原因是tcp是全双工的,通信是双向的, A到B是一个通道,B到A又是另一个通道。

A端确认没有数据发送后,发出结束报文,此时B端返回确认后,B端也不会接收A端数据。

但是此时B端可能还有数据没有传输完,A端还是可以接收数据。

只有当B端数据发送完之后,才能发出结束报文,并且确认A端接收到的时候,两边才会真正的断开连接,双方的读写分开。


四次挥手释放连接时,等待2MSL的意义?

第一,为了保证A发送的最后一个ACK报文段能够到达B。

这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK 报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。

第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中。

A在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。

参考:

tcp建立连接为什么需要三次握手:https://www.jianshu.com/p/e7f45779008a

TCP三次握手四次挥手详解:https://www.cnblogs.com/zmlctt/articles/3690998.html


文章转载自陈晨辰呀,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论