Windows 7、Windows Vista、およびWindows XPの場合、さまざまなインターフェイスのMTUは、Windowsからを使用して入手できますnetsh
。
Windows 7、Windows Vista
Windows 7またはWindows Vistaで現在のMTUを表示するには、コマンドプロンプトから:
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接続を取得するためにトンネルサービスを使用しているため、ローカルエリア接続IPv6インターフェイスのMTU(1280)は非常に低くなっています。
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バイトがどこから来ているかについての短い議論。
ネットワークカード(イーサネット)の最大パケットサイズは1,500 bytes
次のとおりです。
+---------+
| 1500 |
| byte |
| payload |
| |
| |
| |
+---------+
TCP / IPのIP部分には、20バイトのヘッダー(12バイトのフラグ、ソースIPアドレスに4バイト、宛先IPアドレスに4バイト)が必要です。これにより、パケットで使用可能なスペースが少なくなります。
+------------------------+
| 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パケットを送信するために必要なヘッダーのサイズです。
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....|
|........................|
|........................|
|........................|
|........................|
+------------------------+
もう1バイト送信しようとした場合
>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パケットを取得し、最大サイズが通知され、大きすぎるパケットの送信を停止することになっています。残念ながら、ほとんどのファイアウォールはこれらの「パスMTUディスカバリ」ICMPパケットをブロックするため、マシンはパケットが断片化されていることを認識しません(またはさらに悪いことに、断片化できなかったためにドロップされます)。
それがウェブサーバーが機能しない原因です。最初の小さな(<1280バイト)応答を取得できますが、大きなパケットは通過できません。また、Webサーバーのファイアウォールが正しく構成されていないため、ICMPパケットがブロックされています。そのため、Webサーバーは、パケットを受け取っていないことに気付きません。
パケットのフラグメンテーションはIPv6では許可されていません。全員がICMP mtuディスカバリパケットを(正しく)許可する必要があります。