■初めに
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)→既に受信しているので、破棄
確認応答受信←確認応答送信
■まとめ
簡単ではありますが、確認応答と再送制御に関してまとめました。