传入的TCP SYNs可能性

这可能是一个普遍的TCP问题。

我可以在ESTABLISHED连接或TIME-WAIT状态的连接上接收TCP SYN数据包吗?

这可能吗?

ESTABLISHED TCP连接上收到的SYN不应该发生。 这可能是一个延迟的数据包,这是安全的,可以安静地放下。

如果连接丢失并且在客户端而不是在服务器上,或者如果客户端重新启动,则可能以ESTABLISHED状态的服务器和处于CLOSED状态的客户端结束。 尝试在这种情况下打开一个新的连接会导致在ESTABLISHED状态收到一个SYN数据包。 希望的结果是,旧的连接closures,并打开一个新的。

达到预期结果的方式如下:

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

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

既不… SYN只在连接第一次build立(三次握手)或数据包被破坏时使用。

基本上:

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

会话stream以两个主机发送的ACK分组表示它们收到对方的分组。

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