尽管收到了 ACK,TCP 连接仍停留在 SYN_RECV 状态,Linux 2.6.18,嵌入式,ARM

way*_*nix 4 linux synchronization connection tcp

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

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: . 确认 1 胜 65535

但不知何故 netstat -t 显示连接仍处于 SYN_RECV 状态,就好像 TCP 状态机没有看到 ack 一样。我必须重新启动服务器才能使其正常工作。

syncookie 未启用,并且我从客户端代码行为和 tcpdump 知道不存在 SYN 泛洪。

非常感谢帮助。

Mir*_*ici 5

连接处于 SYN_RECV 状态,因为内核已收到处于 LISTENING 模式的端口的 SYN 数据包,但另一端未回复 ACK。

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