令和5年度 ネットワークスペシャリスト 午前Ⅱ 問1 TCPのスロースタート
TCPのスロースタートにおける輻輳ウィンドウの増分規則を把握し、時間経過(RTT)に伴う指数関数的な成長を計算する手順を解説します。
【問題】
TCPのスロースタートアルゴリズムにおいて,輻輳(ふくそう)ウィンドウの初期値を1セグメント(MSS)とし,1セグメントのACKを受信するたびに輻輳ウィンドウを1セグメント増やすものとする。輻輳ウィンドウが16セグメントに達するまでに必要なRTT数は最小でいくつか。ここで,輻輳は発生せず,各セグメントに対するACKは個別に返されるものとする。
ア 4 イ 5 ウ 15 エ 16
【解説】
TCPのスロースタートフェーズでは、データ送信の効率を上げるために、ネットワークの許容容量を確認しながら送信量を急激に増加させます。
1. 基本規則の確認
初期状態:1 RTT(Round Trip Time)目に 1セグメント送信。
増分規則:ACKを1つ受信するごとに、輻輳ウィンドウ(CWND)を +1 する。
2. RTTごとの推移計算 各RTT終了時点でのCWNDの推移を追います。
開始時:$CWND = 1$
1 RTT目:
1セグメント送信 $\rightarrow$ 1つのACKを受信。
$CWND = 1 + 1 = 2$ となる。
2 RTT目:
2セグメント送信 $\rightarrow$ 2つのACKを受信。
1つ目のACKで $CWND = 2 + 1 = 3$、2つ目のACKで $CWND = 3 + 1 = 4$。
$CWND = 4$ となる。
3 RTT目:
4セグメント送信 $\rightarrow$ 4つのACKを受信。
最終的に $CWND = 4 + 4 = 8$ となる。
4 RTT目:
8セグメント送信 $\rightarrow$ 8つのACKを受信。
最終的に $CWND = 8 + 8 = 16$ となる。
このように、1 RTTごとにCWNDは前回の2倍($2^n$)に増加します。
3. 数式による表現 $n$ RTT後のCWNDを $W_n$ とすると、以下の式が成り立ちます。 $$W_n = 2^n$$ 本問では $W_n = 16$ となる $n$ を求めるため、 $$2^n = 16 \implies n = 4$$
Mermaid図解:CWNDの成長プロセス
sequenceDiagram
participant S as 送信側
participant R as 受信側
Note over S: RTT 0: CWND=1
S ->> R: Seg 1
R -->> S: ACK 1
Note over S: RTT 1終了: CWND=2
S ->> R: Seg 2, 3
R -->> S: ACK 2
R -->> S: ACK 3
Note over S: RTT 2終了: CWND=4
S ->> R: Seg 4, 5, 6, 7
R -->> S: ACK 4, 5, 6, 7
Note over S: RTT 3終了: CWND=8
S ->> R: Seg 8...15
R -->> S: ACK 8...15
Note over S: RTT 4終了: CWND=16
【選択肢の吟味】
| 選択肢 | 判定 | 解説 |
|---|---|---|
| ア | 正解 | 上記計算の通り、4 RTT経過時にCWNDは16に達する。 |
| イ | 誤り | 5 RTT経過するとCWNDは32に達するため、最小ではない。 |
| ウ | 誤り | ACKを受信するたびに+1されるため、ACKの総数(15個)と混同した数値。 |
| エ | 誤り | CWNDの目標値そのものであり、RTT数とは一致しない。 |
【ポイント】
スロースタート:ACK受信ごとにCWNDを増やすため、RTT単位で見ると2倍ずつ(指数関数的)に増加する。
輻輳回避フェーズとの違い:スロースタート閾値(ssthresh)到達後は、1 RTTごとに1 MSSしか増えない線形増加に変わる。
計算式:$初期値 \times 2^{RTT数} = 到達ウィンドウサイズ$ を活用する。

