三向握手错误

Three way handshake with errors

我正在开发一个基于 UDP 的面向连接的协议(仅供学习)。例如TCP使用的三向握手很简单:

  1. 客户端发送SYN
  2. 服务器发送SYN+ACK
  3. 客户端发送ACK

但是,这些包中的任何一个都可能丢失。 TCP如何从初始化阶段的错误中恢复?如果第 1 步永远不会发生会怎样?只需重新发送 SYN,但如果客户端从未收到 SYN + ACK,那么要么 SYN + ACK 丢失,要么第一个 SYN 丢失。如果最后一个 ACK​​ 没有成功怎么办,服务器是否应该在一段时间后假设一切正常?错误的可能性有很多 :o

这很简单:如果发送方没有收到 ACK,它将再次发送相同的数据包。这将多次完成,一段时间后没有成功,发件人将放弃并认为它已损坏。对于 SYN 的 ACK、数据的 ACK 或 FIN 的 ACK 都是如此。