Saya menderita masalah yang sangat aneh di mana saya secara acak mendapatkan kesalahan "Sambungan ke server diatur ulang" ketika mencoba mengakses halaman web (Kesalahan HTTP 12031 menurut alat diagnostik jaringan Windows) - ini terjadi terlepas dari apakah halaman web Saya mencoba mengakses di internet eksternal atau bahkan jika itu dari contoh Apache lokal yang berjalan di localhost. Ini mempengaruhi semua komputer di jaringan lokal kami (Ethernet, bukan nirkabel), yang semuanya menjalankan Windows XP.
Telah disarankan kepada saya bahwa mungkin ada hubungannya dengan MTU yang digunakan pada lalu lintas jaringan. Jika saya melakukan Tes Ping untuk mengetahui paket terbesar yang dapat melalui unfragmented, saya dapat melakukan ping localhost dengan paket 1492 bytes (+28 bytes untuk header?) Dan saya bisa ping router kami dengan paket 1462 bytes (yaitu 1490 byte saat Anda menyertakan header 28 byte). Jika saya mencoba dan melakukan ping sesuatu di luar seperti Google, saya tidak bisa mendapatkan lebih dari 1430 (yaitu 1458 dengan header).
Saya telah mencoba mengikuti berbagai rangkaian instruksi untuk memperbarui Windows XP Registry dengan pengaturan MTU ini, memperbarui HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{AdapterID}\MTU
. Saya sudah mencoba tiada akhir dari nilai-nilai alternatif: nilai yang paling jelas tampaknya adalah 1490, tetapi saya juga telah mencoba 1462, 1458, 1430, dll., Dll. tampaknya bekerja selama beberapa menit (sulit untuk memastikan karena itu selalu acak daripada konsisten) tetapi tidak pernah berlangsung lama.
Awalnya, ketika saya mencoba nilai 1430, setelah beberapa menit bekerja dengan baik, hasil Uji Ping akan berkurang 28 byte - tiba-tiba saya menemukan bahwa saya hanya bisa mendapatkan paket 1402 byte melalui Google. Jika saya memperbarui pengaturan registri MTU ke 1402, ketika saya reboot dan menunggu beberapa menit, maka akan menjadi 1374, kemudian 1346, dll. Komputer lain di jaringan tetap tidak terpengaruh (masih pada 1430) dan menghapus pengaturan MTU dari registri akan mengembalikan hal-hal normal (dan masih rusak).
Hal yang saya temukan paling sulit dalam mendiagnosis semua ini adalah sangat sulit untuk mengetahui apakah saya bermain dengan pengaturan registri yang benar. Jadi itu yang paling sederhana, pertanyaan saya adalah: Bagaimana saya bisa tahu apa pengaturan MTU yang coba digunakan Windows?
Juga, jika ada yang punya ide bagaimana mengatakan mengapa MTU terus menurun hingga 28, itu akan berguna juga (misalnya apakah ada file log Windows di suatu tempat di mana ia akan mencatat sesuatu pada titik di mana nilainya berubah?)
Akhirnya, jika ada yang bisa memberi tahu saya secara pasti bagaimana cara memberitahu pengaturan MTU apa yang harus saya coba gunakan, itu akan luar biasa!
sumber
Jawaban:
Untuk Windows 7, Windows Vista dan Windows XP, MTU untuk berbagai antarmuka tersedia dari Windows itu sendiri
netsh
.Windows 7, Windows Vista
Untuk menampilkan MTU saat ini di Windows 7 atau Windows Vista, dari prompt perintah:
Dan untuk antarmuka IPv4:
Catatan: Dalam contoh ini antarmuka IPv6 Sambungan Area Lokal saya memiliki MTU yang sangat rendah (1280) karena saya menggunakan layanan terowongan untuk mendapatkan konektivitas IPv6 .
Anda juga dapat mengubah MTU Anda (Windows 7, Windows Vista). Dari prompt perintah yang ditinggikan :
Diuji dengan Windows 7 Paket Layanan 1
Windows XP
The
netsh
sintaks untuk Windows XP sedikit berbeda:Catatan: Windows XP mengharuskan layanan Routing dan Remote Access dimulai sebelum Anda dapat melihat detail tentang antarmuka (termasuk MTU):
Windows XP tidak menyediakan cara untuk mengubah pengaturan MTU dari dalam
netsh
. Untuk itu Anda bisa:Diuji dengan Windows XP Paket Layanan 3
Lihat juga
Diskusi singkat tentang apa MTU itu, dari mana 28 byte berasal.
Kartu jaringan Anda (Ethernet) memiliki ukuran paket maksimum
1,500 bytes
:Bagian IP dari TCP / IP membutuhkan header 20 byte (12 byte bendera, 4 byte untuk alamat IP sumber, 4 byte untuk alamat IP tujuan). Dengan demikian semakin sedikit ruang yang tersedia dalam paket:
Sekarang paket ICMP (ping) memiliki header 8-byte (1 byte
type
, 1 bytecode
, 2 bytechecksum
, 4 byte data tambahan):Di situlah "hilang" 28 byte - itu ukuran header yang diperlukan untuk mengirim paket ping.
Saat Anda mengirim paket ping, Anda dapat menentukan berapa banyak data payload tambahan yang ingin Anda sertakan. Dalam hal ini, jika Anda memasukkan semua 1472 byte:
Kemudian paket ethernet yang dihasilkan akan penuh ke insang. Setiap byte terakhir dari paket 1500 byte akan diisi:
Jika Anda mencoba mengirim satu byte lagi
jaringan harus memecah paket 1501 byte menjadi beberapa paket:
Fragmentasi ini akan terjadi di belakang layar, idealnya tanpa Anda sadari.
Tapi Anda bisa jahat, dan beri tahu jaringan bahwa paket itu tidak boleh difragmentasi:
The -f berarti bendera tidak fragmen . Sekarang ketika Anda mencoba mengirim paket yang tidak sesuai pada jaringan Anda mendapatkan kesalahan:
Paket perlu terfragmentasi, tetapi bendera Jangan Fragmen telah ditetapkan.
Jika di mana saja di sepanjang baris paket perlu terfragmentasi, jaringan sebenarnya mengirim paket ICMP yang memberi tahu Anda bahwa terjadi fragmentasi. Mesin Anda mendapatkan paket ICMP ini, diberi tahu ukuran terbesarnya, dan seharusnya berhenti mengirim paket terlalu besar. Sayangnya sebagian besar firewall memblokir paket ICMP "Path MTU discovery" ini, sehingga mesin Anda tidak pernah menyadari bahwa paket-paket tersebut terfragmentasi (atau lebih buruk: dijatuhkan karena tidak dapat difragmentasi).
Itulah yang menyebabkan web-server tidak berfungsi. Anda bisa mendapatkan respons kecil awal (<1280 byte), tetapi paket yang lebih besar tidak dapat melewati. Dan firewall server web salah konfigurasi, memblokir paket ICMP. Jadi server web tidak menyadari Anda tidak pernah mendapatkan paket itu.
Fragmentasi paket tidak diperbolehkan dalam IPv6, semua orang diharuskan (dengan benar) mengizinkan paket penemuan ICMP mtu.
sumber
@ian saya tidak begitu yakin bahwa
netsh
sebenarnya menunjukkan MTU yang saat ini digunakan. Pada mesin Windows XP Pro SP3 saya, saya mengeksekusinetsh interface ip show interface
dan melaporkan nilai MTU untuk antarmuka yang relevan sebagai1500
. Saya kemudian menambahkan kunci registri berikut:Microsoft mengatakan bahwa pengaturan
EnablePMTUDiscovery
ke 0 akan mengatur MTU ke 576.Mengatur
MTU
entri registri mengatur MTU secara manual. Saya mencoba beberapa nilai untukMTU
entri (reboot setiap kali).Dalam kedua kasus - menambahkan entri pertama, kemudian entri kedua -
netsh
masih melaporkan MTU sebagai 1500. Pengujian dengan ping dikonfirmasi (atau setidaknya disarankan) bahwa nilai MTU yang dikonfigurasi dalam registri sebenarnya sedang digunakan.Juga, ketika saya pertama kali mencoba ini pada mesin saya, layanan Routing dan Remote Access dinonaktifkan, jadi saya tidak dapat memulainya menggunakan instruksi Anda. Saya mengaktifkannya dengan masuk ke Panel Kontrol> Alat Adminstratif> Manajemen Komputer> Layanan dan Aplikasi> Layanan. Saya mengubah "Jenis startup" dari Dinonaktifkan ke Manual. Saya kemudian memulai layanan dari dialog itu juga.
Saya juga tidak yakin bahwa KB283165 adalah instruksi yang tepat untuk mengubah MTU. Bukankah instruksi itu hanya relevan ketika menjalankan klien Windows PPPoE? Jika menghubungkan ke internet melalui router yang routernya adalah klien PPPoE (seperti dalam kasus saya), instruksi tersebut tidak akan relevan, bukan?
Instruksi yang saya ikuti, yang membuat saya membuat perubahan di atas ke registri, ada di KB900926: Pengaturan TCP / IP yang disarankan untuk tautan WAN dengan ukuran MTU kurang dari 576 (metode 2 & 3).
Edit oleh @ian
Sepertinya kamu benar. Konfigurasikan untuk 1.200, tetapi
netsh
laporkan1500
.Jadi saya kira jawaban untuk pertanyaan awal adalah bahwa pada Windows XP Anda harus menggunakan trial-and-error dengan flag Don't fragment untuk menemukan paket terbesar yang dapat Anda kirim. Maka Anda memiliki MTU Anda.
sumber
Anda dapat menemukan MTU menggunakan ping dengan pendekatan coba-coba:
Ping :
Anda akan mendapatkan pesan "Paket perlu difragmentasi tetapi diset DF" ketika panjangnya terlalu besar.
sumber
Lihat AdapterWatch :
sumber
Microsoft KB314496: Ukuran MTU default untuk topologi jaringan yang berbeda .
Anda seharusnya tidak mencoba bermain dengan konfigurasi MTU dalam pengaturan jaringan normal.
Ada referensi kode VB di sini .
Ada juga alat yang disebut DrTCP :
Dalam registri,
HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards
ServiceName
stringHKLM\System
; Anda akan mencocokkan satuNetCfgInstanceId
kunciMaxFrameSize
kuncinya (tambang menunjukkan 1514)Ada juga cara untuk mengubah ini dengan
netsh
perintah.Juga, periksa konfigurasi Path MTU Discovery Anda .
sumber