令和5年度 ネットワークスペシャリスト 午前Ⅱ 問1「TCPの輻輳制御」

Tech

style_prompt: ipa_morning_2_specialist 本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

令和5年度 ネットワークスペシャリスト 午前Ⅱ 問1「TCPの輻輳制御」

TCPにおけるデータ転送速度の動的な調整メカニズムを問う問題。タイムアウト発生時のcwndとssthreshの更新ルールを正確に把握することが解法の核となる。

【問題】 TCPの輻輳(ふくそう)制御において、パケットの再送タイムアウトが発生したときの送信ウィンドウサイズの制御として、適切なものはどれか。ここで、cwndは輻輳ウィンドウサイズ、ssthreshはスロースタートしきい値とする。

ア cwndを1MSSに設定し、ssthreshをタイムアウト発生時のcwndの1/2に設定する。 イ cwndを現在の半分に設定し、ssthreshを現在のcwndに設定する。 ウ cwndとssthreshを共に1MSSに設定する。 エ cwndとssthreshを共に、タイムアウト発生時のcwndの1/2に設定する。

【解説】 TCPの輻輳制御(Congestion Control)は、ネットワークの混雑状況に応じて送信データ量を調整する仕組みである。主要な変数として、送信可能なデータ量を示す「輻輳ウィンドウ(cwnd)」と、制御モードを切り替える境界値である「スロースタートしきい値(ssthresh)」を用いる。

再送タイムアウトが発生した場合、TCPはネットワークが深刻な輻輳状態にあると判断し、送信量を最小限からやり直す制御を行う。

  1. ssthreshの更新: 輻輳発生時のcwndの半分(最低2MSS)に設定する。

  2. cwndの更新: 最小値である1MSS(Maximum Segment Size)にリセットする。

この後、cwndがssthreshに達するまでは指数関数的に増加(スロースタート)、ssthresh到達後は線形に増加(輻輳回避)させる。

$$ssthresh = \max\left(\frac{cwnd}{2}, 2 \times MSS\right)$$ $$cwnd = 1 \times MSS$$

graph TD
    A["データ送信開始"] --> B{"cwnd C["スロースタート: 指数関数的増加"]
    B -- No --> D["輻輳回避: 線形的増加"]
    C --> E{"タイムアウト発生?"}
    D --> E
    E -- Yes --> F["ssthresh = cwnd / 2"]
    F --> G["cwnd = 1 MSS"]
    G --> B

【選択肢の吟味】

選択肢 判定 解説
正解 タイムアウト時は、輻輳を解消するためcwndを最小化し、再開の目安となるssthreshを半減させる。
不正解 これは「高速再送(重複ACK)」発生時の「高速回復」に近い動作であるが、タイムアウト時はcwndを1にする必要がある。
不正解 ssthreshまで1MSSにすると、スロースタートが即座に終了し、効率的な帯域利用ができなくなる。
不正解 cwndを1にしないと、ネットワークの過負荷を即座に緩和することができない。

【ポイント】

  • タイムアウト時のリセット: タイムアウト時は、深刻な輻輳とみなし cwnd = 1 となる。

  • 3重複ACKとの違い: 重複ACKによる高速再送時は、軽微な輻輳とみなし cwnd は半分程度(実装による)に維持される。

  • ssthreshの役割: 指数関数的な増加から線形的な増加へ切り替える「安全な速度」の境界線。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました