Transmission Control Protocol
最大セグメントサイズ (MSS) はバイト単位で指定され、単一のセグメントとして受信可能な最大データ量を示す。性能を最大限発揮するにはIPフラグメンテーションを十分防げる程度に小さくする必要がある。IPフラグメンテーションが行われると、パケット喪失時の再送に時間がかかることになる。一般にコネクション確立時にMSSオプションを使って双方のMSSを通知するので、適切なMSSを決めるにはデータリンク層の Maximum Transmission Unit (MTU) から導出したMSSを通知すればよい。さらに送信側は経路MTU探索を使うことができ、通信相手との間にある経路でMTUが最小の部分を推定し、それを使ってMSSを動的に調整しIPフラグメンテーションを防ぐことができる。
MSS通知は「MSSネゴシエーション」とも呼ばれる。ネゴシエーションというと送信側と受信側が交渉して合意に達するかのように思われるが、実際には異なり、送信する方向によってそれぞれ異なるMSSが設定可能である。これは例えば一方がメモリ容量が小さいため、バッファ領域を大きくとれない場合などに起きる(発見したパスMTUより小さいこともありうる)。
ISBN 0131876716
↑ "The application byte-stream is conveyed over the network via TCP segments" RFC 9293.
↑ "a TCP segment is the unit of data transferred between a pair of TCP modules." RFC 9293.
↑ TCP (Linktionary term)
↑ RFC 791 - section 2.1
↑ RFC 793
↑ RFC 793 section 3.1
↑ RFC 1323, TCP Extensions for High Performance, Section 2.2
↑ RFC 2018, TCP Selective Acknowledgement Options, Section 2
↑ RFC 2018, TCP Selective Acknowledgement Options, Section 3
↑ RFC 1323, TCP Extensions for High Performance, Section 3.2
↑ RFC 1146, TCP Alternate Checksum Options
↑ RFC 793 Section 3.2
↑ “TCP Definition”. 2011年3月12日閲覧。
↑ Stone; Partridge (2000).
多くの実装では、テーブルの1エントリを動作中のOSプロセスとのセッションにマッピングする。TCPセグメントにはセッション識別子がないため、通信している双方でクライアントのアドレスとポートでセッションを識別する。パケットを受信すると、TCPソフトウェアはそのテーブルを参照して、対応するプロセスを見つける。
サーバ側でのセッション数はメモリ容量にのみ制限され、コネクション確立要求がくるたびに増えていく。しかし、クライアントはサーバに最初のSYNセグメントを送る前に無作為にポートを選んで確保しなければならない。このポートはコネクションをクローズするまで確保され続け、実質的にクライアントの持つIPアドレス毎の外に出て行くコネクション数を制限している。アプリケーションが不要になったコネクションをクローズしそこねると、空いているポートが足りなくなり、新たなTCPコネクションを確立できなくなる。
また、通信する双方で確認応答を受け取っていない送信済みデータとアプリケーションに渡す前の受信データを格納しておく領域を確保する必要がある。