三次握手中每一次没收到报文会发生什么情况?
- 第一次握手服务端未收到SYN报文
- 服务端不会进行任何的动作,
- 而客户端由于一段时间内没有收到服务端发来的确认报文
- 等待一段时间后会重新发送SYN报文,
- 如果仍然没有回应,会重复这个过程,直到发送次数超过最大重传次数限制
- 就会 返回连接建立失败。
- 第二次握手:客户端未收到服务端响应的SYN+ACK报文。
- 客户端会继续重传,直到次数限制
- 而服务端此时会阻塞SYN_RCVD 状态,等待客户端的最后 ACK。
- 第三次握手:服务端未收到客户端发来的ACK报文
- 服务端采用(类似客户端的)超时重传机制,
- 如果重试次数超过限制,则accept()调用返回-1,服务端建立连接失败。
- 而此时客户端认为自己已经建立连接成功,
- 因此开始向服务端发送数据,
- 但是此时服务端的accept()系统调用已经返回,此时不在监听状态,
- 因此服务端接收到客户端发送来的数据时会发送RST报文给客户端,消除客户端单方面建立连接的状态。

浙公网安备 33010602011771号