指数バックオフ

読み:しすうばっくおふ / 英語表記:exponential backoff

通信の再送を繰り返す際に、待ち時間やその選択範囲を2倍など一定の倍率で増やしていく制御方式。再送の頻度を下げ、ネットワークやサーバの負担を抑える。

イマシルちゃんの解説

通信に失敗した直後に何度も送り直すと、混雑をさらに悪化させることがあるよ。
指数バックオフは、失敗が続くほど再送までの待ち時間を長くする制御方式なんだ。
例えば待ち時間を前回の2倍にして、送り直す頻度を下げるよ。
これでネットワークやサーバが回復するための時間を取れるの。
ただ、全員が同じ時間だけ待つと、次の再送も重なることがあるんだ。
そこで待ち時間にジッタというランダムな揺らぎを加える方法も使われるよ。
待つ間隔を広げるだけでなく、送り直す時刻もばらけさせるんだ。

より深い解説

定義

指数バックオフは、送信が失敗したと判断したとき、次の再送までの待ち時間を、失敗の回数に応じて指数関数的に(多くは倍々に)長くするアルゴリズムである。待ち時間にランダムな揺らぎを加えて、複数の送信者の再送のタイミングがそろわないようにすることが多い。

CoAPでの再送

CoAPでは、確認が必要なメッセージ(CON)を送ったあと、確認応答(ACK)が返らなければ、指数バックオフで再送する。

項目既定値(RFC 7252)
最初の待ち時間ACK_TIMEOUT(2秒)× 1~ACK_RANDOM_FACTOR(1.5)の間のランダムな値
再送ごとの待ち時間前回の2倍
最大の再送回数4回

最初の待ち時間を2秒とした例では、最初の送信から2秒後に再送し、その後は4秒、8秒、16秒ずつ待って再送する。再送4回で初回を含む送信は5回となる。最後の再送後も定められた待ち時間内に確認が返らなければ失敗として扱い、無限に送り続けることはない。

値と手順はRFC 7252の再送規則に定められている。

使われている場面

場面内容
初期のイーサネット(CSMA/CD)衝突のたびに、待ち時間を選ぶ範囲を2倍に広げ、その中からランダムに選ぶ(バイナリエクスポネンシャルバックオフ)
無線LAN(CSMA/CA)送信の前のランダムな待ち時間の範囲(コンテンションウィンドウ)を、失敗のたびに広げる
TCPの再送再送タイマー(RTO)がタイムアウトするたびに、次のRTOを2倍にする
CoAPACKが返らないCONの再送
Web APIやクラウドのクライアント一時的なエラーのとき、待ち時間を増やしながら再試行する

ランダムにする理由

多数の機器が同時に失敗して、同じ規則で同じ時間だけ待つと、再送がまた同時に起こり、衝突や混雑を繰り返してしまう。待ち時間にランダムな揺らぎ(ジッタ)を加えることで、再送のタイミングがばらけ、成功しやすくなる。

同じ考え方で、多数のIoT機器が決まった時刻にいっせいにデータを送ると、サーバやネットワークに負荷が集中する。測定の後、ランダムな時間だけ待ってから送るようにすれば、負荷の集中を避けられる。

実際の試験ではここに出る!全5問

ネットワークスペシャリスト

午後Ⅱ
午前Ⅱ

この用語が出てくる記事

↑