三次握手中每一次没收到报文会发生什么情况?

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