TCP为什么需要3次握手与4次挥手

1.为什么需要“三次握手”
1.TCP是一个双向连接
2.为了防止已失效的连接请求报文段突然又传到了服务端,因而产生错误。
2.为什么需要“四次挥手”
问题TCP四次挥手中的第二次、第三次挥手,能否也能合为一次呢?


TCP为什么需要3次握手与4次挥手_第1张图片
image.png

答案是否定的。将TCP四次挥手中的第二次、第三次挥手,合为一次。也就是将CLOSE_WAIT状态的停留时间变为0。然而,B之所以存在CLOSE_WAIT状态,是因为B可能还存在着需要发送给A但是未发送的数据,如果存在着这些数据,那么这个状态的时间,就是用来发送这些数据的,所以,TCP四次挥手中的第二次、第三次挥手无法合并为一次。所以,也就无法实现“TCP三次挥手”。

正确如下:
TCP为什么需要3次握手与4次挥手_第2张图片
image.png

(1).第一次挥手
当主动方发送断开连接的请求(即FIN)给被动方,仅仅代表主动方不会再发送数据报,但主动方仍然可以接收数据报文。
(2)第二次挥手 被动方此时有可能还有相应的数据报文需要发送,因此需要先发送ACK报文,告知主动方“我知道你想断开连接的请求了”。这样主动方便不会因为没有收到应答而继续发送断开连接的请求(即FIN报文)。 (3)第三次挥手 被动方在处理完数据报文后,便发送给主动方FIN报文;这样可以保证数据通信正常可靠地完成。发送完FIN报文后,被动方进入LAST_ACK阶段(超时等待)。 (4)第四挥手 如果主动方及时发送ACK报文进行连接中断的确认,这时被动方就直接释放连接,进入可用状态。
连接释放的时候,实际上是其中一方,如A提出了释放请求,B收到后进行了报文确认,那么A到B的连接就释放了,这个时候,B还是可以向A发送数据,而且A会直接接收,到了B数据发送完了,B再向A发送请求释放的请求,B进入超时等待阶段,如果A及时发送连接中断确认,那么B就释放了B到A的连接,如果没有收到,超过一段时间,自动释放。

参考

TCP四次挥手简介

你可能感兴趣的:(TCP为什么需要3次握手与4次挥手)