再送制御 (サイソウセイギョ) とは | 意味や読み方など丁寧でわかりやすい用語解説
再送制御 (サイソウセイギョ) の読み方
日本語表記
再送制御 (サイソウセイギョ)
英語表記
retransmission control (リトランスミッションコントロール)
再送制御 (サイソウセイギョ) の意味や用語解説
再送制御とは、コンピュータネットワークにおけるデータ通信の信頼性を確保するための基本的な仕組みである。ネットワークを介してデータを送受信する際、送信したデータが途中で消失したり、破損したり、あるいは到着する順番が入れ替わったりすることがある。このような問題が発生すると、ファイルが正常に開けなくなったり、Webページが正しく表示されなかったりと、アプリケーションの動作に深刻な影響を及ぼす。再送制御は、送信側が送ったデータが受信側に正しく届いたかを確認し、もし問題があれば該当するデータを自動的に送り直すことで、これらの問題を解決する役割を担う。この仕組みにより、通信経路の品質が不安定であっても、アプリケーションレベルではデータが完全に、かつ正しい順序で届いたかのように振る舞うことができ、信頼性の高い通信が実現される。 再送制御の具体的な実装は、主にTCP (Transmission Control Protocol) と呼ばれるプロトコルで行われる。TCPは、今日のインターネット通信において広く利用されており、その信頼性の中核をなすのが再送制御である。この仕組みを理解するために、いくつかの重要な要素が存在する。第一に「シーケンス番号」である。送信側は、データをパケットという小さな単位に分割して送るが、その際に各パケットに一意の通し番号を割り振る。これがシーケンス番号であり、受信側はこの番号を見ることで、受け取ったパケットがどの部分のデータなのか、また途中で欠落しているパケットがないかを確認できる。第二に「確認応答(ACK: Acknowledgment)」である。受信側は、パケットを正常に受信すると、送信側に対して「このシーケンス番号までのデータを受け取りました」という応答を返す。このACKを受け取ることで、送信側はデータが正しく相手に届いたことを確認できる。 再送が発生する具体的なメカニズムは複数存在する。最も基本的なものが「再送タイムアウト(RTO: Retransmission Timeout)」に基づく再送である。送信側はパケットを送信した後、タイマーを起動し、一定時間内に対応するACKが返ってこない場合、そのパケットが途中で失われたと判断する。そして、タイマーが時間切れ(タイムアウト)になると、同じパケットを再度送信する。このタイムアウト時間は、ネットワークの混雑状況や通信相手との距離に応じて動的に調整され、効率的な通信を維持するようになっている。しかし、タイムアウトを待つ方式は、パケットロスが発生してから再送が開始されるまでに遅延が生じるという欠点がある。 この遅延を改善するために考案されたのが「高速再送(Fast Retransmit)」という仕組みである。受信側が期待していたシーケンス番号のパケットが届かず、それ以降のパケットが先に到着した場合、受信側はデータが欠落していることを検知する。この時、受信側は最後に正常に受信できたパケットに対するACKを繰り返し送信する。送信側が同じACKを複数回(通常は3回)受信すると、「特定のパケットが届いていない可能性が高い」と判断し、再送タイムアウトを待たずに即座に該当パケットを再送する。これにより、タイムアウトによる待ち時間をなくし、より迅速にデータの欠落から回復することが可能となり、通信スループットの低下を抑えることができる。 さらに、高速再送をより効率的に行うための拡張機能として「選択的再確認応答(SACK: Selective Acknowledgment)」がある。従来のACKでは、連続して受信できた最後のシーケンス番号しか送信側に伝えられなかった。そのため、複数のパケットがまばらに失われた場合、送信側はどこから再送すればよいか正確に判断できず、すでに受信済みのパケットまで無駄に再送してしまうことがあった。SACKを有効にすると、受信側は「この範囲のデータは受信済みだが、間のこの部分が抜けている」といった、より詳細な受信状況を送信側に伝えることができる。これにより、送信側は本当に失われたパケットだけをピンポイントで再送できるようになり、ネットワーク帯域の無駄遣いを防ぎ、通信効率をさらに高めることができる。 このように、再送制御はシーケンス番号と確認応答を基本とし、タイムアウト再送、高速再送、SACKといった複数の洗練されたメカニズムを組み合わせることで、信頼性の高いデータ転送を実現している。この技術は、Webブラウジング、メール送受信、ファイル転送など、データの完全性が求められる多くのアプリケーションの基盤となっており、システムエンジニアがネットワークの挙動を深く理解し、トラブルシューティングを行う上で不可欠な知識である。