TCPの再送制御
TCPにおける再送制御を説明します。
確認応答が消失した場合
- 送信セグメントは届いているので、本来再送の必要はありません。
- ウインドウ制御していない場合、確認応答がなければ再送します。
- ウインドウ制御している場合、確認応答がなくてもウインドウサイズまでは再送する必要はありません。
- 例えば、ウインドウサイズ3000なら、3000オクテットまでは確認応答を受信しなくても、送信を続けることができます。
送信セグメントが消失した場合
- 受信側は今までに受信したデータに対する確認応答を返します。
- 送信側は、さらに3回同じ確認応答を受け取ると再送します。
- この確認応答を重複ACKといいます。
- この一連の再送手順を高速再送(Fast Retransmit)といいます。
- 重複ACKのしきい値は一般的に3です。
再送タイムアウトによる再送
重複ACKの個数が少ないと、Fast Retransmitは発動しません。その場合、再送タイムアウトにより、セグメントが再送されます。
遅延ACK
- ACKを遅延させて、複数のACKをひとつにまとめることを遅延ACKといいます。通信の効率化になります。
- しかし、送信を遅らせて送信をひとつにまとめるアルゴリズム(Nagleアルゴリズム)と併用すると、お互いに待ち時間が発生しやすくなります。
- リアルタイムな通信の場合は、Nagleアルゴリズムも遅延ACKも無効にすることもあります。
Early Retransmit
重複ACKのしきい値を減らすことで、再送させやすくします。