Как узнать, какой MTU используется в Windows XP

У меня очень странная проблема, когда я случайно получаю ошибки «Соединение с сервером с ошибкой» при попытке доступа к веб-страницам (ошибка HTTP 12031 в соответствии с сетевым диагностическим инструментом Windows) – это происходит независимо от того, будет ли веб-страница Я пытаюсь получить доступ к внешнему интернету или даже если это локальный экземпляр Apache, запущенный на localhost. Он затрагивает все компьютеры нашей локальной сети (Ethernet, а не беспроводной), все из которых работают под управлением Windows XP.

Мне было предложено, что это может быть связано с MTU, используемым для сетевого трафика. Если я проведу Ping Test, чтобы узнать самый большой пакет, который может пройти через нерасширенный, я могу выполнить ping localhost с пакетом из 1492 байта (+28 байт для заголовка?), И я могу ping наш маршрутизатор с пакетом из 1462 байт (Это 1490 байт, когда вы включаете 28-байтовый заголовок). Если я попытаюсь пинговать что-то снаружи, как Google, я не могу получить ничего больше, чем 1430 (что составляет 1458 с заголовком).

Я попытался выполнить различные команды инструкций по обновлению реестра Windows XP с помощью этого параметра MTU, обновив HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{AdapterID}\MTU . Я не пробовал никаких альтернативных значений: наиболее очевидное правильное значение кажется 1490, но я также пробовал 1462, 1458, 1430 и т. Д. И т. Д. Когда я перезагружаю компьютер, чтобы вносить изменения, это Кажется, работает в течение нескольких минут (трудно сказать наверняка, поскольку он всегда случайный, а не последовательный), но он никогда не длится долго.

Первоначально, когда я пытался использовать 1430 в качестве значения, после нескольких минут работы, результаты теста Ping уменьшались бы на 28 байт – внезапно я обнаружил, что могу получить только пакет из 1402 байтов в Google. Если я обновил параметр реестра MTU до 1402, когда я перезагрузился и подождал несколько минут, тогда это было бы 1374, затем 1346 и т. Д. И т. Д. Другие компьютеры в сети остались незатронутыми (все еще в 1430) и удалением настройки MTU Из реестра будет восстанавливать нормальные вещи (и все еще не работает).

Самое сложное в диагностировании всего этого заключается в том, что очень сложно сказать, что я даже играю с правильным параметром реестра. Таким образом, в самом простом случае, мой вопрос будет следующим: Как я могу узнать, какие настройки MTU Windows пытаются использовать?

Кроме того, если у кого-нибудь есть идеи, как сказать, почему MTU продолжает снижаться на 28, это тоже было бы полезно (например, есть ли файл журнала Windows где-нибудь, где он будет записывать что-то в тот момент, когда значение изменяется?)

Наконец, если кто-нибудь может сказать мне окончательно, как сказать, какие настройки MTU я должен использовать, это было бы здорово!

5 Solutions collect form web for “Как узнать, какой MTU используется в Windows XP”

Для 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 (MTU) в Vista
  • Настройка MTU в Windows Vista
  • Изменение настроек MTU Справка!
  • KB283165 – Как изменить размер PPPoE MTU в 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. 

Пакет должен быть фрагментирован, но флаг Do not Fragment установлен.

Если где-нибудь вдоль линии пакет должен быть фрагментирован, сеть фактически отправляет ICMP-пакет, сообщающий вам, что произошла фрагментация. Ваша машина получает этот ICMP-пакет, ему сообщается, что такое самый большой размер, и должен прекратить отправлять пакеты слишком большими. К сожалению, большинство брандмауэров блокируют эти ICMP-пакеты «Path MTU discovery», поэтому ваша машина никогда не понимает, что пакеты фрагментированы (или, что еще хуже: отброшены, потому что они не могут быть фрагментированы).

Вот почему веб-сервер не работает. Вы можете получить начальные малые (<1280 байт) ответы, но большие пакеты не могут пройти. А брандмауэры веб-сервера неправильно сконфигурированы, блокируя пакеты ICMP. Таким образом, веб-сервер не понимает, что вы не получили пакет.

Фрагментация пакетов не разрешена в IPv6, каждый должен (правильно) разрешить ICMP-пакеты обнаружения mtu.

@ian Я не уверен, что netsh самом деле показывает используемый MTU. На моей машине Windows XP Pro SP3 я выполнил netsh interface ip show interface и он сообщил значение MTU для соответствующего интерфейса как 1500 . Затем я добавил следующие ключи реестра:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnablePMTUDiscovery value: 0 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{ID}\MTU value: various (eg 1200) 

Microsoft заявляет, что установка EnablePMTUDiscovery в 0 устанавливает MTU в 576.

Установка записи реестра MTU устанавливает MTU вручную. Я попробовал несколько значений для записи MTU (каждый раз перезагружается).

В обоих случаях – добавление первой записи, затем вторая запись – netsh прежнему сообщала MTU как 1500. Тестирование с помощью ping подтвердило (или, по крайней мере, предложило), что значение MTU, настроенное в реестре, фактически используется.

Кроме того, когда я впервые попробовал это на своей машине, служба маршрутизации и удаленного доступа была отключена, поэтому я не смог запустить ее с помощью ваших инструкций. Я включил его, выбрав «Панель управления»> «Инструменты администрирования»> «Управление компьютером»> «Службы и приложения»> «Службы». Я изменил «Тип запуска» с «Отключено» на «Вручную». Затем я запустил службу из этого диалогового окна.

Я также не уверен, что KB283165 обязательно является правильной инструкцией по изменению MTU. Не соответствуют ли эти инструкции только при запуске клиента Windows PPPoE? Если вы подключаетесь к Интернету через маршрутизатор, где маршрутизатор является клиентом PPPoE (как в моем случае), эти инструкции не будут иметь значение, не так ли?

Последующие инструкции, которые привели меня к указанным выше изменениям в реестре, были в KB900926: Рекомендуемые параметры TCP / IP для WAN-соединений с размером MTU менее 576 (методы 2 и 3).


Редактировать by @ian

Похоже, ты прав. Настройте на 1200, но netsh отчеты 1500 .

Введите описание изображения здесь

 >ping -l 1173 -f obsidian Packet needs to be fragmented but DF set. 

Поэтому я предполагаю, что ответ на оригинальный вопрос заключается в том, что в Windows XP вы должны использовать пробную ошибку с флажком Do not fragment, чтобы найти самый большой пакет, который вы можете отправить. Тогда у вас есть MTU.

См. AdapterWatch :

AdapterWatch отображает полезную информацию о ваших сетевых адаптерах: IP-адреса, аппаратный адрес, WINS-серверы, DNS-серверы, значение MTU, количество принятых или отправленных байтов, текущую скорость передачи и т. Д. Кроме того, он отображает общую статистику TCP / IP / UDP / ICMP для вашего локального компьютера.

Microsoft KB314496: размер MTU по умолчанию для разных сетевых топологий .
Вы не должны пытаться играть с настройкой MTU в обычных сетевых настройках.

Здесь есть ссылка на код VB .
Существует также инструмент под названием DrTCP :

Alt text


В реестре,

  • Перейти к HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards
  • Откройте адаптер, который вас интересует.
  • Скопируйте строку ServiceName
  • Найдите эту строку в HKLM\System ; Вы будете соответствовать ключу NetCfgInstanceId
  • Чуть выше будет ключ MaxFrameSize (мои шоу 1514)

Существует также способ изменить это с помощью команды netsh .

Также проверьте конфигурацию пути MTU Discovery .

Вы можете найти MTU с помощью ping с пробным и ошибочным подходом:

 ping <address> -f -l nnnn 

Ping :

-f: Указывает, что сообщения Echo Request отправляются с флагом Do not Fragment в заголовке IP, установленном в 1. Сообщение Echo Request не может быть фрагментировано маршрутизаторами на пути к получателю. Этот параметр полезен для устранения неполадок, связанных с проблемой максимальной пропускной способности (PMTU).

-l Размер: указывает длину в байтах поля данных в отправляемых сообщениях эхо-запроса. Значение по умолчанию – 32. Максимальный размер составляет 65 527.

Вы получите сообщение «Packet необходимо разделить, но DF set», когда длина слишком велика.

  • Как отключить копирование текстового стиля в Windows XP?
  • Как изменить представление файла по умолчанию для Windows XP
  • «Ошибка чтения диска» при загрузке образа диска XP в VirtualBox
  • Контрольные суммы ISO Microsoft Windows
  • Попытка настроить домашний сервер, но не в состоянии настроить IP-пересылку
  • Почему приложение висит
  • Autohotkey ... изменение скорости указателя мыши / тачпада?
  • Где я должен хранить специальные настройки приложения?
  • Повреждение провайдера IE8 продолжает заставлять меня Bing.com?
  • Невозможно увидеть мягко закодированные субтитры файла MP4
  • Часы Windows XP установлены неправильно после возобновления сна
  • Давайте будем гением компьютера.