这可能是一个普遍的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数据包时,套接字被释放。