
でWindows Server 2008 の MSS 制限に関する Technet の記事そこには次のように記されている。
ソースの Windows 2008 Server で収集されたネットワーク トレースを分析した結果、リモート システムが 512 バイトの TCP MSS サイズを提供し、Windows 2008 Server が 536 バイトの MSS サイズのデータ パケットを送信し続けていることが判明しました。
これをどうやって行うのでしょうか。つまり、ネットワーク トレースを実行してから、Windows が使用すべき MSS 値と現在使用している MSS 値を特定するのでしょうか。
答え1
TCP接続を開始するSYNパケットとSYN/ACKパケットのパケットキャプチャがある場合は、オプションリストで各パーティが通知した最大セグメントサイズがわかります。このようなキャプチャは、次のようにして作成できます。ワイヤーシャーク興味深い部分は次のようになります。
(恥ずかしげもなく盗用)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.14
131.107.65.14 への 1452 バイトの MSS 制限に違反するパケットをすべて表示します。 TCP スタックが正しく動作していれば、フィルターを適用した後はパケットが表示されなくなるのは明らかです。