スライディングウィンドウ:窓を滑らせ再送
送信ウィンドウがパケット列の上を滑り、ACK で前進する。パケットを落として Go-Back-N と 選択再送(SR) の再送量の差を体感します。
4
12
5
下のパケット列のマスをクリックすると、その送信を1回だけ「ロス(消失)」させます(赤い✕)。窓の中なら再送の様子が見えます。
方式
—
窓 [base, base+W)
—
確認済み (base)
—
送信総数
—
うち再送
—
パケット列とスライディングウィンドウ(緑=確認済 / 紫枠=送信窓 / 青=送信中 / 赤✕=ロス)
ACK 確認済み
送信済み・ACK 待ち
再送された
未送信
ロス予約 / ロス発生
送信側は 連続した W 個(ウィンドウサイズ)まで、ACK を待たずにまとめて送れます。これがスライディングウィンドウです。
一番古い未確認パケットの番号を base と呼び、窓は
途中のパケットが消失(ロス)すると、Go-Back-N は「ロスした番号以降をまとめて送り直し」、選択再送(SR) は「ロストした番号だけ送り直し」ます。クリックでロスを起こし、再送量の差を見比べてみましょう。
一番古い未確認パケットの番号を base と呼び、窓は
[base, base+W) の範囲。base のパケットが ACK されると窓は右へ滑り(スライド)、次のパケットを送れるようになります。途中のパケットが消失(ロス)すると、Go-Back-N は「ロスした番号以降をまとめて送り直し」、選択再送(SR) は「ロストした番号だけ送り直し」ます。クリックでロスを起こし、再送量の差を見比べてみましょう。
いま何が起きている?
ここがポイント
- 窓 = 同時に送れる量 ── W が大きいほど ACK 待ちで止まらず、回線を多く使える(スループット向上)。
- base が進むと窓が滑る ── 一番古い未確認パケットが ACK されて初めて窓は右へ動き、新しい番号を送れる。
- Go-Back-N は単純だが無駄が多い ── ロスより後ろの「届いていた分」も捨てて送り直すため、再送数が膨らむ。
- 選択再送はロスした番号だけ送り直す ── 受信側のバッファが要るぶん複雑だが、再送が最小で効率がよい。