Windows Server での MSS 値の決定

Windows Server での MSS 値の決定

Windows Server 2008 の MSS 制限に関する Technet の記事そこには次のように記されている。

ソースの Windows 2008 Server で収集されたネットワーク トレースを分析した結果、リモート システムが 512 バイトの TCP MSS サイズを提供し、Windows 2008 Server が 536 バイトの MSS サイズのデータ​​ パケットを送信し続けていることが判明しました。

これをどうやって行うのでしょうか。つまり、ネットワーク トレースを実行してから、Windows が使用すべき MSS 値と現在使用している MSS 値を特定するのでしょうか。

答え1

TCP接続を開始するSYNパケットとSYN/ACKパケットのパケットキャプチャがある場合は、オプションリストで各パーティが通知した最大セグメントサイズがわかります。このようなキャプチャは、次のようにして作成できます。ワイヤーシャーク興味深い部分は次のようになります。

Wireshark パケットキャプチャ (恥ずかしげもなく盗用)http://caedesnotes.wordpress.com/2010/06/30/bug-hunting-browsers-fail-to-load-research-microsoft-com/

この例でわかるように、131.107.65.14 によってアナウンスされた MSS が 1452 バイトである場合、この接続中はこの値以下の TCP セグメント長のみが表示されます。両方のホストが SYN パケットと SYN/ACK パケットで MSS を個別にアナウンスし、接続期間中に交換されるすべてのセグメントに対して 2 つのうち小さい方が選択されることに注意してください。

Wireshark で表示フィルターを設定して、簡単に検証することができます。tcp.len>1452 and ip.dst==131.107.65.14131.107.65.14 への 1452 バイトの MSS 制限に違反するパケットをすべて表示します。 TCP スタックが正しく動作していれば、フィルターを適用した後はパケットが表示されなくなるのは明らかです。

関連情報