首先需要客户端Init状态,服务端LISTEN状态
- 客户端向服务端询问是否可以建立连接(中途可能因为某些原因导致SYN包在网络节点中滞留)
- 服务端接收之后,如果可以建立连接则返回SYN+ACK包
- 客户端接收到SYN+ACK包之后,将ACK包发送给服务端之后,客户端变成ESTABLISHED状态
- 服务端接收到ACK包之后,状态变成ESTABLISHED状态
首先需要客户端Init状态,服务端LISTEN状态
- 客户端向服务端询问是否可以建立连接,发送SYB-1-1包
- SYN-1-1包可能因为某些原因导致在某个网络节点之中阻塞
- 为了建立连接,客户端会重发SYN-1-1包(为了区分,后面叫做SYN-1-2包)
- 服务端接收到SYN-1-2包之后,这次SYN包发送正常,服务端接收之后,发送SYN+ACK包之后就建立连接
- 这个时候在某个阶段阻塞的SYN-1-1包突然恢复,然后服务端接收到SYN-1-1包之后,服务端会认为客户端又发起了一个新的连接
- 就会导致客户端认为和服务端只有一个连接,而服务端认为和客户端有2个连接,最后造成了状态不一致
- 如果在三次握手中,服务端接收不到ACK包,就不会建立连接



