順序制御
データをパケットに分割して送受信するネットワークでは、送信した順番通りに受信されるとは限らず、途中で順番が入れ替わることが起きる。受信側でデータを本来の順序に組み立て直したい場合には、送信側で通し番号を割り振るなどの順序制御が必要となる。
TCPの順序制御
インターネットなどのIP(Internet Protocol)ネットワークでは、信頼性の高いトランスポート層んプロトコルであるTCP(Transmission Control Protocol)が順序制御の機能を提供する。
TCPではデータを同じ長さのTCPセグメントに分割して送受信するが、TCP接続の確立(ハンドシェイク)時にランダムな初期値を決め、これを起点として各セグメントに「シーケンス番号」を記載する。
シーケンス番号は初期値に送信済みのバイト数を加算したもので、初期値が「100」で1000バイトずつ送信する場合、最初のセグメントが「100」、2番目が「1100」、3番目が「2100」…といった値になる。
受信側ではシーケンス番号とデータ長から、各セグメントの送信順やまだ到着していないセグメントの存在を知ることができ、前後が入れ替わって到着しても正しい順序に組み立て直すことができる。
ちなみに、受信側ではセグメントを受信するごとに、次に送るべきシーケンス番号を「ACK番号」(確認応答番号)として送信側に報告する。送信側ではセグメントを送信してから規定の時間を過ぎてもACK番号が報告されない場合、そのセグメントは経路途上で喪失したと判断して同じセグメントを再送する。この仕組みを「再送制御」という。
(2022.3.17更新)