
У меня домашняя сеть с двумя маршрутизаторами, один за другим. Порт WAN внешнего маршрутизатора — это соединение VDSL2 PPPoE с реальным IP-адресом и размером MTU 1492. Порт WAN внутреннего маршрутизатора назначается через DHCP как просто еще один клиент в сети LAN внешнего маршрутизатора. Значение MTU по умолчанию для него было 1500. Я изменил его на 1492, чтобы оно соответствовало внешнему маршрутизатору.
Теперь я задаюсь вопросом, имеет ли смысл еще больше уменьшать размер MTU для внутренней сети. Сделает ли это внутреннюю сеть более надежной в этом сценарии двойного NAT?
решение1
NAT просто изменяет IP-адреса/порты в пакетах, он не включает в пакет никакой дополнительной информации (заголовки и т. д.). Поэтому он никак не уменьшает MTU, и иметь тот же MTU вполне нормально.
решение2
В то время как NAT не увеличивает размер пакетов (или, точнее, уменьшает максимальный размер полезной нагрузки на пакет), PPoE и другие протоколы туннелирования часто это делают.
Однако большинство современных операционных систем реализовалиПуть обнаружения MTU, изложенный вRFC1191, который, в оптимальном варианте, автоматически адаптирует исходящие пакеты к наименьшему MTU любого из соединений между отправляющим хостом и пунктом назначения. Он делает это, устанавливая DF bit
(Don't Fragment) в больших исходящих пакетах и ищет ошибку ICMP Fragmentation Needed
.
В MacOS и других Unix-подобных операционных системах утилита ping
имеет несколько переключателей, которые могут устанавливать DF bit
и устанавливать размер полезной нагрузки, и даже охватывать диапазон размеров, эффективно определяя MTU между исходным хостом и местом назначения. В отправляемых данных имеется 8 байт служебных данных ICMP Echo Request
ping
, а в IP-пакете — 20 байт служебных данных, что делает максимальную полезную нагрузку 1472 для пакета ping с установленным DF bit
на интерфейсе MTU 1500 байт.
Вы можете установить MTU ниже, чтобы оптимизировать, в какой-то очень небольшой степени, этот конкретный путь, в обмен на немного меньший оптимальный размер пакета длякаждый второйпоток пакетов, в котором участвует хост.
Поэтому, если у вас нет проблем с задержками передачи файлов, лучше всего позволить операционной системе автоматически управлять MTU.
[nevin-mac-mini:~] nevin% ping -c 1 -D -s 1472 192.168.2.1 PING 192.168.2.1 (192.168.2.1): 1472 байта данных 1480 байт из 192.168.2.1: icmp_seq=0 ttl=64 время=0,667 мс --- 192.168.2.1 статистика пинга --- 1 пакет передан, 1 пакет получен, 0.0% потерь пакетов мин/средн/макс/стдотв = 0,667/0,667/0,667/0,000 мс [nevin-mac-mini:~] nevin% ping -c 1 -D -s 1473 192.168.2.1 PING 192.168.2.1 (192.168.2.1): 1473 байта данных ping: sendto: Сообщение слишком длинное --- 192.168.2.1 статистика пинга --- 1 пакет передан, 0 пакетов получено, 100,0% потерянных пакетов