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

时间:2013-04-28 04:59:45

标签: tcp

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

2 个答案:

答案 0 :(得分:25)

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

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

仅在没有接收到数据的情况下才需要重新发送SYN-ACK。

更新:我在RFC中找到了指定的地方:

  

如果我们的SYN已被确认(也许在此   传入段)传入段的优先级必须   如果没有重置,则完全匹配本地优先级   必须发送。

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

答案 1 :(得分:1)

我不是这种特殊情况的专家,但我怀疑会发生什么,客户会认为它已连接但服务器不会。如果客户端尝试向服务器发送数据,服务器将拒绝它并向客户端发送RST数据包,以便重置其“连接”。