Для Windows 7, Windows Vista и Windows XP MTU для различных интерфейсов доступен из самой Windows с использованием netsh
.
Windows 7, Windows Vista
Чтобы отобразить текущий MTU в Windows 7 или Windows Vista, из командной строки:
C:\Users\Ian>netsh interface ipv6 show subinterfaces MTU MediaSenseState Bytes In Bytes Out Interface ---------- --------------- --------- --------- ------------- 1280 1 24321220 6455865 Local Area Connection 4294967295 1 0 1060111 Loopback Pseudo-Interface 1 1280 5 0 0 isatap.newland.com 1280 5 0 0 6TO4 Adapter
И для интерфейсов IPv4:
C:\Users\Ian>netsh interface ipv4 show subinterfaces MTU MediaSenseState Bytes In Bytes Out Interface ---------- --------------- --------- --------- ------------- 1500 1 146289608 29200474 Local Area Connection 4294967295 1 0 54933 Loopback Pseudo-Interface 1
Примечание. В этом примере мой интерфейс IPv6 для локального подключения имеет такой низкий MTU (1280), потому что я использую туннельный сервис для получения подключения IPv6 .
Вы также можете изменить свой MTU (Windows 7, Windows Vista). Из командной строки с повышенными правами:
>netsh interface ipv4 set subinterface "Local Area Connection" mtu=1492 store=persistent Ok.
Протестировано с Windows 7 с пакетом обновления 1
Windows XP
netsh
Синтаксис для Windows XP немного отличается:
C:\Users\Ian>netsh interface ip show interface Index: 1 User-friendly Name: Loopback Type: Loopback MTU: 32767 Physical Address: Index: 2 User-friendly Name: Local Area Connection Type: Etherenet MTU: 1500 Physical Address: 00-03-FF-D9-28-B7
Примечание: Windows XP требует, чтобы служба маршрутизации и удаленного доступа была запущена, прежде чем вы сможете увидеть подробности об интерфейсе (включая MTU):
C:\Users\Ian>net start remoteaccesss
Windows XP не позволяет изменить настройки MTU изнутри netsh
. Для этого вы можете:
- следуйте инструкциям в KB283165 - Как изменить размер MTU PPPoE в Windows XP
- использовать Dr. TCP ( Примечание: только для Windows 2000 / XP)
Протестировано с Windows XP с пакетом обновления 3
Смотрите также
- Настройте размер TCPIP Max Transfer Unit (MTU) в Vista
- Установка MTU в Windows Vista
- Изменить настройки MTU Помогите!
- KB283165 - Как изменить размер MTU PPPoE в Windows XP
- DSLReports - DrTCP
Краткое обсуждение того, что такое MTU, откуда берутся 28 байтов.
Ваша сетевая карта (Ethernet) имеет максимальный размер пакета 1,500 bytes
:
+---------+ | 1500 | | byte | | payload | | | | | | | +---------+
Часть IP TCP / IP требует 20-байтовый заголовок (12 байтов флагов, 4 байта для исходного IP-адреса, 4 байта для конечного IP-адреса). Это оставляет меньше места в пакете:
+------------------------+ | 12 bytes control flags | \ | 4 byte from address | |- IP header: 20 bytes | 4 byte to address | / |------------------------| | 1480 byte payload | | | | | | | +------------------------+
Теперь пакет ICMP (ping) имеет 8-байтовый заголовок (1 байт type
, 1 байт code
, 2 байта checksum
, 4 байта дополнительных данных):
+------------------------+ | 12 bytes control flags | \ | 4 byte from address | | | 4 byte to address | |- IP and ICMP header: 28 bytes |------------------------| | | 8 byte ICMP header | / |------------------------| | 1472 byte payload | | | | | | | +------------------------+
Вот где «пропущенные» 28 байтов - это размер заголовков, необходимых для отправки пакета ping.
Когда вы отправляете пакет ping, вы можете указать, сколько дополнительных полезных данных вы хотите включить. В этом случае, если вы включите все 1472 байта:
>ping -l 1472 obsidian
Тогда полученный пакет Ethernet будет полон жабрам. Каждый последний байт 1500-байтового пакета будет заполнен:
+------------------------+ | 12 bytes control flags | \ | 4 byte from address | | | 4 byte to address | |- IP and ICMP header: 28 bytes |------------------------| | | 8 byte ICMP header | / |------------------------| |........................| |........................| |. 1472 bytes of junk....| |........................| |........................| |........................| |........................| +------------------------+
Если вы попытаетесь отправить еще один байт
>ping -l 1473 obsidian
сеть должна будет фрагментировать этот 1501-байтовый пакет на несколько пакетов:
Packet 1 of 2 +------------------------+ | 20 bytes control flags | \ | 4 byte from address | | | 4 byte to address | |- IP and ICMP header: 28 bytes |------------------------| | | 8 byte ICMP header | / |------------------------| |........................| |........................| |..1472 bytes of payload.| |........................| |........................| |........................| |........................| +------------------------+ Packet 2 of 2 +------------------------+ | 20 bytes control flags | \ | 4 byte from address | | | 4 byte to address | |- IP and ICMP header: 28 bytes |------------------------| | | 8 byte ICMP header | / |------------------------| |. | | 1 byte of payload | | | | | | | | | | | +------------------------+
Эта фрагментация произойдет за кулисами, в идеале, без вашего ведома.
Но вы можете иметь в виду и сказать сети, что пакет не может быть фрагментирован:
>ping -l 1473 -f obsidian
В -f означает флаг не фрагментировать . Теперь, когда вы пытаетесь отправить пакет, который не помещается в сеть, вы получаете сообщение об ошибке:
>ping -l 1473 -f obsidian Packet needs to be fragmented but DF set.
Пакет должен быть фрагментирован, но флаг « Не фрагментировать» был установлен.
Если где-нибудь вдоль линии пакет должен был быть фрагментирован, сеть фактически отправляет ICMP-пакет, сообщающий вам, что фрагментация произошла. Ваша машина получает этот ICMP-пакет, получает информацию о максимальном размере и должна прекратить посылать слишком большие пакеты. К сожалению, большинство брандмауэров блокируют эти ICMP-пакеты «Path MTU discovery», поэтому ваша машина никогда не осознает, что пакеты фрагментированы (или, что еще хуже, отброшены, потому что их невозможно фрагментировать).
Вот почему веб-сервер не работает. Вы можете получить начальные небольшие (<1280 байт) ответы, но большие пакеты не могут пройти. А межсетевые экраны веб-сервера неправильно настроены, блокируя ICMP-пакеты. Таким образом, веб-сервер не понимает, что вы никогда не получили пакет.
Фрагментация пакетов не разрешена в IPv6, каждый должен (правильно) разрешать пакеты обнаружения ICMP mtu.