简述三次握手四次挥手
三次握手
- 客户端向服务端发起连接询问
- 服务端回应客户端可连接
- 客户端回应服务端收到可连接的回应,至此建立连接
为什么不是两次?
根本原因是无法确认客户端的 接收能力。
如果是两次,客户端第一次发起连接询问,由于网络原因滞留在了网络中,迟迟没有到达服务端,此时 tcp
以为丢包了,于是重发,两次握手建立了连接,传输数据后关闭连接。
但是此时滞留网络中的第一次询问到达了服务端,由于是两次握手,此时服务端没有确认客户端的接受能力,就默认建立了连接,但是客户端此时早已断开了连接,从而导致服务端连接资源的浪费,所以至少需要 三次握手
四次挥手
- 客户端向服务端发起断开连接请求
- 服务端回应客户端,已收到断开请求,但并未确认可以断开连接,此时服务端可能仍有数据向客户端发送
- 服务端数据发完,服务端向客户端发送确认可以断开连接
- 客户端回应服务端确认断开连接
为什么不是三次?
如果将第 2
和第 3
步合并,此时长时间的延迟会导致客户端误以为服务端没有收到第 1
步的断开请求,从而导致客户端不断重发第 1
步。