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!
Windows 7, Windows Vista ve Windows XP için, çeşitli arabirimler için MTU, netsh
kullanılarak Windows'tan edinilebilir.
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
netsh
name__, 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ı netsh
içinden değiştirmenin bir yolunu sağlamaz. Bunun için şunları yapabilirsiniz:
Windows ile test edildi XP Service Pack 3
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 type
name__, 1 bayt code
name__, 2 bayt checksum
name__, 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.
@iannetsh
aslı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,EnablePMTUDiscovery
değerinin 0 olarak ayarlanmasının MTU’yu 576 olarak ayarlayacağını söylüyor.
MTU
kayıt defteri girdisini ayarlamak, MTU'yu elle ayarlar. MTU
girdisi için birkaç değer denedim (her seferinde yeniden başlatma).
Her iki durumda da - ilk giriş eklendikten sonra ikinci giriş - netsh
name__, 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).
Haklı gibisin. 1.200 için yapılandırın, ancak netsh
name__, 1500
öğesini bildirir.
>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.
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.
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.
Kayıt defterinde,
HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards
adresine gitServiceName
dizesini kopyalayınHKLM\System
içinde arayın; NetCfgInstanceId
anahtarını eşleştireceksinizMaxFrameSize
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.
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.