Windows XP'de hangi MTU'nun kullanıldığını nasıl söylerim?


21

Web sayfalarına erişmeye çalışırken rastgele "Sunucuyla bağlantı sıfırlandı" hataları alıyorum (Windows ağ tanılama aracına göre HTTP hatası 12031) - bu, web sayfasının ne olduğuna bakılmaksızın gerçekleşiyor. Erişmeye çalışıyorum harici internette veya localhost'ta çalışan yerel bir Apache örneğinden olsa bile. Hepsi Windows XP çalıştıran yerel ağımızdaki (Ethernet değil kablosuz) tüm bilgisayarları etkiler.

Bana ağ trafiğinde kullanılan MTU ile yapılabileceği önerildi. Ben yaparsanız Ping Testi parçalanmamış gidebilirsiniz büyük paket öğrenmek için, ben 1492 bayt (bir başlık için 28 byte?) Bir paketi ile localhost'u ping ve ben 1462 bayt paketi ile bizim yönlendirici ping olabilir (28 bayt başlığını eklediğinizde 1490 bayttır). Google gibi dışarıda bir şeyler denemeye çalışırsam, 1430'dan daha büyük bir şey elde edemem (bu, başlık ile 1458'dir).

Güncelleştirme, bu MTU ayarıyla Windows XP Kayıt Defterini güncellemek için çeşitli talimat kümelerini izlemeyi denedim HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{AdapterID}\MTU. Alternatif değerlerin sonunu denemedim: en açık olan doğru değer 1490 gibi görünüyor, ancak 1462, 1458, 1430 vb. Gibi şeyleri de denedim. Değişikliğin etkili olması için bilgisayarı yeniden başlattığımda Birkaç dakika çalışıyor gibi görünüyor (tutarlı olmaktan ziyade her zaman rastgele olduğu için kesin olarak söylenmesi zor) ama asla uzun sürmez.

Başlangıçta, bir değer olarak 1430'u denediğimde, birkaç dakika çalıştıktan sonra, Ping Testinin sonuçları 28 bayt azalırdı - birdenbire Google'dan yalnızca 1402 baytlık bir paket alabileceğimi gördüm. MTU kayıt defteri ayarını 1402 olarak güncellersem, yeniden başlatıp birkaç dakika beklediğimde, o zaman 1374, sonra 1346 vb. Olur. Ağdaki diğer bilgisayarlar etkilenmeden kaldı (hala 1430'da) ve MTU ayarını kaldırıyordu kayıt defterinden şeyler normal (ve hala bozuk) geri yükleyecekti.

Tüm bunları teşhis etmekte en zorlandığım şey, doğru kayıt defteri ayarıyla bile oynayıp oynamadığımı söylemenin çok zor olması. Yani en basitinde sorum şu olurdu: Windows'un hangi MTU ayarını kullanmaya çalıştığını nasıl söyleyebilirim?

Ayrıca, MTU'nun neden 28'e düştüğünü neden açıklayacağına dair bir fikri varsa, bu da faydalı olacaktır (örneğin, değerin değiştiği noktada bir şeyi kaydedeceği bir yerde bir Windows günlük dosyası var mı?)

Son olarak, birisi bana hangi MTU ayarını kullanmaya çalışmam gerektiğini nasıl söyleyeceğimi kesin olarak söyleyebilirse, bu harika olur!


FWIW, sonunda problem olan tehlikeli bir telefon hattıydı. Bir telefonu prize taktığımda çevir sesi yoktu.
andygeers

Yanıtlar:


58

Windows 7, Windows Vista ve Windows XP için, çeşitli arayüzler için MTU, Windows tarafından kendi kendine kullanılabilir netsh.

Windows 7, Windows Vista

Geçerli MTU’yu Windows 7 veya Windows Vista’da komut isteminden göstermek için:

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

Ve IPv4 arayüzleri için:

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

Not: Bu örnekte, Yerel Alan Bağlantısı IPv6 arayüzümde böyle düşük bir MTU (1280) var, çünkü IPv6 bağlantısını elde etmek için bir tünel servisi kullanıyorum .

MTU'nuzu da değiştirebilirsiniz (Windows 7, Windows Vista). Bir itibaren yükseltilmiş komut isteminde:

>netsh interface ipv4 set subinterface "Local Area Connection" mtu=1492 store=persistent
Ok.

Windows 7 Service Pack 1 ile test edilmiştir

Windows XP

netshWindows XP için sözdizimi biraz farklıdır:

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

Not: Windows XP, bir arayüzle ilgili detayları görmeden önce Yönlendirme ve Uzaktan Erişim hizmetinin başlatılmasını gerektirir (MTU dahil):

C:\Users\Ian>net start remoteaccesss

Windows XP, MTU ayarını içinden değiştirmek için bir yol sağlamaz netsh. Bunun için şunları yapabilirsiniz:

Windows XP Service Pack 3 ile test edilmiştir

Ayrıca bakınız


MTU'nun ne olduğu, 28 byte'ın nereden geldiği hakkında kısa bir tartışma.

Ağ kartınız (Ethernet) maksimum paket boyutuna sahiptir 1,500 bytes:

+---------+
| 1500    |
| byte    |
| payload |
|         |
|         |
|         |
+---------+

TCP / IP'nin IP kısmı 20 baytlık bir başlık gerektirir (12 bayt bayrak, kaynak IP adresi için 4 bayt, hedef IP adresi için 4 bayt). Bu, pakette daha az yer bırakır:

+------------------------+
| 12 bytes control flags | \
| 4 byte from address    | |- IP header: 20 bytes
| 4 byte to address      | /
|------------------------|
| 1480 byte payload      |
|                        |
|                        |
|                        |
+------------------------+

Şimdi bir ICMP (ping) paketinde 8 baytlık bir başlık var (1 bayt type, 1 bayt code, 2 bayt checksum, 4 bayt ek veri):

+------------------------+
| 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      |
|                        |
|                        |
|                        |
+------------------------+

"Kayıp" 28 baytın olduğu yer - ping paketi göndermek için gereken başlıkların boyutudur.

Bir ping paketi gönderdiğinizde, ne kadar ekstra veri yükü eklemek istediğinizi belirleyebilirsiniz. Bu durumda, 1472 baytın tümünü dahil ederseniz:

>ping -l 1472 obsidian

Daha sonra ortaya çıkan ethernet paketi solungaçlarla dolu olacaktır. 1500 baytlık paketin her son baytı doldurulacaktır:

+------------------------+
| 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....|
|........................|
|........................|
|........................|
|........................|
+------------------------+

Bir bayt daha göndermeye çalışırsanız

>ping -l 1473 obsidian

ağın bu 1501 baytlık paketi birden fazla pakete bölmesi gerekir:

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      |
|                        |
|                        |
|                        |
|                        |
|                        |
+------------------------+

Bu parçalanma, sahnelerin arkasında, ideal olarak siz bilmeden gerçekleşecek.

Ancak, kaba olabilir ve ağa paketin parçalanmasına izin verilmediğini söyleyebilirsiniz:

>ping -l 1473 -f obsidian

F bayrağının parçalama . Şimdi ağa sığmayan bir paket göndermeye çalıştığınızda hata alıyorsunuz:

>ping -l 1473 -f obsidian  

Packet needs to be fragmented but DF set.

Paketin parçalanması gerekiyor, ancak Parça Etme bayrağı ayarlandı.

Satır boyunca bir paketin parçalanması gereken bir yer varsa, ağ aslında bir parçalanma olduğunu söyleyen bir ICMP paketi gönderir. Makinenize bu ICMP paketini alır, en büyük boyutun ne olduğu söylenir ve çok büyük paket göndermeyi durdurması gerekir. Maalesef çoğu güvenlik duvarı bu "Yol MTU keşfi" ICMP paketlerini engeller, bu nedenle makineniz paketlerin parçalandığını asla fark etmez (ya da daha kötüsü: parçalanamadıkları için düşürülür).

Web sunucusunun çalışmamasına sebep olan da budur. İlk küçük (<1280 byte) yanıtı alabilirsiniz, ancak daha büyük paketler geçemez. Ve web sunucusunun güvenlik duvarları ICMP paketlerini engelleyerek yanlış yapılandırılmıştır. Yani web sunucusu asla paketi almadığınızı anlamıyor.

IPv6'da paketlerin parçalanmasına izin verilmez, herkesin ICMP mtu keşif paketlerine (doğru) izin vermesi gerekir .


8

@ian netshAslında şu anda kullanılan MTU'yu gösterdiğinden emin değilim . Windows XP Pro SP3 makinemde çalıştım netsh interface ip show interfaceve ilgili arayüz için MTU değerini olarak bildirdim 1500. Sonra aşağıdaki kayıt defteri anahtarlarını ekledim:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnablePMTUDiscovery
    value: 0

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{ID}\MTU 
    value: various (e.g. 1200)

Microsoft, diyor o ayar EnablePMTUDiscovery0'a 576 MTU ayarlayacaktır.

MTUKayıt defteri girdisini ayarlamak, MTU’yu manuel olarak ayarlar. MTUGiriş için birkaç değer denedim (her seferinde yeniden başlatma).

Her iki durumda da - ilk giriş, ardından ikinci giriş - netshhala MTU’yu 1500 olarak bildirdi. Ping ile yapılan test, kayıt defterinde yapılandırılmış MTU değerinin gerçekte kullanılmakta olduğunu doğruladı (ya da en azından önerildi).

Ayrıca, bunu makinemde ilk kez denediğimde, Yönlendirme ve Uzaktan Erişim hizmeti devre dışı bırakıldı, bu nedenle talimatlarınızı kullanarak başlatamadım. Denetim Masası> Yönetici Araçları> Bilgisayar Yönetimi> Hizmetler ve Uygulamalar> Hizmetler öğelerine giderek etkinleştirdim. "Başlangıç ​​tipi" ni Devre Dışı'ndan Manuel olarak değiştirdim. Daha sonra servisi bu iletişim kutusundan da başlattım.

Ayrıca, KB283165'in MTU’yu değiştirmek için mutlaka doğru talimatlar olduğundan emin değilim. Bu talimatlar yalnızca Windows PPPoE istemcisini çalıştırırken geçerli değil mi? İnternete yönlendiricinin PPPoE istemcisi olduğu bir yönlendirici üzerinden bağlanması (benim durumumda olduğu gibi), bu talimatlar uygun olmaz, değil mi?

Yukarıdaki kayıt defterinde değişiklik yapmamı sağlayan talimatlar KB900926’daydı: MTU boyutu 576'dan küçük olan WAN bağlantıları için önerilen TCP / IP ayarları (yöntem 2 ve 3).


@İan tarafından düzenle

Haklı gibisin. 1.200 için yapılandırın, ancak netshraporlar 1500.

görüntü tanımını buraya girin

>ping -l 1173 -f obsidian

Packet needs to be fragmented but DF set.

Bu yüzden sanırım orijinal sorunun cevabı, Windows XP'de gönderebileceğiniz en büyük paketi bulmak için Fragment etmeyin bayrağı ile deneme-yanılma kullanmak zorunda olduğunuzdur. O zaman MTU'nuz var.


2

MTU’yu deneme ve hata yaklaşımıyla ping kullanarak bulabilirsiniz:

ping <address> -f -l nnnn

Ping :

-f: Yankı İsteği iletilerinin, IP başlığında 1. Bu parametre, Maksimum İletim Birimi (PMTU) yol sorunlarını gidermek için kullanışlıdır.

-l Boyut: Gönderilen Yankı İsteği iletilerindeki Veri alanının uzunluğunu bayt olarak belirtir. Varsayılan 32'dir. Maksimum boyut 65,527'dir.

Uzunluk çok büyük olduğunda "Paketin parçalanması gerekiyor ama DF ayarlandı" mesajı alacaksınız.


Bu, "Ping Testi" ne
geçtiğimde yaptığım şeydi

1

AdapterWatch bakın :

AdapterWatch, ağ bağdaştırıcılarınız hakkında faydalı bilgiler görüntüler: IP adresleri, Donanım adresi, WINS sunucuları, DNS sunucuları, MTU değeri, Alınan veya gönderilen bayt sayısı, Geçerli aktarım hızı ve daha fazlası. Ayrıca, yerel bilgisayarınız için genel TCP / IP / UDP / ICMP istatistiklerini görüntüler.


1

Microsoft KB314496: Farklı ağ topolojileri için varsayılan MTU boyutları .
Normal ağ kurulumlarında MTU yapılandırması ile oynamaya çalışmamalısınız.

Burada bir VB kod referansı var . DrTCP
adında bir araç da var :

alt metin


Kayıt defterinde,

  • Git HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards
  • İlgilendiğiniz adaptörü açın
  • Kopya ServiceNamedize
  • O dizgiyi arayın HKLM\System; bir NetCfgInstanceIdanahtarla eşleşeceksin
  • MaxFrameSizeAnahtarın biraz üstünde olacak (benimki 1514 gösteriyor)

Bunu netshkomutla değiştirmenin bir yolu da var .

Ayrıca, Path MTU Discovery yapılandırmanızı kontrol edin .


Bunun için teşekkür ederim, ama ideal olarak, Windows'un varsayılanı olmasını beklediğinizden ziyade gerçekte hangi MTU'yu kullandığını söylemesini sağlayabilirsem daha güven verici olurdum. Belki bu olsa mümkün değil :-(
andygeers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.