TCP
ネットワーク

TCPの信頼性について

■初めに

TCPはOSI参照モデルのトランスポート層にあたるプロトコルであり、他にはUDPなどがある。

  • TCP.... 送信したデータを相手が受け取った事を確認する仕組みがある。
  • UDP.... 送信したデータを相手が受け取ったかは確認しない。

今回はTCPの信頼性の要と言える機能として、確認応答と再送制御に関して考察してみました。

■確認応答とはデータの到達確認

正常時の通信フローが下記になります。

【ホストA】      【ホストB】
 データ送信→データ受信       
 確認応答受信←確認応答送信

データを受信した、ホストBは確認応答をホストAへ送信する。
ホストBから送信された、確認応答をホストAが受信する。

確認応答の事を、Ackパケットとも言う。

■再送制御

送信中のデータが喪失した場合や、確認応答が喪失した場合には、再送処理をする仕組みがある。

【データ喪失パターン】

【ホストA】      【ホストB】
 データ送信→喪失.....

 一定時間待っても確認応答が来ない.....
 
 データ再送→データ受信
 確認応答受信←確認応答送信

一定時間を待ってもホストBから確認応答が来ない場合はホストAがデータを再送する。

【確認応答喪失パターン】

【ホストA】      【ホストB】
 データ送信→データ受信
       喪失←確認応答送信

 ホストBはデータを受信していて
 確認応答も送信しているが、ホストAから見ると
 データが届いてないのか、データが届いてないのか確認応答が来てないのかはわからない。

 一定時間を待ってもホストBから
 確認応答が来ない場合はデータを再送する。

 データ再送→データ受信
 確認応答受信←確認応答送信

再送されたデータに関しては受信済みの為、厳密には下記の様な挙動となる。
受信済みのデータの識別にはシーケンス番号を使用している。

【ホストA】      【ホストB】
  データ送信(シーケンス番号:1)→データ受信
  喪失←応答確認送信

  データ再送(シーケンス番号:1)→既に受信しているので、破棄
  確認応答受信←確認応答送信

■まとめ

簡単ではありますが、確認応答と再送制御に関してまとめました。