MSS(最大セグメントサイズ)とは、デバイスがネットワーク接続から受け入れることができる最大のデータペイロードのことです。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
MSS(最大セグメントサイズ)とは、インターネットなどのネットワーク上を移動するパケット(小さなデータの塊)のサイズを制限するものです。ネットワーク上を移動するすべてのデータは、パケットに分割されます。パケットには、その内容や宛先に関する情報を含むいくつかのヘッダーが付加されています。MSSは、ペイロードと呼ばれるパケットのヘッダを除いた部分を計測します。
データパケットを輸送トラックに例えると、ヘッダーがトラック本体、ペイロードがトレーラーや貨物に相当し、MSSはトレーラーだけを計測する秤のようなものです。トレーラーの重量が重すぎる場合、そのトラックは目的地まで進むことを許可されません。
より具体的には、MSSはネットワークに接続されたデバイスが受信できる最大のTCP(Transport Control Protocol)セグメントサイズを指します。MSSの定義する「セグメント」はペイロードの長さのみで、付加されたヘッダーは含まれません。MSSの計測単位はバイトです。
MSSは、パケットサイズに関係する別の指標であるMTU(最大伝送単位)によって決定されます。これには、TCPおよびIP(Internet Protocol) ヘッダーが含まれています。この例えを続けるなら、MTUではトレーラーと貨物だけでなく、トラック本体とトレーラー、貨物の合計重量を計測します。
基本的にMSSは、MTUからTCPヘッダーとIPヘッダーのサイズを差し引いたものと同じです。
MTU - (TCPヘッダ + IPヘッダ) = MSS
MTUとMSSの重要な違いの1つは、パケットがデバイスのMTUを超えた場合、パケットはより小さな断片に分割される(「フラグメント化」される)という点です。一方、パケットがMSSを超えた場合、そのパケットはドロップされ、配信されません。
Transport Control Protocol(TCP)は、データパケットの送受信の順序制御を行い、パケットの欠落を防ぐプロトコルです。例えば、宅配サービスが荷物を配送する前に、事前にすべての荷受人に電話をして、決まった時間に在宅であることを確認し、その後、荷物が配達されたことを送り主に返信することを想像してみてください。TCP はこのような仕組みで、データパケットを「パッケージ」として配送します。
TCPの動作では、通信を行う2つの機器間でTCPハンドシェイクと呼ばれる処理により接続を開始します。MSSはTCPハンドシェイクの間で合意されます。両デバイスは受信可能なパケットサイズを通信します(「MSSクランプ」と呼びます。下記参照)。TCPはすべてのパケットにヘッダを付加し、各パケットがどのオープンコネクションの一部であるか、またパケットの順序を示します。
ほとんどの場合TCPヘッダの長さは20バイト*です。IPヘッダも20バイトの長さであり、送信元と送信先のIPアドレスなどの情報が含まれています。TCPパケットもIPパケットも、ヘッダを長くするためのオプションのヘッダフィールドを含んでいますが、これらはほとんど使われることはありません。
*情報科学において、1バイトは8桁の2進数を表すメモリサイズの単位であり、言い換えれば、8つの1と0の組み合わせです。
例えば、ネットワークルーターのMTUが1,500であり、受信可能なパケットの最大長が1,500バイトの場合を考えます(長いパケットはフラグメント化されます)。ルーターのMSSには何を設定すべきでしょうか?
MTU - (TCPヘッダ + IPヘッダ) = MSS
1,500 - (20 + 20) = 1,460
ルーターのMSSは1,460バイトに設定する必要があります。1,460バイトより大きいペイロードサイズのパケットはドロップされます。(デバイスは、自身と相手のデバイスの間にあるルーターのMTUとMSSの設定を知らない場合、このように大きすぎるパケットを誤って送信することがあります。このようなインシデントを回避ためにPath MTU Discoveryと呼ばれるプロセスが利用されます)
IPsec(Internet Protocol Security)は、IPの暗号化バージョンです。IPsecを使用して送信されたデータパケットは、接続された2者間のデバイスのみが解釈できるようにスクランブル化され、パケットを傍受する可能性のある誰からそのペイロードの内容を安全に保ちます。IPsecは、Virtual Private Networks(VPN)の確立によく使用されます。
IPsecは、パケットに数バイトの長さを追加します。この暗号化を使用する接続では、MSSはIPsecについても考慮する必要があります。
MTU - (TCPヘッダ + IPヘッダ + IPsec) = MSS
MSSはレイヤー4(トランスポート層)の指標です。トランスポート層のプロトコルであるTCPで使用されます。ただし、MTUと密接な関係があり、レイヤー3(ネットワーク層)に適用されます。
時折、ネットワーク経路上のルーターでMTU値が一般的な1,500バイトより低く設定されていることがあります。これは、パケットロスの原因となり、発見が困難な場合があります。
このような状況でもパケットを確実に宛先に到達させるためには、受信パケットのペイロードサイズを小さくすることが一つの選択肢となります。これは、サーバーがMSSクランプを適用するように設定することで実現できます。TCPハンドシェイクの間に、サーバーは受信するパケットのMSSの信号を送信し、相手サーバーからの最大ペイロードサイズを指定する「クランプ」を行うことができます。たとえば、サーバーAとBがTCP接続を確立し、サーバーBが1,436バイトを示すMSSを通信した場合、サーバーAは接続の間、ペイロードサイズが最大1,436バイトのパケットを送信します。
MSSクランプのもうひとつの応用例としてGREトンネリングがあります。この場合、新しい宛先に送信するために、オリジナルのパケットに24バイトのヘッダーが追加されます。元のパケットが1,476バイトより大きい場合、新しいパケットは通常の1,500バイトのMTUを超える可能性があります。MSSクランプを適用すると、GREヘッダーを適用した後でも受信パケットが1,500バイト未満になるように要求することができます。
MTUとMSSの詳細については、「MTUとは?」を参照してください。