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

MTU, DSL-маршрутизатор и задержка TCP

Я обнаружил, что проблема с подключением TCP прерывается. Проблема возникает, когда я пытаюсь скопировать данные с удаленной системы из моей домашней сети. Моя домашняя сеть подключена к Интернету через PPPoE (ADSL +), и после работы в моей домашней сети все работает отлично. Маршрутизатор ADSL имеет MTU, равное 1492, но с этой настройкой scp из удаленной системы не работает - глохнет! Когда я меняю MTU на своем маршрутизаторе на 1500, этот scp работает отлично, но доступ в Интернет из моей домашней сети очень медленный для большинства сайтов www, даже локальных. Просто интересно, где проблема - мой интернет-провайдер блокирует ICMP и т. Д.? Спасибо!

Некоторые веб-серверы, особенно некоторые из распространенных CDN, таких как Akamai, Amazon и т. Д., По-видимому, блокируют ICMP-трафик по умолчанию (что, очевидно, очень плохая идея).

Сначала я подозревал неправильную конфигурацию у своего провайдера, но я проверил это (я отправил несколько больших пакетов с интернет-хоста на мой DSL-маршрутизатор, и я получил пакеты «ICMP fragmentation required» от маршрутизаторов непосредственно перед 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, но я никогда не пробовал этого.

PPPoE требует 8 байтов данных инкапсуляции / заголовка, поэтому вы можете работать только с 1492-байтовым MTU в Ethernet. Но обычно такие вещи решаются путем согласования MTU пути.

Если кто-то блокирует ICMP, согласование MTU пути не будет работать.

У вас есть варианты: избавиться от PPPoE или изменить MTU в удаленной системе, чтобы справиться с вашим полуразрывным соединением. И да, я понимаю, что оба они не идеальны.