アプリが大量のメッセージ送信をTCPモジュールに要求した場合、TCPモジュールはアプリから渡されたメッセージをある一定量の大きさ以下に区切ってから送信する。 この区切られたメッセージをセグメントといい、TCPが区切るメッセージの最大バイト長を最大セグメント長(MSS:Maximun Segment Size)という。

TCPでは、最初に最大セグメント長を決定してから通信を開始する。

セグメント長が小さいと、1つのパケットに占めるデータの割合が小さくなってしまう。 2kgの箱に1kgの荷物を入れて送ることは、どう考えても送料(労力)の無駄である。 IPヘッダが20バイト、TCPヘッダが20バイトを占めるため、最低限データはそれ以上の割合を占めるようにしたい。

セグメント長が大きいと、通信経路上での分割処理(IPフラグメンテーション)が起こる確率が高くなる。 経路MTU探索では、ルータを通過できなければそのパケットを破棄し、再送するという無駄が生じる。 ギリギリの大きさで送った結果、それが重量オーバーで戻ってきたら二度手間である。 また、途中で分割した破片の一部を紛失してしまったら、届いた破片も破棄され、すべて送り直しになってしまう。

これらの事情から、理想的な最大セグメント長は『IPフラグメンテーションが起きない最大の大きさ』であるといえる。

TCPモジュールはさまざまな事情を考慮した上で、最適な最大セグメント長を決めてくれる。