Для 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.
Тестовано з пакетом оновлень 1 для Windows 7
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
. Для цього ви можете:
Тестовано з пакетом оновлення 3 для Windows XP
Дивись також
Коротке обговорення того, що таке 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.
Пакет потрібно фрагментувати, але прапор Do not Fragment був встановлений.
Якщо десь уздовж лінії потрібен фрагментарний пакет, мережа насправді надсилає пакет ICMP, який повідомляє вам, що трапилася фрагментація. Ваша машина отримує цей пакет ICMP, повідомляється про те, який був найбільший розмір, і повинен припинити надсилання пакетів занадто великим. На жаль, більшість брандмауерів блокують ці ICMP-пакети "Відкриття Шляху MTU", тому Ваша машина ніколи не усвідомлює, що пакети фрагментовані (або ще гірше: випали, тому що їх не вдалося фрагментувати).
Ось чому веб-сервер не працює. Ви можете отримати початкові невеликі (<1280 байт) відповіді, але більші пакети не можуть пройти. І брандмауери веб-сервера неправильно налаштовані, блокуючи пакети ICMP. Таким чином, веб-сервер не розуміє, що ви ніколи не отримали пакет.
Фрагментація пакетів заборонена в IPv6, кожен повинен (правильно) дозволити пакети виявлення ICMP mtu.