У мене на машині прослуховується TCP-сервер ("сервер"), на якому працює Ubuntu 12.04.3 (ядро 3.8.0-31-generic). Він отримує з'єднання від двох різних клієнтських машин. Машина A працює з Ubuntu 12.04.4 (3.11.0-17-generic), а машина B працює з Ubuntu 11.10 (3.0.0-32-сервер).
Якщо часові позначки TCP включені на сервері (sysctl net.ipv4.tcp_timestamps = 1), то іноді пакети SYN з машини A "ігноруються". Використовуючи tcpdump на сервері (в нерозбірливому режимі), я можу побачити, як SYN приходять в порядку і з правильними контрольними сумами - просто немає відповіді - немає SYN / ACK і немає RST. Machine A повторно передає SYN кілька разів, перш ніж відмовитися. Клієнтське програмне забезпечення, що працює на машині A (у цьому випадку wget), негайно повторюється з новим підключенням і досягає успіху, отримуючи миттєвий SYN / ACK.
Машина B не має проблем з тим самим сервером, і трафік виглядає нормально - він використовує ті самі параметри TCP, що і машина A (що я бачу з файлів захоплення). Вимкнення часових позначок TCP на сервері змушує все працювати як слід.
Здається, часові позначки в ігнорованих пакетах SYN є для мене дійсними, тому я не впевнений, чому вони викликають проблеми чи взагалі вони є основною причиною.
Я поставив тут анонімізований pcap https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap . Це було зроблено на сервері (10.76.0.74), показуючи машину A (10.4.0.76), що успішно виконує HTTP GET (пакети від 1 до 10), а потім 1 секунду пізніше, намагаючись знову отримати ту саму URL-адресу (пакети 11 - 17), але замість цього ігнорує свої SYNs. Пакети від 18 до 27 - це ще один успіх.
Я підозрюю, що це схожа проблема, що описана в " Чому сервер не надсилає пакет SYN / ACK у відповідь на пакет SYN ", а відключення часових позначок - це рішення, яке я хотів би зрозуміти, що відбувається. Це просто помилка?
Не працює локальний брандмауер. Сервер обробляє досить багато TCP-підключень (приблизно 32K за один раз), але має багато вільної пам'яті / процесора. На момент випробування, показаного на pcap, не було інших з'єднань TCP між машиною A і сервером. Немає ознак того, що черга прийому серверних додатків раптово заповнюється (крім того, це повинно впливати на обох клієнтів, я б вважав). Оскільки пакети виглядають нормально у пакеті, зробленому на сервері, схоже, що мережевий пристрій, що втручається, зламає речі.
Я спочатку розміщував це на форумах ubuntu, але, з огляду на це, це може бути більш підходящим місцем. Сподіваючись на позику підказки.