Ciscoルータコマンド/ip tcp adjust-mss
ip tcp adjust-mss <MSSのサイズ>
設定モード
インターフェイスコンフィギュレーションモード
使用例
(config-if)#ip tcp adjust-mss 1414
解説
MSSを調整するためのCiscoルータのコマンドです。
MSSを調整することでパケットがルータにより分割される可能性が減り、またパケットの分割を
禁止している機器によってパケットが破棄されることが無くなります。
以下のネットワーク構成で動作を確認してみましょう。
図1 TCPのMSS調整用構成
設定前
まずルータにIPアドレスを設定しただけの状態で行ったHTTP通信をPC、Webサーバ両方で
WireSharkを使用してパケットキャプチャを行った結果が以下になります。
図2 変更前のPC(192.168.0.2)のキャプチャ結果
図3 変更前のWebサーバ(192.168.1.2)のキャプチャ結果
どちらの結果も同じようになっています。
図2のPCから送信されている3Wayハンドシェイクの1つ目のパケットを見るとMSSのサイズが1460となっています。
イーサネットの場合、デフォルトではMTUが1500となっています。そこからIPヘッダ(20バイト)とTCPヘッダ(20)を
引いた1460がMSSとなっています。
図3のWebサーバが受信しているパケットの1つ目がそれを受信した際の状態です。MSSは1460のままです。
また図3の2つ目のパケットがWebサーバから送信したパケットです。図2の2つ目のパケットはPCでそれを受信した際の
キャプチャです。
WebサーバからもMSSを1460として送信し、受信した際もその値のままとなっています。
図4 MSSのやり取り
設定後
では次にR1ルータのFa0にip tcp adjust-mss 1414と入力してみます。
(config)#interface FastEthernet 0
(config-if)#ip tcp adjust-mss 1414
入力後の結果を見てみましょう。
図5 変更後のPCのキャプチャ結果
まずPCのキャプチャ結果の1行目を見て下さい。
PCからWebサーバへ送信された1パケットの目のSYNフラグのついたパケットを送信する際は、MSSが1460になっています。
しかしWebサーバのキャプチャ結果の1パケット目を見ると、受信しているSYNパケットのMSSは1414となっています。
PCは1460で送信しましたが、Webサーバに到着時点では1414に変わっているということになります。
また図6の2パケット目、Webサーバからの返信であるSYNフラグとACKフラグのついたパケットのMSSはWebサーバが送信する際には1460となっています。しかし図5の2パケット目を見るとPCに届いた際には1414となっています。
ルータのインターフェイスを通過する際にMSSがコマンドで指定した値にへんこうされています。
図7 ip tcp adjust-mssの動作
このようにip tcp adjust-mssコマンドが設定されているインターフェイスを通過するSYNフラグのついたパケットはMSSが書き換えられます。
PCやWebサーバは途中の経路のMSSがわからないため、デフォルトの1460で送ってしまいます。それをルータ側で
調整することでフラグメントが行われないようにすることができます。