在收到三方握手确认后立即重置TCP

在收到三方握手确认后立即重置TCP,tcp,reset,Tcp,Reset,我有一个具有多个客户端的服务器。模拟网络处于严重拥塞状态。我发现服务器在收到三方握手的ACK段后重置了一些TCP连接。但当网络处于良好状态时,这种情况不会发生 我发现三方握手的ACK比SYN-ACK晚3.5秒。 这是因为三方握手SYN-ACK超时吗?如果SYN-ACK超时,为什么不重新发送SYN-ACK 谢谢您的建议。这看起来与 同步饼干 当Linux主机接收到过多的SYN流量时,它会激活SYN cookies机制 启用SYN Cookie时,服务器会通过发出SYN-ACK段来响应SYN,该段包

我有一个具有多个客户端的服务器。模拟网络处于严重拥塞状态。我发现服务器在收到三方握手的ACK段后重置了一些TCP连接。但当网络处于良好状态时,这种情况不会发生

我发现三方握手的ACK比SYN-ACK晚3.5秒。 这是因为三方握手SYN-ACK超时吗?如果SYN-ACK超时,为什么不重新发送SYN-ACK


谢谢您的建议。

这看起来与

同步饼干 当Linux主机接收到过多的SYN流量时,它会激活
SYN cookies
机制

启用SYN Cookie时,服务器会通过发出SYN-ACK段来响应SYN,该段包含TCP
sequence
字段中编码的特定数据。在该字段中,它对时间戳、MSS和两个端点(本地和远程IP和端口)的加密哈希加上时间戳进行编码

这样做的目的是,服务器此时不必存储关于连接的任何信息,只需发送答案并将其忘掉即可

然后,当客户机用其ACK应答时,服务器检查ACK字段中的散列(客户机的ACK是服务器的序列)。如果正确,它将创建与字段中存储的数据的连接


SYN cookies解释了服务器在SYN-ACK数据包超时时不重新发送SYN-ACK数据包的原因

但是,为什么在收到ACK后重置

可能客户端(或服务器)位于修改端口的NAT之后,NAT也会变得拥挤,因此它无法将最终ACK链接到以前的SYN,并分配新的源端口。当服务器接收到它时,它会重置连接(无论是否启用SYN Cookie)


或者,服务器进程接收连接的速度与它们到达的速度不同,内核队列已满,新的队列将被丢弃。

谢谢。禁用syn_cookies后,服务器接受所有连接。我猜重置的原因是三方握手超时的第三次确认。下面的链接说超时时间是4秒。但在我的系统中,可能是3秒左右。