尽pipe接收到ACK,TCP连接仍处于SYN_RECV状态,Linux 2.6.18,embedded式ARM

即使所有其他协议(telnet / HTTP / FTP)正常工作,我的客户端也无法连接到我的协议端口(TCP),但出现了一些networking故障。

netstat显示我的服务器正在侦听,并在服务器上的tcpdump显示所有3个数据包交换:

18:29:16.578964 IP 10.9.59.10.3355> 10.9.43.131.5084:S 2602965897:2602965897(0)win 65535 <mss 1460,nop,nop,sackOK>

18:29:16.579107 IP 10.9.43.131.5084> 10.9.59.10.3355:S 3464857909:3464857909(0)ack 2602965898 win 5840 <mss 1460,nop,nop,sackOK>

18:29:16.579284 IP 10.9.59.10.3355> 10.9.43.131.5084:。 ack 1赢65535

但不知何故,netstat -t显示仍然在SYN_RECV中的连接,就好像TCP状态机看不到ack。 我必须重新启动我的服务器才能使其工作。

syncookie没有启用,我知道从客户端代码行为和tcpdump没有SYN泛滥。

非常感谢。

如果侦听器在套接字上设置了DEFER_ACCEPT选项,并且尚未准备好接受连接,则会发生这种情况。

连接处于SYN_RECV状态,因为内核已经收到一个处于LISTENING模式的端口的SYN数据包,但是另一端没有回应ACK。

通过运行服务器上的捕获来检查服务器是否收到ACK。 捕获是在客户端还是在服务器上进行的?