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

Сервер отправляет TCP ACK с неправильным номером после получения SYN

У меня клиент устанавливает новое TCP-соединение, а затем отправляет запрос на сервер в секунду. И клиент, и сервер находятся в одном окне Linux (через интерфейс обратной связи).

Клиент периодически сообщает об ошибке сокета. После поиска сетевых пакетов ошибка, похоже, связана с проблемой TCP:

50123 > 7001 [SYN] Seq=0 Win=32792 Len=0 MSS=16396 SACK_PERM=1 TSval=1326528350 TSecr=0 WS=128 [TCP ACKed lost segment] 7001 > 50123 [ACK] Seq=1 Ack=1834710718 Win=256 Len=0 TSval=1326528350 TSecr=1325798923 SLE=0 SRE=1 50123 > 7001 [RST] Seq=1834710718 Win=0 Len=0

В упомянутых выше сегментах TCP клиент сначала отправляет серверу TCP SYN. В нормальном случае сервер должен вернуть SYN-ACK с номером подтверждения = 1, но в приведенном выше фрагменте сервер возвращает ACK с неправильным номером подтверждения = 1834710718. Поскольку номер подтверждения неверен, клиент RST устанавливает соединение.

Есть идеи по поводу этого дела?