สำหรับ Windows 7, Windows Vista และ Windows XP, MTU สำหรับการเชื่อมต่อต่างๆสามารถใช้ได้จาก Windows netsh
เองใช้
Windows 7, Windows Vista
วิธีแสดงMTUปัจจุบันบน Windows 7 หรือ Windows Vista จากพรอมต์คำสั่ง:
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
และสำหรับอินเตอร์เฟส IPv4:
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
หมายเหตุ:ในตัวอย่างนี้เชื่อมต่อเครือท้องถิ่นของฉันIPv6อินเตอร์เฟซได้เช่น MTU ต่ำ (1280) เพราะผมใช้บริการอุโมงค์ที่จะได้รับการเชื่อมต่อ IPv6
คุณสามารถเปลี่ยน MTU ของคุณ (Windows 7, Windows Vista) จากพรอมต์คำสั่งที่ยกระดับ :
>netsh interface ipv4 set subinterface "Local Area Connection" mtu=1492 store=persistent
Ok.
ทดสอบกับ Windows 7 Service Pack 1
Windows XP
netsh
ไวยากรณ์สำหรับ Windows XP จะแตกต่างกันเล็กน้อย
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
หมายเหตุ: Windows XP ต้องการให้บริการการกำหนดเส้นทางและการเข้าถึงระยะไกลเริ่มต้นก่อนที่คุณจะสามารถดูรายละเอียดเกี่ยวกับอินเทอร์เฟซ (รวมถึง MTU):
C:\Users\Ian>net start remoteaccesss
Windows XP ไม่ได้ให้วิธีการที่จะเปลี่ยนการตั้งค่า MTU netsh
จากภายใน เพื่อที่คุณจะสามารถ:
ทดสอบกับ Windows XP Service Pack 3
ดูสิ่งนี้ด้วย
การอภิปรายสั้น ๆ เกี่ยวกับ MTU คืออะไรโดยที่ 28 ไบต์มาจากไหน
การ์ดเครือข่าย (Ethernet) ของคุณมีขนาดแพ็กเก็ตสูงสุด1,500 bytes
:
+---------+
| 1500 |
| byte |
| payload |
| |
| |
| |
+---------+
ส่วน IP ของTCP / IPต้องการส่วนหัว 20 ไบต์ (แฟล็ก 12 ไบต์, 4 ไบต์สำหรับที่อยู่ IP ต้นทาง, 4 ไบต์สำหรับที่อยู่ IP ปลายทาง) ทำให้เหลือพื้นที่น้อยลงในแพ็คเก็ต
+------------------------+
| 12 bytes control flags | \
| 4 byte from address | |- IP header: 20 bytes
| 4 byte to address | /
|------------------------|
| 1480 byte payload |
| |
| |
| |
+------------------------+
ตอนนี้แพ็คเก็ต ICMP (ping) มีส่วนหัว 8 ไบต์ (1 ไบต์type
, 1 ไบต์code
, 2 ไบต์checksum
, 4 ไบต์ข้อมูลเพิ่มเติม):
+------------------------+
| 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 |
| |
| |
| |
+------------------------+
นั่นคือที่ที่ "ขาดหายไป" 28 ไบต์ - มันเป็นขนาดของส่วนหัวที่จำเป็นในการส่งแพ็คเก็ตปิง
เมื่อคุณส่งแพ็กเก็ต ping คุณสามารถระบุข้อมูลเพิ่มเติมของข้อมูลที่ต้องการรวมได้ ในกรณีนี้หากคุณรวม 1472 ไบต์ทั้งหมด:
>ping -l 1472 obsidian
จากนั้นแพ็คเก็ตอีเธอร์เน็ตที่ได้จะเต็มไปด้วยเหงือก ทุกไบต์สุดท้ายของแพ็คเก็ต 1500 ไบต์จะถูกเติม:
+------------------------+
| 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....|
|........................|
|........................|
|........................|
|........................|
+------------------------+
หากคุณพยายามส่งอีกหนึ่งไบต์
>ping -l 1473 obsidian
เครือข่ายจะต้องแยกส่วนแพ็คเก็ต 1501 ไบต์เป็นหลาย ๆ แพ็คเก็ต:
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 |
| |
| |
| |
| |
| |
+------------------------+
การกระจัดกระจายนี้จะเกิดขึ้นหลังฉากโดยที่คุณไม่รู้ตัว
แต่คุณสามารถพูดได้และบอกเครือข่ายว่าแพ็คเก็ตไม่ได้รับอนุญาตให้แยกส่วน:
>ping -l 1473 -f obsidian
-fธงหมายถึงทำไม่ได้ส่วน ตอนนี้เมื่อคุณพยายามส่งแพ็คเก็ตที่ไม่พอดีกับเครือข่ายคุณได้รับข้อผิดพลาด:
>ping -l 1473 -f obsidian
Packet needs to be fragmented but DF set.
แพ็กเก็ตจะต้องมีการแยกส่วน แต่มีการตั้งค่าสถานะDo Not Fragment
หากที่ใดก็ตามที่ต้องการแยกส่วนแพ็คเก็ตเครือข่ายจะส่งแพ็คเก็ต ICMP บอกคุณว่ามีการแตกแฟรกเมนต์เกิดขึ้น เครื่องของคุณรับแพ็คเก็ต ICMP นี้เครื่องจะบอกขนาดที่ใหญ่ที่สุดและควรหยุดส่งแพ็กเก็ตที่ใหญ่เกินไป น่าเสียดายที่ไฟร์วอลล์ส่วนใหญ่ปิดกั้นแพ็คเก็ต ICMP "Path MTU Discovery" เหล่านี้ดังนั้นเครื่องของคุณจะไม่ตระหนักว่าแพ็กเก็ตนั้นมีการแยกส่วน (หรือแย่กว่า: ลดลงเนื่องจากไม่สามารถแยกส่วนได้)
นั่นคือสิ่งที่ทำให้เว็บเซิร์ฟเวอร์ไม่ทำงาน คุณสามารถรับการตอบสนองเริ่มต้นขนาดเล็ก (<1280 ไบต์) แต่แพ็คเก็ตที่ใหญ่กว่าจะไม่สามารถผ่านได้ และไฟร์วอลล์ของเว็บเซิร์ฟเวอร์นั้นได้รับการกำหนดค่าที่ไม่ถูกต้องทำให้บล็อกแพ็คเก็ต ICMP ดังนั้นเว็บเซิร์ฟเวอร์จึงไม่ทราบว่าคุณไม่ได้รับแพ็กเก็ต
การแยกส่วนของแพ็คเก็ตไม่ได้รับอนุญาตใน IPv6 ทุกคนจะต้อง (อย่างถูกต้อง) อนุญาตให้ใช้แพ็คเก็ต ICMP mtu Discovery