TCP三次握手和四次挥手的原因

下图展示了为什么TCP要三次握手,因为客户必须确认服务器收发正常,同时也要确认自己收发正常。在服务端,服

下图展示了为什么TCP要三次握手,因为客户必须确认服务器收发正常,同时也要确认自己收发正常。在服务端,服务器也必须确认客户端收发正常,同时也要确认自己收发正常,所以需要三次握手。

下图展示了为什么断开连接时要四次挥手的原因。当客户端发送FIN时,服务器回复ACK和FIN不是一起发送。之所以不一起发送是因为当服务器收到FIN时,可能服务器还在发送数据,所以只能先回复ACK表示收到FIN,当服务器数据传输完毕的时候就会再发送FIN。

值得注意的是最后一步当客户端发送ACK N+1之后,客户端会等待一段时间,因为这个ACK可能会丢失,如果服务器没有收到ACK会重发FIN,所以这个时候客户端不能在发送ACK后立即关闭,只有当等待一段时间,一直没有收到重发的FIN才能关闭连接。

顺带附一张TCP四次挥手的网图