我正在UDP的基础上研究一个面向连接的协议(只是为了学习)。比如TCP使用的三方握手很简单。
然而,这些包中的任何一个都可能丢失。TCP如何从初始化阶段的错误中恢复?如果第1步从未发生过怎么办?重新发送SYN就可以了,但是如果客户端永远收不到SYN+ACK怎么办,那么要么是SYN+ACK丢失了,要么是第一个SYN丢失了。如果最后一个ACK一直没有成功,服务器是不是过一段时间就应该认为一切正常了呢?这么多出错的可能性 :o
相当简单:如果发送方没有收到ACK,就会再次发送同一个数据包。这将进行多次,一段时间后没有成功,发送方就会放弃,认为它坏了。对SYN的ACK、对数据的ACK或对FIN的ACK都是如此。