web-dev-qa-db-ja.com

Windows7はDHCPサーバーにMTUを要求しません。何を考えているの?

私のコンピュータのイーサネットアダプタは、1,500バイトのイーサネットフレームを使用しています。通常、これは私のローカルエリア接続 MTUが1500バイトであることを意味します。

しかし、インターネットへの私の(IPv4)接続にはいくらかのオーバーヘッドがあります。これは、インターネットと通信するときの実際のMTUが1492であることを意味します。これにより、インターフェイスMTUの設定ミスで発生する通常の問題がすべて発生します。

ルーターはそれを修正できます

明らかに、私はcouldnetshを使用し、ネットワークインターフェイスをカスタムMTUでオーバーライドします。しかし、私はそれをしたくありません。私のルーターのDHCPサーバーは、MTUが1492であることをすでに認識しています。要求された場合、DHCPサーバーはDHCPオプション26で応答します。

  • 26 MTUインターフェース = 1492

そのため、DHCPサーバーが telling 私のWindows7マシンでMTU設定をDHCPオファーで返すアイテムの1つとして表示しないのはなぜか私を悩ませていました。 :

  • 54 DHCPサーバー識別子 = 192.168.1.1
  • 51 IPアドレスのリース時間 = 2 hours
  • 1 サブネットマスク = 255.255.255.0
  • 15 ドメイン名 = example.local
  • 3 ルーター = 192.168.1.1
  • 6 ドメインネームサーバー = 8.8.8.88.8.4.474.82.42.42

いいえMTUインターフェース!そのため、私のマシンのイーサネットは1500バイトでスタックしています。

DHCPサーバーは本来の機能を果たしました

もっと掘り下げる必要がありましたが、DHCPサーバーはクライアントが尋ねた目的のものだけを提供することに気づきました。私のWindows7 DHCP Discoverの間に、Windows7は返されるすべてのDHCPオプションのリストを列挙します。

  • 1 サブネットマスク
  • 15 ドメイン名
  • 3 ルーター
  • 6 ドメインネームサーバー
  • 44 NetBIOS over TCP/IPネームサーバー
  • 46 NetBIOS over TCP/IP Nodeタイプ
  • 47 NetBIOS over TCP/IPスコープ
  • 31 ルーター検出の実行
  • 33 静的ルート
  • 121 クラスレススタティックルート
  • 249 クラスレススタティックルート(Microsoft)
  • 43 ベンダー固有の情報

Windows7はasking for [〜#〜] mtu [〜#〜]

それが何をしているのかを知っている必要があります

Windowsには理由 MTUを要求しない理由が必要です。しかし、私はそれが何であるかわかりません。最初は、 Path Maximum MTU Discovery を使用しているためだと思いました。ただし、PMTUはTCP接続に対してのみ機能し、TCP MSS(最大セグメントサイズ)オプションを使用します。ローカルのMSSオプションは正しいです。

私の場合、TCP MSS設定(MTUオプションから取得)が間違っています。これは1460 bytesです。

  1500 interface MTU
-   20 bytes IP header = 1480 bytes
-   20 bytes TCP header
= 1460 bytes MSS

高すぎます。

:Windowsが[〜#〜] mss [〜#〜]SYNパケットから1460バイトを使用していることを確認できます(a = TCP接続が確立されています。

PathMTUでない場合は、どうしますか?

Windows 7は何を考えていますか?ここでの意図されたの動作は何ですか?マイクロソフトのネットワークスタック開発者は、何が起こるべきだと考えていましたか?

ここで、インターネットMTUが実際には1472(つまり)であると仮定し、イーサネットアダプタが実際に8,192バイトイーサネットフレームを使用していると仮定します(これは実行されます)。企業は何をすることになっていますか?私は企業内のすべてのマシンに近づき、次のように入力することになっていますか?

>netsh interface ipv4 set interface interface="Local Area Connection" mtu=1472 store=persistent

それは合理的ではありません。そして、それが合理的であったとしても、それは私が求めているものではありません。

Windows wants がどうなるかを理解しようとしています。 どのように動作するかを理解しようとしています。私はここで何かを学ぼうとしています。私のインターネットゲートウェイが576バイトのATMであると仮定します。インターネットに送信する場合のMTUが576バイトであることをWindows7マシンに指示するにはどうすればよいですか?

ボーナスリーディング

7
Ian Boyd

パスMTUはTCPのみであり、MSSを使用しません(ただし、ご想像のとおり、MSSはMTUから派生します)。転送するには大きすぎるパケットを受信したホップは、_ICMP fragmentation needed_パケットをオリジンに戻します。これはレイヤー3の一部であり、TCPから独立しています。

PMTUの問題は、着信ICMPパケットがドロップされるか、オリジンに転送されないことが多いため、オリジンがパケットサイズを縮小することを認識していないことです。

ルーターはネクストホップMTUが1472であることを認識しているため、PMTUパケットをクライアントに送信する必要があります。これはwiresharkで確認できますが、これが行われていない場合は修正が必要です。

いくつかの回避策があります。 1つは、ルーターのMTUの内部インターフェイスを1472に設定することです。これは、ルーターが処理を行う前にアクションが実行されることを意味します。もう1つのオプションは、(ルーターで実行できる場合)すべてのパケットに対してDFビットをオンにすることです。フルサイズのパケットは2つになるため、これはかなり残酷な回避策です。 1つは小さいパケット、もう1つは大きいパケットで、結果としてオーバーヘッドが発生します。

企業の設定では、3つのアプローチすべてを使用できますが、ルーターのLANインターフェイスでmtuをハード設定することはかなり一般的です。

(DHCPがMTUの仲介に使用される例に出くわしたことはありません。内部MTUと境界MTUが異なることが多く、内部でジャンボフレームを使用する可能性があるため、ほとんどの場合、適切な場所ではありませんが、削減する必要があります。インターネットトラフィックの通常のサイズに)

4
Paul