MTU, DSL роутер и остановка TCP
Я обнаружил проблему с остановкой TCP-соединения. Проблема возникает, когда я пытаюсь получить данные из удаленной системы из моей домашней сети. Моя домашняя сеть подключена к Интернету через PPPoE (ADSL+), и все работает идеально, если я работаю из моей домашней сети. Маршрутизатор ADSL имеет MTU, установленный на 1492, но с этой настройкой scp из удаленной системы не работает - срыв! Когда я изменяю MTU на моем маршрутизаторе на 1500, этот scp работает отлично, но доступ в Интернет из моей домашней сети очень медленный для большинства сайтов www - даже локальных. Просто интересно, где существует проблема - мой интернет-провайдер блокирует ICMP и т. Д.? Спасибо!
2 ответа
PPPoE требует 8 байтов данных инкапсуляции / заголовка, поэтому вы можете работать только с 1492-байтовым MTU в Ethernet. Но обычно такого рода вещи сортируются путем согласования пути MTU.
Если кто-то блокирует ICMP, согласование MTU пути не будет работать.
Ваши варианты - избавиться от PPPoE или изменить MTU в удаленной системе, чтобы справиться с вашим разорванным соединением. И да, я понимаю, что оба не идеальны.
Некоторые веб-серверы, особенно некоторые распространенные CDN, такие как Akamai, Amazon и т. Д., По-видимому, блокируют трафик ICMP по умолчанию (что, очевидно, является очень плохой идеей).
Сначала я подозревал неверную конфигурацию у своего провайдера, но я проверил ее (я отправил несколько больших пакетов с интернет-хоста на мой DSL-маршрутизатор и получил пакеты "Требуется фрагментация ICMP" от маршрутизаторов непосредственно перед DSL-соединением).
По-видимому, мой поставщик DSL использовал MSS-фиксацию на своих маршрутизаторах доступа для всех клиентов, но, похоже, они остановились.
Я решил эту проблему с помощью ограничения MSS на моем маршрутизаторе DSL, чтобы теперь он перезаписывал исходящие пакеты SYN таким образом, чтобы ограничить максимальный размер сегмента нисходящей линии связи. Команда для его включения:
iptables -A FORWARD -o ppp0 -p tcp \
--tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Если ваш домашний маршрутизатор не поддерживает iptables, вы, вероятно, могли бы изменить его для работы с исходящими пакетами на локальном хосте, изменив FORWARD на OUTPUT, но я никогда не пробовал этого.