网络TCP建立连接为什么需要三次握手而结束要四次

网络TCP建立连接为什么需要三次握手而结束要四次
A是客户端,B是服务器。

  • 三次握手
  1. 第一个数据报只有同步位SYN

  2. 第二个数据报有同步位SYN和确认位ACK

  3. 第三个数据报只有确认位ACK

    前两个数据报应该没有疑问,但是为什么会有第三个数据报呢?主要是为了防止“已失效的连接请求报文段”。考虑这样一种情况,A发送的第一个连接请求数据报在某个网络结点滞留了,因此A发送第二个连接请求数据报,然后正常释放连接。但是滞留的报文段最后又再次到达了B,这时B发送确认数据报,如果不需要第三个数据报,B就认为连接已经建立了,但是A并没有发送建立连接的请求,因此对B的请求不予理睬。但是B却以为新的运输连接已经建立了,并一直等待A发来的数据。B的许多资源就这样白白浪费了。

  • 四次挥手
  1. 第一个数据有只有FIN位

  2. 第二个数据报只有ACK位

  3. 第三个数据报有FIN位和确认位

  4. 第四个数据报只有ACK

    其实TCP可靠传输的实现,还是基于滑动窗口机制,对于A发送的数据报,B都会再发送给A一个确认的数据报,即数据报总会是成对出现的。B发送第二个数据报之后,A到B这个方向的连接就释放了,A就不能向B发送数据报了,但是A可以接收数据报。B把要发送的数据发送完之后,发送第三个带FIN位的数据报,而且第三个数据报和第四个数据报一定是要成对的。因为如果只发送第三个数据报,B就认为连接释放了,第三个数据报如果丢包了,A就会一直保持接听的状态,但是B不会再发送FIN了,所以A就会一直阻塞下去。只有B接收了A发送的第四个数据报,才会认为A收到了第三个数据报,此时结束LAST-ACK阶段。同样的,A也会有TIME-WAIT这个阶段,来确保B收到第四个数据报。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容