最大セグメントサイズ(Maximum Segment Size、略してMSS)は、TCP(
Transmission Control Protocol)において、1つのセグメントで転送可能なデータペイロードの最大バイト数を指します。ここで言う「セグメント」とは、TCPプロトコルがデータを分割・送信する際の単位を意味します。
MSSは、TCPヘッダーのサイズを含まない、純粋なデータ部分の最大長を表します。TCPにおけるMSSの理論上の最大値は64KBですが、実際にはネットワークの制約、特にMTU(
Maximum Transmission Unit)との関係から、より小さな値が用いられることが一般的です。
特に
イーサネット環境におけるMSSは、1460バイト以下となることが多く、これは
イーサネットの標準的なMTUが約1500バイトであることに起因します。
イーサネット上でTCPを使用する場合、IPヘッダー(通常20バイト)とTCPヘッダー(通常20バイト)を考慮すると、MTUからこれらのヘッダーサイズを引いた値がMSSの最大値となります。
また、
PPPoE(Point-to-Point Protocol over Ethernet)を併用する環境では、
PPPoEヘッダーが追加されるため、MSSはさらに小さくなり、一般的には1452バイト程度となります。これは、
PPPoEヘッダーの追加によってMTUがわずかに減少するためです。
MSSは、MTUと密接に関連しており、ネットワーク上でのデータの断片化(フラグメンテーション)を避けるために重要です。MTUは、IP層における1つのパケットの最大サイズを指し、IPヘッダーとデータペイロードの両方を含みます。
理想的な状況では、TCPセグメントのサイズ(つまり、MSSにTCPヘッダーのサイズとIPヘッダーのサイズを加えたもの)がMTUを超えないように設定されるべきです。この条件を満たすことで、ルーターやその他のネットワーク機器でのデータの断片化を回避し、より効率的なデータ転送が可能になります。
一般的な
IPv4環境では、IPヘッダーは20バイト、TCPヘッダーも通常20バイトであるため、MSSはMTUから40バイトを引いた値に設定されることが多いです。しかし、
IPv6ヘッダーは40バイトであるため、
IPv6環境ではMSSを計算する際に考慮が必要です。また、TCPヘッダーやIPヘッダーにオプションが含まれる場合は、ヘッダーサイズが増加する可能性があり、MSSをより小さく設定する必要がある場合があります。
MSSは、TCPのハンドシェイク時にネゴシエーションされ、接続の両端でサポートされる最大のデータサイズが決定されます。これにより、ネットワーク環境に応じた最適なデータ転送が可能になります。
関連する概念として、MTU、TCP/IPプロトコルスイート、特にTCPとIPの関係を理解することが重要です。これらの要素は、ネットワークにおけるデータ転送の効率と信頼性を確保するための基本的な構成要素です。MSSはこれらの要素の一つとして、データが適切に分割され、効率的に転送されるために不可欠な役割を担っています。
まとめると、MSSはTCPにおけるデータ転送効率を左右する重要な要素であり、MTUやヘッダーサイズを考慮して適切に設定することで、ネットワーク上での断片化を避け、より効率的なデータ通信を実現できます。