FE EXAM

自動再送要求(ARQ)

誤りを検出したら送信側に再送を要求する誤り制御方式。TCPの再送制御もこの仕組みを使っています。

INTERACTIVE VISUALIZATION
送信
ACK
再送
正味フレーム数
4
総送信回数(再送込み)
5
方式
フレーム数4
誤りが起きるフレーム#1
送受信タイムライン
t0送信 #0フレーム0を送信
t1ACK #0ACK0(受信OK)
t2送信 #1フレーム1を送信
t3NAK #1誤り検出 → NAK1(再送要求)
t4再送 #1フレーム1を再送
t5ACK #1ACK1(受信OK)
t6送信 #2フレーム2を送信
t7ACK #2ACK2(受信OK)
t8送信 #3フレーム3を送信
t9ACK #3ACK3(受信OK)
解説

📌
ARQとは

ARQ(Automatic Repeat reQuest、自動再送要求)とは、データに誤りを見つけたら送信側にもう一度送り直してもらう誤り制御方式です。受信側は誤りを「検出」するだけでよく、訂正は再送に任せます。

身近な例では、電話で相手の声が聞き取れなかったときに「もう一度言ってください」とお願いするのと同じ。受信側が「正しく届いた」と返す合図が ACK、「誤りがあった」と返す合図が NAK です。上のツールで誤りフレームを変えると、再送のやり取りが変化します。

🔄
再送制御の手順

ARQ の基本的な流れは次の通りです。
① 送信:送信側がフレーム(データのまとまり)を送る
② 検査:受信側がパリティや CRC で誤りをチェック
③ 応答:正常なら ACK、誤りなら NAK を返す。一定時間返事が来なければタイムアウト
④ 再送:NAK やタイムアウトを受けたら、送信側がそのフレームを送り直す

この「届いたか確認 → ダメなら送り直す」という考え方は、インターネットの基盤である TCP の再送制御にも使われています。

⚙️
方式(Stop-and-Wait/Go-Back-N等)

ARQ には主に次の方式があります。

方式特徴長所短所
Stop-and-Wait(停止待機)1フレーム送るごとにACKを待つ仕組みが単純・実装が容易待ち時間が長く伝送効率が低い
Go-Back-N(連続送信)複数フレームを連続送信し、誤り以降をまとめて再送ACK待ちが減り効率が高い誤り以降の正常フレームも再送し無駄が出る

Stop-and-Wait(停止待機):1つ送るたびに返事を待つので確実だが遅い
Go-Back-N:まとめて送って効率を上げるが、誤りが出るとそれ以降をまとめて再送するため一部無駄が出る
選択的再送(Selective Repeat):誤ったフレームだけを再送する、より効率的な方式もある

💡
なぜ再送が必要なのか

送信側受信側フレーム#1 送信✗ ノイズで破損誤り検出!NAK「もう一度送って」再送(正しいデータ)受信OK!

結論:誤りを検出しただけでは正しいデータは届きません。「もう一度送り直してもらう」ことで、はじめて正しいデータが届きます。

なぜ再送が必要なのか? チェックサムやパリティ(=データのビットに特定のルールで検査用ビットを付け加える方式)といった誤り検出の仕組みは、「データが壊れているかどうか」を判断できますが、壊れた部分を自力で直す能力はありません。「どこが壊れたか」を特定するには元のデータが必要で、受信側にはもう届いてしまった壊れたデータしかありません。

そのため、誤りを見つけたら受信側は送信側に「もう一度送ってください(NAK)」と要求します。送信側が正しいデータを再送し、受信側がチェックサムで確認して問題なければ「受け取りました(ACK)」を返して完了です。
誤り検出:チェックサムやパリティが担当する「壊れていることを気づく」役割
誤り訂正:ARQ が担当する「正しいデータを届ける」役割
・この2つが組み合わさって、はじめて確実な通信が実現します

身近な例で考えると、荷物が壊れた状態で届いたとき、受け取り側は「この荷物は壊れている」と気づける(誤り検出)けれど、自分で元通りに直す(訂正)ことはできません。荷物を送った相手に連絡して(NAK)、送り直してもらう(再送)しかないのと同じです。

「1つずつ待つ」と「まとめて送る」の違い

Stop-and-Wait(1つずつ確認)#1待機#2待機#3▲ 確認(ACK)が来るまで次を送れない → 待ち時間が多い連続ARQ(まとめて送る)#1#2#3ACK#1,2,3#4#5▲ 確認を待たずに次々送れる → 効率が高い誤りが出たとき(Go-Back-N方式)#1OK#2NG#3破棄#2から全部再送

結論:Stop-and-Wait は確実だが遅く、連続ARQ(Go-Back-N など)はまとめて送って効率が高い。ただし誤りが出ると多めに再送する場合があります。

なぜ2つの方式があるのか? ARQ の「確認してから次を送る」という仕組みは確実ですが、確認を待っている間は何もできず回線が無駄になります。特に衛星通信のように往復に時間のかかる(遅延の大きい)回線では、確認待ちの時間が長くなり効率が極端に下がります。

Stop-and-Wait(停止待機方式)は「1つ送ったら必ずACKが来るまで止まる」方式です。シンプルで確実ですが、確認待ちの間は何も送れないため効率が悪くなります。

連続ARQ(Go-Back-N)は「確認を待たず複数のフレームを次々送る」方式です。効率は大きく向上しますが、誤りが出た場合にその番号以降のフレームをまとめて再送するため、正しく届いたフレームも再送されてしまう場合があります(無駄が生じる)。
選択再送(Selective Repeat):Go-Back-Nの無駄をなくし、誤りのあったフレームだけを再送する方式。より効率的だが受信側の仕組みが複雑になる

身近な例では、Stop-and-Waitは「1枚ずつ写真を送ってOKの返事を待ってから次を送る」、連続ARQは「まとめて10枚送っておいて、後で返事を受け取る」というイメージです。後者の方が速いですが、途中で1枚失敗したときの対処が複雑になります。

関連コンテンツ