Назад | Перейти на главную страницу

TCP-соединение застряло в состоянии SYN_RECV, несмотря на получение ACK, Linux 2.6.18, встроенный, ARM

Мой клиент не может подключиться к моему порту протокола (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. Мне нужно перезагрузить сервер, чтобы он заработал.

syncookie не включен, и я знаю по поведению клиентского кода и tcpdump, что нет SYN-лавинной рассылки.

Помощь очень ценится.

Соединение находится в состоянии SYN_RECV, потому что ядро ​​получило пакет SYN для порта, который находится в режиме LISTENING, но другой конец не ответил ACK.

Проверьте, получен ли сервер ACK, запустив захват на сервере. Захват осуществляется на клиенте или на сервере?

Это может произойти, если слушатель установил опцию DEFER_ACCEPT в сокете и еще не готов принять соединение.