スクリーンショット_2020-01-30_17

【無料】H24年春期 問4ネットワーク

試験問題はこちら

テーマは「データ転送時のフロー制御」

フロー制御は、データを転送する際に受信側が取り漏らさないように、流すデータの量をコントロールすることです。午前試験にも出てくることがあり、押さえておきたい内容です。

問題の前半で、端末Aから端末Bにデータを送る際に

1)Aがパケット1つを送信
2)Bは受信バッファに格納
3)Bはバッファのデータを検査して抽出
4)Bは正しく受信したことをAに伝えるためにACK(アック)を送信
5)AはBからのACKを待って次のパケットを送信

という手順を取ることが書かれています。
AはBからのACKでBのバッファが空いた、すなわちBが次のパケットを受信可能になったと判断し、次の送信を始めるわけです。
人間同士のキャッチボールに例えるならこんな感じですね。

スクリーンショット 2020-01-31 11.25.02


【空欄a】

「パケット1個の送信を完了してから、対応するACKの受信を開始するまで」というのは、図で言うとこの青の部分になり、「その時間が100ミリ秒」と書かれています。

スクリーンショット 2020-02-01 09.49.05

問題の前半で
「パケット1個の送信に掛かる時間は10ミリ秒」
「ACK受信に掛かる時間は0.5ミリ秒」
「ACKの受信を完了してから次のパケットが送信可能になるまでに掛かる時間は0.5ミリ秒」
と書かれています(図にも同じことが書かれています)。

ということは、1個のパケットを送り始めて次のパケットを送り始めるまでにかかる時間は
10+100+0.5+0.5 = 111ミリ秒
になります。

スクリーンショット 2020-01-30 17.42.45


1個のパケットに入っているデータの量は、問題文の冒頭にあるとおり1kバイトです。
1Mバイトは1000kバイトと書かれているので、データを1Mバイト送信するには1000個のパケットを送ることになります。
1個のパケットに111ミリ秒かかるので
111ミリ秒×1000個=111秒
が答えです。

【空欄b】


今度は端末Bの受信バッファが2倍の2.4kバイトに広がった場合です。
Aから送るパケット1つのサイズは1.2kバイトなのでパケット2個分です。1つ送った後ACKを待たずにもう1つ送っても大丈夫ということになります。
先ほどのキャッチボールの例で言えば、ボールを取る人が2人になった状態ですね。

スクリーンショット 2020-01-31 11.25.22

ただしパケット2個分の受信バッファが埋まっていれば、空きを待つ、すなわち受信完了のACKを待たなくてはなりません。

先ほどはパケット1個ずつでしたが、バッファが2倍になったのでパケット2個まではACKを気にせず送信できます。3個目は、1個目のACKの受信を完了して次のパケットが送信可能になってから送ることができます。

空欄aで、1個目のパケットを送信し、そのACKが返ってきて次のパケットを送信可能になるまでの時間が111ミリ秒と分かりました。それを図2に書き込むとこの赤の部分です。

スクリーンショット 2020-01-30 17.43.43


これを見ると、111ミリ秒の間にパケット2個を送ることができていることが分かります。
1個あたりにすると、111ミリ秒÷2=55.5ミリ秒です。

データを1Mバイト送信するには1000個のパケットを送ることになるため、
55.5ミリ秒×1000=55.5秒
が答えです。

【空欄c】


受信バッファが(1.2×n)kバイトとした場合の話です。
「“送信済みのパケット数 ー 受信済みのACK数”」とは何かを考えます。

「受信済みのACK数」は、受信側(端末B)が「受信したよ」と返事した回数ですから、「受信を終えた数」と言えます。
ということは、「“送信済みのパケット数 ー 受信済みのACK数”」は、「送信した数」から「受信を終えた数」を引いたもの、つまり「送信したけど受信が終わっていない」ものになります。

「送信したけど受信が終わっていない」ものは、受信側のバッファに残っています。それがバッファを埋め尽くしていればもう送信はできません。
バッファを埋め尽くしている状態とは、「“送信済みのパケット数 ー 受信済みのACK数”」がバッファと同じ(1.2×n)kバイトの時です。

パケット1個は1.2kバイトなので、(1.2×n)kバイトはパケットn個分。
つまり
「送信済みのパケット数 ー 受信済みのACK数 = n」
の状態では送信ができません。
受信済みのACK数が増えて
「送信済みのパケット数 ー 受信済みのACK数 < n」
となれば、送信できるのです。

なので空欄cは「n未満の」が正解です。

【空欄d】


問題文は
「データ1Mバイト当たりの転送時間は[  d  ]秒まで短くすることができ」
と書かれているので、問われているのは転送時間を最も短くした場合の時間です。

転送時間を最も短くできるのは、ACKを気にせずにどんどん送っていい、つまり受信側のバッファがかなり大きくて、送信データが全部入る場合です。
キャッチボールの例で言えばこんな状態です。

スクリーンショット 2020-01-31 11.25.40


受信側からのACKを待つ必要がないのですから、転送時間を左右するのは送信側の時間だけです。
パケット1個を送る時間が10ミリ秒、次のパケットを送信可能になるまでが0.5ミリ秒ですから、10.5ミリ秒ごとにパケット1個(データ1kバイトが入っている)を送ることができることになります。


データ1Mバイト送るならパケット1000個送る必要があるので
10.5ミリ秒×1000=10.5秒
です。

【空欄e】


上記のように1Mバイトのデータを送るなら、バッファが1000パケット分あれば1000パケット連続で受信できるので最も高速にできます。


しかし実際には1000パケット分もバッファを用意する必要はありません。
なぜなら、1パケット目、2パケット目・・・と次々送っていくうちに時間が経って、1パケット目から受信の処理が終わってバッファが空き始めるからです。空いたバッファに次のパケットを入れられるので、それ以上大きなバッファを用意する必要はありません。

では1パケット目のバッファが開くのはいつか?
それは「1パケット目の受信が終わったよ」という1パケット目のACKが、送信側の端末Aに届いた時です。
(厳密にはそのACKが端末Bから送信された時ですが、問題の前提条件として「端末Bでの各処理に掛かる時間は分からない」となっているので、端末AはACKの受信でしか分かることができません)

パケット1個の送信にかかるのが10ミリ秒、送信完了からそのACK受信開始までが100ミリ秒ですから、1個目のパケット送信開始から110ミリ秒(=10+100ミリ秒)経過すれば、1個目のパケットの受信に使われたバッファが空いて、受信に使えるようになります。

スクリーンショット 2020-01-30 17.45.48


逆に言えば、110ミリ秒まではバッファの空きは出ません。
110ミリ秒まではパケットを貯め込める量のバッファが必要ということになります。

空欄dの時、パケット1個送るのにかかる実質的な時間は10.5ミリ秒と書きました。2個なら21.0(=10.5×2)ミリ秒、3個なら31.5(=10.5×3)ミリ秒です。
バッファに最初の空きが出る110ミリ秒の段階では、110÷10.5=10余り5、つまり11個目のパケットを送っている途中です。
(パケット10個送信完了まで105ミリ秒、11個送信完了まで115.5ミリ秒)

その段階、つまり11個目のパケットまでは一度に貯め込める量のバッファが必要です。
12個目のパケットを送信開始する115.5ミリ秒の時には1個目のバッファが空いているので、バッファはパケット11個分あれば十分で、12個分は要りません。

パケット1個は1.2kバイトですので、パケット11個分に必要な量は
1.2kバイト×11=13.2kバイト
です。

【解答】a)コ b)キ c)ウ d)エ e)カ

この記事が気に入ったらサポートをしてみませんか?