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