コンピュータネットワークにおいて、再送(さいそう、英語: retransmission)とは、破損もしくは損失したパケットを再び送ることである。再送は、パケット通信ネットワーク上で動作するプロトコルによって信頼できる通信を提供するために使用される基本的なメカニズムのうちの1つである。
通常このようなネットワークは信頼性が低く、パケットが遅延・損傷・損失することなく順序どおりに配信される保証はない。そのようなネットワーク上で信頼性のある通信を提供するプロトコルでは、確認応答(データの宛先からの明示的な受信)、紛失または破損したパケットの再送(通常はタイムアウトによって開始される)、およびチェックサムを使用してその信頼性を確保する。
確認応答
ネットワークプロトコルにはいくつかの形式の確認応答(acknowledgement)があり、単独で使用することも、一緒に使用することもできる。
- 肯定応答(ACK, positive acknowledgement):受信者は、どのパケット・メッセージ・セグメントが正しく受信されたかを送信者に明示的に通知する。従って、肯定応答では、どのパケットが受信されなかったかを送信者に暗黙的に通知し、再送信が必要なパケットに関する詳細を提供する。
- 否定応答(NACK, negative acknowledgment):受信者は、どのパケット・メッセージ・セグメントが誤って受信されたために再送が必要になる可能性があるかを送信者に明示的に通知する(RFC 4077)。
- 選択的確認応答(SACK, selective acknowledgment):受信側は、ストリーム内のどのパケット・メッセージ・セグメントが確認応答されているかを(否定的または肯定的に)明示的にリストする。肯定選択的確認応答は、衛星インターネットアクセス(RFC 2488)に使用されるTCP(RFC 2018)のオプションである。
- 累積確認応答(cumulative acknowledgment):受信側は、ストリーム内のパケット・メッセージ・セグメントを正しく受信したことを確認し、前のパケットが正しく受信されたことを暗黙的に送信側に知らせる。 TCPは、TCPスライディングウィンドウで累積確認応答を使用する。
再送
再送は非常に単純な概念である。一方が他方に何かを送信するときは常に、受信されたことが確認できるまで、送信したデータのコピーを保持する。送信者は、保持されているコピーを使用してデータを自動的に再送する。再送の理由には以下のものがある。
- 送信者が、合理的な時間内に受信者が受信したことが確認できないとき(タイムアウト)。
- 送信者が、帯域内または帯域外の手段で、送信が失敗したことを発見したとき。
- 受信者が、期待されるデータが到着していないことを知り、それを送信者に通知したとき。
- 受信者が、データが到着したが損傷した状態にあることを知り、それを送信者に通知したとき。
関連項目