信頼性はトランスポートプロトコルの役割である。 TCP/IP suiteにおいて転送制御プロトコル(Transmission Conrol Protocol:TCP)は 高信頼トランスポートサービスを提供する。
TCPが提供するサービスには主に次の7つの特徴がある。
アプリケーションは最初にあて先にコネクションを要求し、 データの転送にそのコネクションを利用する。
TCPコネクションは2つのエンドポイントを持つ。
TCPは送信データが、紛失なく、順序の乱れなく、 正確に配信されることを保証する。
TCPコネクションでは双方向にデータを流すことができる。 また、並行的にデータの受信、送信が可能である。
アプリケーションは、コネクションを通して一連の連続した データを送信できる。
コネクションを張る時は、両方のアプリケーションが新しい コネクションに合意しなければならない。これにより、 以前のコネクションで使用された重複パケットは存在しなくなる。
TCPはコネクション停止にも双方の確認通知をし、 コネクションが閉じるまでにすべてのデータを高信頼に 配信することを保証する。
TCPは、アプリケーションへのコネクションを提供するので、 end-to-end protocolと呼ばれる。 TCPで提供されるコネクションは、ソフトウェアによって実現されるので、 仮想コネクション(virtual connection)と呼ばれる。IPによって TCPのデータを運ぶが、IPはTCPのデータを読んだり、解釈したりすることはない。 つまり、TCPは終端の2点おいてのみ必要である。(ルータには必要ない)
TCPは再送(retransmission)によって、パケット紛失(packet loss)に対応する。 TCPはデータを受信すると、確認通知メッセージ(acknowledgenment)を送信元に 返送する。送信者はデータ送信時にタイマを起動し、確認通知が返ってこなかった 場合は再送信する。
TCPのタイムアウト時間は最初、固定値が使われたが、これはうまく動かないこと
が分かった。そこで、TCPは適応型(adaptive)のタイムアウト時間を用いる。
TCPは応答を伴うメッセージを送信することによって、往復時間を計測し、
往復遅延時間(round-trip delay)を推定する。
分散値を用いることで、パケットのバーストによって遅延時間が増大する場合に、
TCPが迅速に適応することを助けている。また、加重平均を用いることで、
一時的なバーストの後に遅延時間が小さく戻る時に、TCPが再送タイマを再セット
することを助けている。
当然、LANにおいてはタイムアウト時間は短く、長距離通信においてはタイムアウト時間は長い。
TCPデータ受信者は、データを受信すると、残りバッファ量を送信者へ 送り返す。このバッファサイズ通知をウィンドウ広告(window advertisement)という。 0のサイズを受け取った送信者は、データの送信を一時中断する。 そして、正のサイズを受信すると再び送信を開始する。
TCPはコネクションの生成、終結時に3方向ハンドシェーク法(3-way handshake)を 使用している。
3ハンドシェーク時に各終端は32ビット乱数の順序番号(sequence number)を発生する。 コンピュータのリブート時にはTCPは新しい乱数を選択する。 これにより各コネクションは一対の通信を可能とする。
現代のインターネットワークにおいて、パケット紛失はハードウェアの
故障よりも、輻輳によって引き起こされることが多い。
輻輳によってデータ送信が失敗した場合は、データを再送信するため、
さらにネットワークの渋滞を大きくすることになりかねない(→輻輳破壊 congestion collapse)。
この問題に対処するため、TCPは輻輳の測度としてパケット紛失を用い、
再送の時は一時的にデータ量を小さくして輻輳に対応する。
送信者は、受信したウィンドウサイズの半分に達するまで、データサイズを
指数関数的に大きくしていく。半分に達すると、増加率を減少させる。
発信元のポートを示す。 データを送信したプログラムを特定する。
宛先のポート示す。受信コンピュータのどのアプリケーションが データを受信すべきかを特定する。
順序番号。受信されたデータの順序乱れを直すのに用いられ、 確認通知番号を計算するのにも使用される。
確認通知番号。受信されたデータの順序番号を特定する。
TCPセグメントヘッダサイズ(32bit単位)。つまりペイロード部分までのオフセット。
予約。
あるフィールドが意味を持つかを示すビットパターン。
flag | field name | description |
---|---|---|
000001 | URG | urgent pointer(緊急ポインタ)が有効である。 |
000010 | ACK | Acknowledgement Number(確認応答番号)が有効である。 |
000100 | PSH | 転送強制機能。 |
001000 | RST | コネクションのリセットを要求。 |
010000 | SYN | sequence numberの同期を要求。 |
100000 | FIN | 送信の終了を示す。 |
受信バッファの残りサイズ(ウィンドウサイズ)。
TCPセグメントヘッダとTCPセグメントデータの検査合計。
割り込み信号などの緊急データの終了位置。