再送制御 【retransmission control】
概要
再送制御(retransmission control)とは、ネットワーク上で通信する二者間で行なう通信制御の一つで、送信したデータが経路途上で失われた際に再送信すること。IPネットワークでTCPが行なう再送制御がよく知られる。データをパケットに分割して送受信するネットワークでは、パケットが途中の中継機器や回線で何らかの理由で喪失することがある。完全に通信不能になるとは限らず、いくつかのパケットだけが失われ残りはきちんと届くという状況が起こり得る。
「発信されたが途中で失われた」ことを受信側が直接知ることは難しいため、受信側が届いた分について受信確認を返信し、送信側では送信から一定の時間を経ても受信確認が届かないものは喪失したと推認してもう一度送り直すという制御が行われる。
TCPの再送制御
インターネットなどのIP(Internet Protocol)ネットワークでは、信頼性の高いトランスポート層プロトコルであるTCP(Transmission Control Protocol)が再送制御の機能を提供する。
TCPでは接続の確立(ハンドシェイク)時にランダムな初期値を決め、これを起点として各セグメントに「シーケンス番号」を記載する。各セグメントには初期値に送信済みのバイト数を加算した番号が与えられ、初期値が「100」で1000バイトずつ送信する場合、最初のセグメントが「100」、2番目が「1100」、3番目が「2100」…といった値になる。
受信側では到着したセグメントのシーケンス番号とデータ長から、次に送信してほしいシーケンス番号を算出して「ACK番号」(確認応答番号)として送信側に報告する。送信から規定の時間を過ぎても次のセグメントのACK番号が届かない場合、送信側は当該セグメントが失われたとみなして同じセグメントの再送を行なう。
ちなみに、送信時に付加されるシーケンス番号はセグメントの通し番号および送信順も表しており、受信側で到着順が前後した場合でも正しい順序に組み立て直すことができる。この仕組みを「順序制御」という。