网络通信协议TCP/UDP
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:
TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
1,当主机甲确认发送完数据且知道乙已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B.
2,主机乙收到甲发送的FIN,表示收到了,就会发送ACK回复。
3,但这是乙可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到乙数据发送完了,才会发送FIN给主机A.
4,A收到B发来的FIN,知道B的数据也发送完了,回复ACK,A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了
上面介绍了 TCP 协议连接,有连接就有断开,相对于三次连接,断开却需要四次挥手,怎么理解呢?先看下面这个场景:
A:B 啊,我不想玩了。
B:哦,你不想玩了啊,我知道了。
这个时候,还只是 A 不想玩了,也即 A 不会再发送数据,但是 B 能不能在 ACK 的时候,直接关闭呢?当然不可以了,很有可能 A 是发完了最后的数据就准备不玩了,但是 B 还没做完自己的事情,还是可以发送数据的,所以称为半关闭的状态。
这个时候 A 可以选择不再接收数据了,也可以选择最后再接收一段数据,等待 B 也主动关闭。
B:A 啊,好吧,我也不玩了,拜拜。
A:好的,拜拜。
这就是一个完整的关闭连接,在这个关闭的过程中,一共说了四句话,我们也称之为四次挥手。跟建立连接一样,断开时也是用状态来表示,下面是断开的时序
参考地址
https://www.cnblogs.com/jamaler/p/12164921.html