Для 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
. Для этого вы можете:
Протестировано с Windows XP с пакетом обновления 3
Смотрите также
Краткое обсуждение того, что такое 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, вы можете указать, сколько дополнительных данных полезной нагрузки вы хотите включить. В этом случае, если вы включите все 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.