TCP 3次握手 - 多个SYN

时间:2016-02-22 07:55:08

标签: networking tcp

假设主机H1正在寻求与H2建立TCP连接并为第一步三次握手发送SYN。然后H1在超时时没有回复,并且正在向H2发送第二个SYN。

然后,H1会回复这两个SYN。 H1在这种情况下做了什么 - 这两个中的哪一个确认它是握手的第3步,第一个来自H2或第二步的SYN + ACK?两个SYN + ACK具有2个不同的H2初始序列号(ISN)。它们也有不同的ACK-- H1在其两个SYN中发送了2个不同的ISN。

从另一点来看 - 在这种情况下,H2会做什么?所以 - H2接收到SYN并发送SYN + ACK以响应它。过了一会儿,H2从H1收到另一个SYN + ACK。 H2在这种情况下做了什么:

  • 也将SYN + ACK发送到第二个SYN?在这种情况下,H2如何知道哪个SYN(H1的ISN)是这个连接的那个?

  • 忽略第二个SYN。但随后,H2也超时了 - 因为它发送了之前的SYN + ACK,所以没有收到任何回复。

如何在TCP中处理?

TIA

注意:我看过What if a TCP handshake segment is lost?TCP: SYN request receives SYN response instead of SYN-ACKtcpip 3-way handshakeTCP handshake reliability以及其他一些有用的讨论。

// --------------------------------------------- ---

编辑:

答案似乎在于RST标志 - 无论何时对序列#s有疑问,都要重置。参见RFC793的图9。

然而,Q仍然依据以下评论:H1何时出现(图9中的“TCP A”) 用它的新ISN重试连接 - 多长时间和在什么情况下?

2 个答案:

答案 0 :(得分:2)

你的问题毫无意义。从序列号的角度来看,两个SYN都是相同的,并且两者都以相同的方式得到确认。

答案 1 :(得分:2)

图9中的情况发生在发送方已经放弃该连接之后,先前连接尝试的SYN到达时。主机B发送此额外SYN的ACK,主机A看到ACK的序列号错误。然后,主机A通过发送RST来中止连接。