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