<p><style_prompt>Strict_Technical_Analysis</style_prompt>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">令和5年度 ネットワークスペシャリスト 午前Ⅱ 問1 TCPのスロースタート</h1>
<p>TCPのスロースタートにおける輻輳ウィンドウの増分規則を把握し、時間経過(RTT)に伴う指数関数的な成長を計算する手順を解説します。</p>
<h3 class="wp-block-heading">【問題】</h3>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>TCPのスロースタートアルゴリズムにおいて,輻輳(ふくそう)ウィンドウの初期値を1セグメント(MSS)とし,1セグメントのACKを受信するたびに輻輳ウィンドウを1セグメント増やすものとする。輻輳ウィンドウが16セグメントに達するまでに必要なRTT数は最小でいくつか。ここで,輻輳は発生せず,各セグメントに対するACKは個別に返されるものとする。</p>
<p>ア 4
イ 5
ウ 15
エ 16</p>
</blockquote>
<h3 class="wp-block-heading">【解説】</h3>
<p>TCPのスロースタートフェーズでは、データ送信の効率を上げるために、ネットワークの許容容量を確認しながら送信量を急激に増加させます。</p>
<p><strong>1. 基本規則の確認</strong></p>
<ul class="wp-block-list">
<li><p>初期状態:1 RTT(Round Trip Time)目に 1セグメント送信。</p></li>
<li><p>増分規則:ACKを1つ受信するごとに、輻輳ウィンドウ(CWND)を +1 する。</p></li>
</ul>
<p><strong>2. RTTごとの推移計算</strong>
各RTT終了時点でのCWNDの推移を追います。</p>
<ul class="wp-block-list">
<li><p><strong>開始時</strong>:$CWND = 1$</p></li>
<li><p><strong>1 RTT目</strong>:</p>
<ul>
<li><p>1セグメント送信 $\rightarrow$ 1つのACKを受信。</p></li>
<li><p>$CWND = 1 + 1 = 2$ となる。</p></li>
</ul></li>
<li><p><strong>2 RTT目</strong>:</p>
<ul>
<li><p>2セグメント送信 $\rightarrow$ 2つのACKを受信。</p></li>
<li><p>1つ目のACKで $CWND = 2 + 1 = 3$、2つ目のACKで $CWND = 3 + 1 = 4$。</p></li>
<li><p>$CWND = 4$ となる。</p></li>
</ul></li>
<li><p><strong>3 RTT目</strong>:</p>
<ul>
<li><p>4セグメント送信 $\rightarrow$ 4つのACKを受信。</p></li>
<li><p>最終的に $CWND = 4 + 4 = 8$ となる。</p></li>
</ul></li>
<li><p><strong>4 RTT目</strong>:</p>
<ul>
<li><p>8セグメント送信 $\rightarrow$ 8つのACKを受信。</p></li>
<li><p>最終的に $CWND = 8 + 8 = 16$ となる。</p></li>
</ul></li>
</ul>
<p>このように、1 RTTごとにCWNDは前回の2倍($2^n$)に増加します。</p>
<p><strong>3. 数式による表現</strong>
$n$ RTT後のCWNDを $W_n$ とすると、以下の式が成り立ちます。
$$W_n = 2^n$$
本問では $W_n = 16$ となる $n$ を求めるため、
$$2^n = 16 \implies n = 4$$</p>
<p><strong>Mermaid図解:CWNDの成長プロセス</strong></p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
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
</pre></div>
<h3 class="wp-block-heading">【選択肢の吟味】</h3>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">選択肢</th>
<th style="text-align:left;">判定</th>
<th style="text-align:left;">解説</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>ア</strong></td>
<td style="text-align:left;"><strong>正解</strong></td>
<td style="text-align:left;">上記計算の通り、4 RTT経過時にCWNDは16に達する。</td>
</tr>
<tr>
<td style="text-align:left;">イ</td>
<td style="text-align:left;">誤り</td>
<td style="text-align:left;">5 RTT経過するとCWNDは32に達するため、最小ではない。</td>
</tr>
<tr>
<td style="text-align:left;">ウ</td>
<td style="text-align:left;">誤り</td>
<td style="text-align:left;">ACKを受信するたびに+1されるため、ACKの総数(15個)と混同した数値。</td>
</tr>
<tr>
<td style="text-align:left;">エ</td>
<td style="text-align:left;">誤り</td>
<td style="text-align:left;">CWNDの目標値そのものであり、RTT数とは一致しない。</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">【ポイント】</h3>
<ul class="wp-block-list">
<li><p><strong>スロースタート</strong>:ACK受信ごとにCWNDを増やすため、RTT単位で見ると2倍ずつ(指数関数的)に増加する。</p></li>
<li><p><strong>輻輳回避フェーズとの違い</strong>:スロースタート閾値(ssthresh)到達後は、1 RTTごとに1 MSSしか増えない線形増加に変わる。</p></li>
<li><p><strong>計算式</strong>:$初期値 \times 2^{RTT数} = 到達ウィンドウサイズ$ を活用する。</p></li>
</ul>
Strict_Technical_Analysis本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証) です。
令和5年度 ネットワークスペシャリスト 午前Ⅱ 問1 TCPのスロースタート
TCPのスロースタートにおける輻輳ウィンドウの増分規則を把握し、時間経過(RTT)に伴う指数関数的な成長を計算する手順を解説します。
【問題】
TCPのスロースタートアルゴリズムにおいて,輻輳(ふくそう)ウィンドウの初期値を1セグメント(MSS)とし,1セグメントのACKを受信するたびに輻輳ウィンドウを1セグメント増やすものとする。輻輳ウィンドウが16セグメントに達するまでに必要なRTT数は最小でいくつか。ここで,輻輳は発生せず,各セグメントに対するACKは個別に返されるものとする。
ア 4
イ 5
ウ 15
エ 16
【解説】
TCPのスロースタートフェーズでは、データ送信の効率を上げるために、ネットワークの許容容量を確認しながら送信量を急激に増加させます。
1. 基本規則の確認
2. RTTごとの推移計算
各RTT終了時点でのCWNDの推移を追います。
開始時 :$CWND = 1$
1 RTT目 :
2 RTT目 :
3 RTT目 :
4 RTT目 :
このように、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数} = 到達ウィンドウサイズ$ を活用する。
ライセンス :本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント