如果服务器收到一个新的 SYN 数据包,它是一个已经建立的连接,它应该怎么做?
我已经看到如果从同一个客户端应用程序收到 2 个 SYN 数据包,服务器端会发生什么?. 那里的示例涵盖了不同的情况:服务器在“正确”SYN 之前接收到重复的先前会话 SYN。在这种情况下,服务器 SYNACK 将错误的会话返回给客户端,然后客户端对错误的会话进行 RST。
答案确实简要提到了这个替代案例,但没有涵盖细节:
如果第 6 行的 SYN 在 RST 之前到达,则在两个方向发送 RST 时可能会发生更复杂的交换。
在那个更复杂的情况下到底发生了什么?服务器是立即回复 RST,还是重新确认现有会话,或者其他什么?
更具体地说,这里发生了什么:
TCP A TCP B
1. CLOSED LISTEN
2. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED
3. SYN-SENT <-- <SEQ=400><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
4. ESTABLISHED --> <SEQ=101><ACK=401><CTL=ACK> --> ESTABLISHED
5. ... <SEQ=200><CTL=SYN> --> ???
???