在TCP三向握手中,将发送3个段(SYN,SYN ACK,ACK)。如果第三段(ACK)丢失了怎么办?发送者是要重新发送网段还是放弃建立连接?两位主持人如何知道该段丢失了?
最佳答案
TCP在所有数据包中都有一个序列号。因此,很容易知道数据包是否丢失。如果主机未在数据包上收到ACK,则将其重新发送。
即使在大多数情况下,即使该ACK丢失了,也不会因为非常简单的原因而重新发送。在ACK之后,打开TCP协议(protocol)的主机可能会开始发送数据。与所有TCP数据包一样,该数据将具有ACK编号,因此接收方将以这种方式获得ACK。因此,SYN-ACK的发送方应该合理地关心它没有得到ACK,因为在以下程序包中它得到了“隐式” ACK。
仅在根本没有接收到任何数据的情况下,才需要重新发送SYN-ACK。
更新:我在RFC中找到了确切指定此位置的位置:
换句话说,如果ACK被丢弃但下一个数据包没有被丢弃,那么一切都很好。否则,必须重置连接。这很有意义。
关于tcp - 如果TCP握手段丢失了怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16259774/