基本情報技術者 2012年 春期 午後 問04
データ転送時のフロー制御に関する次の記述を読んで、設問に答えよ。
端末Aから端末Bにデータを転送する。端末Aでは、データを1kバイト単位に分割し、分割したデータをそれぞれ一つずつのパケットに格納して送信する。パケット一つの大きさは1.2kバイトである。端末Bでは、受信したパケットを受信バッファに格納し、受信処理として、パケットの整合性の検査とパケットからのデータ抽出を行う。その後、パケットを正しく受信したことを知らせるために、端末AにACKを送信する。受信処理後は直ちに受信バッファの再利用が可能となる。端末Bの受信バッファの大きさは1.2kバイトである。端末Aでは、端末Bの受信バッファの大きさは判明しているが、端末Bでの各処理に掛かる時間は分からない。
端末Aは、送信したパケットに対応する端末BからのACKを受信することで、端末Bの受信バッファに空きができたことを検知し、次のパケットを送信する。
端末Aで、パケット1個の送信に掛かる時間は10ミリ秒、ACK受信に掛かる時間は0.5ミリ秒、ACKの受信を完了してから次のパケットが送信可能になるまでに掛かる時間は0.5ミリ秒である。
端末Aと端末Bとの間の通信の様子と、端末Aでの各処理に掛かる時間を、図1に示す。

パケット1個の送信を完了してから、対応するACKの受信を開始するまでに掛かる時間は一定で、その時間が100ミリ秒であったとすると、データ1Mバイトを送信し、次のパケットが送信可能となるまでの時間(以下、データ1Mバイト当たりの転送時間という)はa秒である。ここで、1Mバイトは1,000kバイトとし、パケットやACKは確実に相手に届くものとする。
データの転送に掛かる時間を短縮するために、端末Bの受信バッファを2.4kバイトに拡大した。
端末Aは、端末Bの受信バッファに空きがあることが確かなときは、送信したパケットに対応するACKの受信を待たずに次のパケットを送信することができる。すなわち、“送信済みのパケット数 − 受信済みのACK数”が1以下であれば、端末Aは次のパケットを送信できる。パケット1個の送信を完了してから次のパケットが送信可能になるまでに掛かる時間は0.5ミリ秒であり、その他に掛かる時間は受信バッファの大きさが1.2kバイトのときと同じである。
パケットの送信とACKの受信、及びパケットの受信とACKの送信は、並行して行うことができる。このときの通信の様子を、図2に示す。
このとき、データ1Mバイト当たりの転送時間はb秒である。

受信バッファを更に拡大することで、データの転送に掛かる時間を短縮することを考える。受信バッファの大きさを(1.2 × n)kバイトとすると、“送信済みのパケット数 − 受信済みのACK数”がcときは、端末Aは端末Bの受信バッファにパケット1個分以上の空きがあることが分かるので、次のパケットを送信することができる。
各処理に掛かる時間が図1及び図2のとおりであり、パケット1個の送信を完了してから、対応するACKの受信を開始するまでに掛かる時間は一定で、その時間が100ミリ秒であったとすると、データ1Mバイト当たりの転送時間はd秒まで短くすることができ、このときの最小の受信バッファの大きさはekバイトである。
設問1:
問題文を見る 本文中のに入れる正しい答えを、解答群の中から選べ。
a, b, dに関する解答群
ア:8.3
イ:8.8
ウ:10
エ:10.5
オ:46.3
カ:50
キ:55.5
ク:92.5
ケ:100
コ:111
cに関する解答群
ア:n以下の
イ:n以上の
ウ:n未満の
エ:nより大きい
eに関する解答群
ア:9
イ:10
ウ:10.8
エ:11
オ:12
カ:13.2
キ:14.4
模範解答
a:コ、b:キ、c:ウ、d:エ、e:カ
解説
解答の導き方
まず、パケットは送るデータを小分けにして入れたものです。本文では、データを「1kバイト単位」に分け、1個のパケットを送るのに「10ミリ秒」掛かるとあります。したがって、1Mバイトのデータは
に分けられます。
また、ACK(Acknowledgment:データを正しく受信したことを知らせる確認応答)は、端末Bがパケットを受信した後に端末Aへ返します。端末Aが受信バッファ(受信したデータを一時的に置く場所)の空きを確認してから次を送る仕組みは、フロー制御(相手の受信能力に合わせて送信量を調整する仕組み)です。
a:受信バッファが1.2kバイトのとき
受信バッファにはパケットを1個しか置けません。そのため、端末Aは1個のパケットを送った後、対応するACKを受信するまで次のパケットを送れません。
1個のパケットを送信し始めてから、次のパケットが送信可能になるまでの時間を順に足します。
- パケットの送信:10ミリ秒
- パケット送信完了からACK受信開始まで:100ミリ秒
- ACKの受信:0.5ミリ秒
- ACK受信完了から次のパケットが送信可能になるまで:0.5ミリ秒
したがって、1パケットごとの時間は
です。1,000個では
となります。
b:受信バッファが2.4kバイトのとき
バッファにはパケットを2個置けます。端末Aは、ACKを待たずに最初の2個を続けて送信できます。パケット1の送信後、0.5ミリ秒で次のパケットを送信できるので、最初の2個は次のように送られます。
- パケット1の送信に10ミリ秒
- 次の送信まで0.5ミリ秒
- パケット2の送信に10ミリ秒
パケット1の送信が終わるのは、送信開始から10ミリ秒後です。そこから100ミリ秒後にACKの受信が始まり、受信に0.5ミリ秒掛かります。さらに0.5ミリ秒後には次のパケットが送信可能となるため、パケット3を送信できるのは、パケット1の送信開始から
です。つまり、2個ずつ送る場合、次の2個を送り始められるまでの間隔は111ミリ秒です。
1,000個のパケットは500組なので、次のパケットが送信可能になるまでの時間は
です。2個分の送信をしている間に、次の送信に必要なACKを待つ時間を重ねられるため、aより短くなります。
c:受信バッファを kバイトにしたとき
このバッファには、パケットを個入れられます。「送信済みのパケット数 − 受信済みのACK数」は、端末AがまだACKを受け取っていないパケットの数です。
この数がに達すると、バッファがいっぱいになっている可能性があるため、安全のために次のパケットを送れません。一方、この数が未満なら、少なくとも1個分の空きがあると判断できます。
したがって、条件は「未満」です。
d:十分な大きさの受信バッファがあるときの転送時間
ACKを待つ間も、バッファに空きがあれば次のパケットを送信できます。バッファが十分に大きければ、ACKを待つ時間で送信が止まりません。
パケットを続けて送るときは、1個の送信に10ミリ秒、その次のパケットが送信可能になるまでに0.5ミリ秒掛かります。よって、連続送信時の間隔は
です。1,000個を送り、次のパケットが送信可能になるまでの時間は
です。ACKを待つ時間を送信と並行させても、この送信間隔より速くはできません。
e:その転送時間を実現する最小の受信バッファ
10.5ミリ秒間隔で送信を続けると、パケット1の送信開始から次のパケットが送信可能になるまでの111ミリ秒間に、次のように送信できます。
- パケット1:0ミリ秒
- パケット2:10.5ミリ秒
- パケット3:21ミリ秒
- …
- パケット11:105ミリ秒
パケット1のACK受信が終わるのは110.5ミリ秒後で、その0.5ミリ秒後には次のパケットを送信できます。したがって、パケット11まで送れるバッファがあれば、送信を止めずに済みます。
パケット10個分のバッファでは、パケット11を送ろうとする時点で空きがなくなり、ACKを待つため送信が止まります。よって、必要な最小の大きさは
です。
誤りやすいポイント
- ACKの受信時間だけでなく、ACK受信後に次のパケットが送信可能になるまでの0.5ミリ秒も数えます。
- 受信バッファが複数パケット分ある場合、ACKを待つ時間と次のパケットの送信時間を重ねられます。すべての時間を単純に足すわけではありません。
- 「送信済みのパケット数 − 受信済みのACK数」がと同じなら、バッファに空きがあるとは確認できません。次を送れるのは未満のときです。
- dでは、ACKを待たずに送信を続けられる場合の最短時間を求めます。ACKの遅れではなく、パケットの送信と次の送信準備に掛かる時間が下限を決めます。
FAQ
Q: なぜACKを受信するまで、バッファが空いたと判断できないのですか?
A: 端末Aは端末Bの受信処理に掛かる時間を知らないためです。ACKが届けば、パケットが正しく受信され、受信バッファに空きができたことを確認できます。
A: 端末Aは端末Bの受信処理に掛かる時間を知らないためです。ACKが届けば、パケットが正しく受信され、受信バッファに空きができたことを確認できます。
Q: バッファを大きくすると、なぜ転送時間が短くなるのですか?
A: ACKを待っている間にも、受信バッファに空きがあれば次のパケットを送れるからです。送信とACK受信を並行させることで、待ち時間を減らせます。
A: ACKを待っている間にも、受信バッファに空きがあれば次のパケットを送れるからです。送信とACK受信を並行させることで、待ち時間を減らせます。
Q: バッファをさらに大きくすれば、10.5秒より短くできますか?
A: できません。10.5秒は、パケットの送信と次の送信準備を続けた場合の時間です。バッファを大きくしてACK待ちをなくしても、この送信間隔より速くは送れません。
A: できません。10.5秒は、パケットの送信と次の送信準備を続けた場合の時間です。バッファを大きくしてACK待ちをなくしても、この送信間隔より速くは送れません。
関連キーワード: フロー制御、受信バッファ、パケット、ACK、ストップアンドウェイト、ウィンドウ制御



