<p><style_prompt></style_prompt></p>
<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">令和5年度 ネットワークスペシャリスト試験 午前Ⅱ 問4 スライディングウィンドウ</h1>
<p>データの送信効率を高めるスライディングウィンドウ方式において、ACK待ちによる遅延を避けるために必要なウィンドウサイズを計算します。</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>伝送速度 10M ビット/秒、伝搬遅延(片道)10ミリ秒の回線を使用し、100K バイトのデータを 1,000 バイトずつのパケットに分割して送信する。スライディングウィンドウ方式で、応答確認(ACK)を待たずに連続して送信できるパケット数の最大値(ウィンドウサイズ)をいくつ以上にすれば、送信側がパケットの送信を中断することなく、最短の時間で全データの送信を完了できるか。ここで、パケットの送信間隔は考慮しないものとし、ACK のサイズは無視できるほど小さいものとする。</p>
<p>ア 11
イ 25
ウ 26
エ 251</p>
</blockquote>
<p>【解説】
本問の解法は、<strong>「送信側が最初のパケットを送り出してから、そのパケットに対するACKを受け取るまでの時間」</strong>の間に、どれだけのデータを送出し続けられるかを求めることに集約されます。</p>
<ol class="wp-block-list">
<li><p><strong>往復時間(RTT: Round Trip Time)の算出</strong>
送信完了からACK受信までの間に、信号が往復する必要があります。
$$RTT = 伝搬遅延(片道) \times 2$$
$$RTT = 10\, \text{ms} \times 2 = 20\, \text{ms} = 0.02\, \text{s}$$</p></li>
<li><p><strong>1パケットの送出時間の算出</strong>
1,000バイトのパケット(8,000ビット)を10Mビット/秒の回線で送る時間です。
$$送出時間 = \frac{8,000\, \text{bit}}{10 \times 10^6\, \text{bit/s}} = 0.0008\, \text{s} = 0.8\, \text{ms}$$</p></li>
<li><p><strong>ACK待ちが発生しないための条件</strong>
送信側がパケットを連続して送り出し、最初のACKが戻ってくるまでに全パケットを送り終えない(またはちょうど送り終える)ウィンドウサイズを $W$ とします。</p>
<p>最初のパケットを送り始めてからACKが戻るまでの総時間は「送出時間 + 往復時間」です。
$$総時間 = 0.8\, \text{ms} + 20\, \text{ms} = 20.8\, \text{ms}$$</p></li>
<li><p><strong>ウィンドウサイズの計算</strong>
この $20.8\,\text{ms}$ の間に送出可能なパケット数 $W$ を求めます。
$$W \times 0.8\, \text{ms} \geqq 20.8\, \text{ms}$$
$$W \geqq \frac{20.8}{0.8} = 26$$</p></li>
</ol>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
sequenceDiagram
participant "送信側"
participant "受信側"
Note over 送信側: パケット1送信開始 (0ms)
"送信側" ->> "受信側": パケット1 (送出完了: 0.8ms)
Note over 受信側: パケット1受信完了 (0.8+10=10.8ms)
"受信側" -->> "送信側": ACK1返送
Note over 送信側: ACK1受信完了 (10.8+10=20.8ms)
Note right of 送信側: この20.8msの間、休みなく送り続ける
</pre></div>
<p>【選択肢の吟味】</p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:center;">選択肢</th>
<th style="text-align:center;">判定</th>
<th>解説</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center;">ア</td>
<td style="text-align:center;">誤り</td>
<td>11パケットでは、$11 \times 0.8 = 8.8\,\text{ms}$ で送信が止まり、ACK待ちが発生します。</td>
</tr>
<tr>
<td style="text-align:center;">イ</td>
<td style="text-align:center;">誤り</td>
<td>25パケットでは、$25 \times 0.8 = 20.0\,\text{ms}$ となり、あと0.8ms分足りません。</td>
</tr>
<tr>
<td style="text-align:center;"><strong>ウ</strong></td>
<td style="text-align:center;"><strong>正解</strong></td>
<td>計算結果 26 と一致します。</td>
</tr>
<tr>
<td style="text-align:center;">エ</td>
<td style="text-align:center;">誤り</td>
<td>251は全パケット数($100\text{KB} / 1000\text{B} = 100$)を超える過剰な値です。</td>
</tr>
</tbody>
</table></figure>
<p>【ポイント】</p>
<ul class="wp-block-list">
<li><p><strong>スライディングウィンドウ</strong>:ACKを待たずに一定量のデータを送信する仕組み。</p></li>
<li><p><strong>ACK待ち回避</strong>:ウィンドウサイズを「(RTT + 送出時間) ÷ 1パケット送出時間」以上にする。</p></li>
<li><p><strong>単位変換</strong>:ビットとバイト、ミリ秒と秒の変換ミスに注意する。</p></li>
</ul>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
令和5年度 ネットワークスペシャリスト試験 午前Ⅱ 問4 スライディングウィンドウ
データの送信効率を高めるスライディングウィンドウ方式において、ACK待ちによる遅延を避けるために必要なウィンドウサイズを計算します。
伝送速度 10M ビット/秒、伝搬遅延(片道)10ミリ秒の回線を使用し、100K バイトのデータを 1,000 バイトずつのパケットに分割して送信する。スライディングウィンドウ方式で、応答確認(ACK)を待たずに連続して送信できるパケット数の最大値(ウィンドウサイズ)をいくつ以上にすれば、送信側がパケットの送信を中断することなく、最短の時間で全データの送信を完了できるか。ここで、パケットの送信間隔は考慮しないものとし、ACK のサイズは無視できるほど小さいものとする。
ア 11
イ 25
ウ 26
エ 251
【解説】
本問の解法は、「送信側が最初のパケットを送り出してから、そのパケットに対するACKを受け取るまでの時間」の間に、どれだけのデータを送出し続けられるかを求めることに集約されます。
往復時間(RTT: Round Trip Time)の算出
送信完了からACK受信までの間に、信号が往復する必要があります。
$$RTT = 伝搬遅延(片道) \times 2$$
$$RTT = 10\, \text{ms} \times 2 = 20\, \text{ms} = 0.02\, \text{s}$$
1パケットの送出時間の算出
1,000バイトのパケット(8,000ビット)を10Mビット/秒の回線で送る時間です。
$$送出時間 = \frac{8,000\, \text{bit}}{10 \times 10^6\, \text{bit/s}} = 0.0008\, \text{s} = 0.8\, \text{ms}$$
ACK待ちが発生しないための条件
送信側がパケットを連続して送り出し、最初のACKが戻ってくるまでに全パケットを送り終えない(またはちょうど送り終える)ウィンドウサイズを $W$ とします。
最初のパケットを送り始めてからACKが戻るまでの総時間は「送出時間 + 往復時間」です。
$$総時間 = 0.8\, \text{ms} + 20\, \text{ms} = 20.8\, \text{ms}$$
ウィンドウサイズの計算
この $20.8\,\text{ms}$ の間に送出可能なパケット数 $W$ を求めます。
$$W \times 0.8\, \text{ms} \geqq 20.8\, \text{ms}$$
$$W \geqq \frac{20.8}{0.8} = 26$$
sequenceDiagram
participant "送信側"
participant "受信側"
Note over 送信側: パケット1送信開始 (0ms)
"送信側" ->> "受信側": パケット1 (送出完了: 0.8ms)
Note over 受信側: パケット1受信完了 (0.8+10=10.8ms)
"受信側" -->> "送信側": ACK1返送
Note over 送信側: ACK1受信完了 (10.8+10=20.8ms)
Note right of 送信側: この20.8msの間、休みなく送り続ける
【選択肢の吟味】
| 選択肢 |
判定 |
解説 |
| ア |
誤り |
11パケットでは、$11 \times 0.8 = 8.8\,\text{ms}$ で送信が止まり、ACK待ちが発生します。 |
| イ |
誤り |
25パケットでは、$25 \times 0.8 = 20.0\,\text{ms}$ となり、あと0.8ms分足りません。 |
| ウ |
正解 |
計算結果 26 と一致します。 |
| エ |
誤り |
251は全パケット数($100\text{KB} / 1000\text{B} = 100$)を超える過剰な値です。 |
【ポイント】
スライディングウィンドウ:ACKを待たずに一定量のデータを送信する仕組み。
ACK待ち回避:ウィンドウサイズを「(RTT + 送出時間) ÷ 1パケット送出時間」以上にする。
単位変換:ビットとバイト、ミリ秒と秒の変換ミスに注意する。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント