如果TCP握手段丢失怎么办?

ZHO*_*HOU 23 tcp

在TCP 3次握手中,将发送3个段(SYN,SYN ACK,ACK).如果第三段(ACK)丢失怎么办?发件人是要重新发送段还是放弃建立连接?那两个主机如何知道该段丢失了?

Len*_*bro 27

TCP在所有数据包中都有一个序列号.因此,很容易知道数据包是否丢失.如果主机没有在数据包上获得ACK,则只需重新发送.

但在大多数情况下,即使丢失了ACK,也不会因为一个非常简单的原因而重新发送.在ACK之后,打开TCP协议的主机可能开始发送数据.与所有TCP数据包一样,该数据将具有ACK编号,因此接收方将以这种方式获得ACK.因此,SYN-ACK的发送方应合理地不关心它没有得到ACK,因为它在下面的包中得到"隐式"ACK.

只有在根本没有接收到数据时才需要重新发送SYN-ACK.

更新:我发现RFC中的地方指定了这个:

如果我们的SYN已被确认(可能在此传入段中),则传入段的优先级必须与本地优先级完全匹配,如果不是,则必须发送重置.

换句话说,如果ACK被丢弃但下一个数据包没有丢弃,那么一切都很好.否则,必须重置连接.这很有道理.

  • 确认ACK将导致无法传输实际数据. (11认同)
  • 然而,握手的最终ACK本身并不是确认的. (2认同)