it-swarm.asia

Hangi MTU’nun Windows’da kullanıldığını nasıl söyleyeceksiniz XP

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. Yaparsam Ping Testi parçalanmamış olan en büyük paketi bulmak için, localhost'a 1492 baytlık bir paket (ping için +28 bayt?) Ping işlemi yapabilirim ve 1462 baytlık bir paketi olan yönlendirici (28 bayt başlığını eklediğinizde 1490 bayt). 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).

Bu MTU ayarıyla Windows XP Kayıt Defteri'ni güncellemek için çeşitli talimat kümelerini izlemeyi denedim, HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{AdapterID}\MTU güncellendi. 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şikliklerin etkili olması için bilgisayarı yeniden başlattığımda birkaç dakika çalışacak gibi görünüyor (tutarlı olmak yerine 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ı. Bu yüzden en basitinde sorum şu olurdu: Hangi MTU ayarının Windows kullanmaya çalıştığını nasıl söyleyebilirim?

Ayrıca, MTU’nun neden 28’e kadar neden sürekli düştüğünü nasıl söyleyeceği konusunda bir fikri olan 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!

20
andygeers

Windows 7, Windows Vista ve Windows XP için, çeşitli arabirimler için MTU, netshkullanılarak Windows'tan edinilebilir.

Windows 7, Windows Vista

Geçerli MTU Windows 7 veya Windows Vista'da göstermek için Komut İsteminden:

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ım IPv6 arabirim böyle düşük bir MTU'ya (1280) sahip çünkü IPv6'yı almak için bir tünel servisi kullanıyorum bağlantı .

Ayrıca, MTU'nuzudeğiştir(Windows 7, Windows Vista) da ayarlayabilirsiniz. Biryükseltilmişkomut istemi:

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

Windows 7 Service Pack 1 ile test edilmiştir

Windows XP

netshname__, Windows 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 arabirim hakkında (MTU dahil) detayları görmeden önce Yönlendirme ve Uzaktan Erişim hizmetinin başlatılmasını gerektirir:

C:\Users\Ian>net start remoteaccesss

Windows XP, MTU ayarını netshiçinden değiştirmenin bir yolunu sağlamaz. Bunun için şunları yapabilirsiniz:

Windows ile test edildi XP Service Pack 3

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 boyutunda 1,500 bytes:

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

TCP/IP IP bölümü 20 baytlık bir başlık gerektirir (12 baytlık 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) paketi 8 baytlık bir başlığa sahiptir (1 bayt typename__, 1 bayt codename__, 2 bayt checksumname__, 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 burası - ping paketi göndermek için gereken başlıkların boyutudur.

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

>ping -l 1472 obsidian

Sonra ortaya çıkanethernetpaket 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 tane daha bayt 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ğı,parçalanmaanlamına gelmez. Ş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, ancakParçalamaflag 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, böylece makineniz paketlerin parçalanmış olduğunu 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, herkeszorunluto (doğru) ICMP mtu keşif paketlerine izin verir.

57
Ian Boyd

@iannetshaslında şu anda kullanılan MTU'yu gösterdiğinden emin değilim. Windows XP Pro SP3 makinemde netsh interface ip show interface komutunu çalıştırdım ve ilgili arayüz için MTU değerini 1500 olarak rapor ettim. 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,EnablePMTUDiscoverydeğerinin 0 olarak ayarlanmasının MTU’yu 576 olarak ayarlayacağını söylüyor.

MTUkayıt defteri girdisini ayarlamak, MTU'yu elle ayarlar. MTUgirdisi için birkaç değer denedim (her seferinde yeniden başlatma).

Her iki durumda da - ilk giriş eklendikten sonra ikinci giriş - netshname__, hala MTU’yu 1500 olarak rapor etti.

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 öğesine giderek etkinleştirdim. "Başlangıç ​​türü" seçeneğini 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 aracılığıyla bağlanıyorsanız (benim durumumda olduğu gibi), bu talimatlar uygun olmaz, değil mi?

Takip ettiğim, kayıt defterinde yukarıdaki değişiklikleri yapmamı sağlayan talimatlar, KB900926’da: MT6’nın 576’dan küçük MTU’a sahip olduğu WAN (yöntem 2 ve 3).


@İan tarafından düzenle

Haklı gibisin. 1.200 için yapılandırın, ancak netshname__, 1500 öğesini bildirir.

enter image description here

>ping -l 1173 -f obsidian

Packet needs to be fragmented but DF set.

Öyleyse orijinal sorunun cevabını Windows XP 'de Parçalamayın gönderebileceğiniz en büyük paketi bulmak için bayrak. O zaman MTU'nuz var.

8
JMM

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ığındaki Parçalanmadı bayrağıyla 1 olarak ayarlandığını ve Yankı İsteği iletisinin, hedefe giden yoldaki yönlendiriciler tarafından parçalanamadığını belirtir. 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, ancak DF set" mesajı alacaksınız.

2
T. Kaltnekar

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.

Bir burada VB kod referansı var.
Ayrıca DrTCP adında bir araç var.

alt text


Kayıt defterinde,

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards adresine git
  • İlgilendiğiniz adaptörü açın
  • ServiceName dizesini kopyalayın
  • Bu dizgiyi HKLM\System içinde arayın; NetCfgInstanceId anahtarını eşleştireceksiniz
  • Biraz yukarıda MaxFrameSize anahtar olacak (benimki 1514 gösteriyor)

Bunu netsh komutuyla değiştirmenin bir yolu da var.

Ayrıca, Path MTU Discovery configuration işaretini de kontrol edin.

1
nik

Bakınız AdapterWatch :

AdapterWatch, ağ bağdaştırıcılarınız hakkında faydalı bilgiler görüntüler: IP adresleri, Donanım adresi, WINS sunucu, DNS sunucusu, 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
harrymc