这可能是一个常见的 TCP 问题。
我可以SYN
在ESTABLISHED
连接上或状态下接收 TCP 数据包吗TIME-WAIT
?
这可能吗?
答案1
SYN
TCP 连接上不应该出现接收数据包的ESTABLISHED
情况。这可能是一个延迟的数据包,可以安全地将其悄悄丢弃。
如果连接丢失且在客户端而非服务器上超时,或者客户端重新启动,则可能最终导致服务器处于ESTABLISHED
状态而客户端处于状态。在这种情况下尝试打开新连接会导致在状态中收到数据包。理想的结果是关闭旧连接并打开新连接。CLOSED
SYN
ESTABLISHED
实现这一预期结果的方法如下:
- 客户端发送一个
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
数据包响应时,套接字被释放。