传入 TCP SYN 的可能性

传入 TCP SYN 的可能性

这可能是一个常见的 TCP 问题。

我可以SYNESTABLISHED连接上或状态下接收 TCP 数据包吗TIME-WAIT

这可能吗?

答案1

SYNTCP 连接上不应该出现接收数据包的ESTABLISHED情况。这可能是一个延迟的数据包,可以安全地将其悄悄丢弃。

如果连接丢失且在客户端而非服务器上超时,或者客户端重新启动,则可能最终导致服务器处于ESTABLISHED状态而客户端处于状态。在这种情况下尝试打开新连接会导致在状态中收到数据包。理想的结果是关闭旧连接并打开新连接。CLOSEDSYNESTABLISHED

实现这一预期结果的方法如下:

  • 客户端发送一个SYN来创建新的连接。
  • 服务器发送一个ACK用于ESTABLISHED连接的邮件。
  • ACK客户端用一个数据包进行响应RST,导致ESTABLISHED连接消失。
  • 客户端重新传输SYN数据包以创建新的连接。

SYN收到状态的数据包可能TIME_WAIT发生在服务器关闭连接之后,客户端会打开具有相同端口号的新连接。这将导致打开新的连接。

答案2

SYN当首次建立连接(三次握手)或数据包被销毁时才使用。

基本上:

SYN (I want to start a connection) -> ACK/SYN (OK, I want to start a connection too) -> ACK (acknowledged connection, ready for data)

对话流中ACK两台主机都发送了数据包,表明它们彼此都收到了数据包。

最后,FIN被发送到服务器并被TIME_WAIT设置在套接字上。当服务器用FIN数据包响应时,套接字被释放。

相关内容