【TCPの機能(順序制御、再送制御)について】

   このHPは、TCPの機能(順序制御、再送制御)についてまとめたものです。


1-1  パケットの順序制御
TCPはアプリケーションから大きなデータを受けとると、「MSS」※に分割し、複数のTCPセグメントとして送信する。
バラバラに分割されたデータは、受信側で「シーケンス番号を使用して正しい順に再構成(順序制御)される。また、受信側からの確認応答によって、相手がデータを完全に受信できたことを認識する。


※MTU / MSS
MTU はイーサネットの1つのフレームで送ることができる最大データサイズ、 MSS は TCP/IP の通信の際のデータの最大サイズ。
平均的なイーサネットでの場合、MTU は 「1500 バイト」。その Ethernetで TCP/IP のパケットを流す場合、 MSS は「MTU−IPヘッダ(20バイト)−TCPヘッダ(20バイト)=1460バイト」となる。






TCPのコネクション確立後にデータを送信する際、データに番号が付けられる。この番号を「シーケンス番号」という。
TCPでは、例えば、データ「1000」、「2000」、「3000」、「4000」を送信した場合、それぞれのデータに対して、相手から確認応答(ACK)を受信する。この確認応答(ACK)によって、送信側は相手にデータが確実に届いたことを判断する。




シーケンス番号は、スリーウェイハンドシェイクで決めた初期シーケンス番号を基点にしたバイト数を表わす。
バラバラに分割されたデータは、受信側で「シーケンス番号を使用して正しい順に再構成(順序制御)される。








1-2 TCPの再送制御
データを送信したホストは、データの送信後にこの確認応答を待つ。
確認応答されれば、データは相手のホストに到達したことになる。
もし、確認応答されなければ、データが喪失した可能性がある。

そこで、以下の図の様に、ある一定時間内に確認応答が帰ってこない場合には、データが損失したと判断して、もう1度同じデータを送信する。
これを「再送制御」という。
この機能により、パケットが途中で失われても、パケットを届けることができ、信頼性のある通信が可能になる。また、TCPでは次に受け取りたい番号を確認応答時に送信する。





確認応答されないのは、データ損失の他に、データの破損、、宛先にデータは届いたが、確認応答パケットが喪失した場合等の場合は、データを再送することになる。

このような問題を回避するため、TCPでは「再送タイマー」を設定する。
これは、ある一定の時間が経過しても確認応答が返ってこない場合は、エラーが発生したと判断してデータを再送信(再送制御)するというもの。
この場合は、データは届いているが、やはりデータを再送することになる。
これらの確認応答処理や再送制御等は、全てシーケンス番号を使って行われる。