HOME»基本情報技術者平成24年春期問題»午後問4
基本情報技術者過去問題 平成24年春期 午後問4
⇄問題文と設問を画面2分割で開く⇱問題PDF問4 ネットワーク
データ転送時のフロー制御に関する次の記述を読んで,設問に答えよ。
端末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 バイ卜である。
端末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 バイ卜である。
設問
本文中の に入れる正しい答えを,解答群の中から選べ。
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:
解答
- a=コ
- b=キ
- c=ウ
- d=エ
- e=カ
解説
〔aについて〕
設問中にある以下の時間を整理して図1に書き込むと下図のようになります。パケット1個の送信命令を出してから、次のパケットが送信可能となる時間は、次の3つの時間の合計です。
10+100+0.5+0.5=111ミリ秒
パケット1個当たりに含まれる正味データ量(ペイロード)は1kバイトなので、1Mバイトのデータは1,000個のパケットに分割されます。1,000個のパケットを転送するためには、上記の111ミリ秒のサイクルを1,000回繰り返す必要があるので、データ1Mバイト当たりの転送時間は、
111ミリ秒×1,000個=111,000ミリ秒=111秒
∴a=コ:111
〔bについて〕
図2の方法では「2つのパケットを送信→ACK待ち→2つのパケットを送信」というサイクルを繰り返します。この方法では、1個目のACK受信待ち時間に2個目のパケットを送信するので、図1と同じ111ミリ秒の間に2個のパケットを送信できます。送信するパケット数は1,000個なので、データ1Mバイト当たりの転送時間は、
(1,000個÷2)×111ミリ秒=55,500ミリ秒=55.5秒
∴b=キ:55.5
〔cについて〕
パケット1つの大きさは 1.2k バイトですから、受信バッファが (1.2×n)k バイトだとすると n 個までのパケットを格納しておけます。"送信済みパケット数-受信済のACK数"は「送信を行ったが受信確認ができていないパケット数」、つまり受信側で受信処理中のパケット数を表すので、この数が受信バッファに格納できるパケットの最大数(n)と同じであれば受信バッファは一杯、nより少なければ受信バッファには空きがあり送信が可能であると判断できます。
∴c=ウ:n未満の
〔dについて〕
パケットの送信とACKの受信は並行して行うことができるため、受信バッファが十分に多ければ、ACK受信の待ち時間なしでパケットの送信を繰り返すことが可能になります。ACK受信の待ち時間がなかったとすると、1パケットを送信する時間間隔は、送信時間"10ミリ秒"+次のパケットが送信可能になるまでに掛かる"0.5ミリ秒"の合計"10.5ミリ秒"となるので、パケット1,000個を送信するのに要する時間は、
10.5ミリ秒×1,000個=10,500(ミリ秒)=10.5秒
∴d=エ:10.5
〔eについて〕
送信側で1つ目のパケットのACKが受信されるのは、初回のパケットの送信完了時点から100ミリ秒後なので「10ミリ秒+100ミリ秒=110ミリ秒後」です。
1個目の送信開始時点を0ミリ秒とすると、m個目の送信開始は以下のようにスタートから「10.5×(m-1)ミリ秒後」という式で表すことができます。
10.5(m-1)<110
10.5m-10.5<110
10.5m<120.5
m<11.476…
11個とわかります(11個目がスタートから105ミリ秒後に送信可能となる)。
パケットを送信するためには、そのパケットの送信時点でバッファに空きがあることが求められます。11個目の送信時点ではそれまで送信したパケット(1~10個目)に対するACKは一切受信していないので、受信バッファには10個分のパケットが格納されていることになります。よって、11個目の送信時点で受信バッファに空きがあるためには、少なくとも11個のパケットを格納できる容量が求められます。なお、12個目以後の送信はACK受信の後になるので空きができます。
パケット1つの大きさは 1.2k バイトなので、11個分の容量は、
1.2kバイト×11個=13.2kバイト
∴e=カ:13.2
設問中にある以下の時間を整理して図1に書き込むと下図のようになります。パケット1個の送信命令を出してから、次のパケットが送信可能となる時間は、次の3つの時間の合計です。
- パケット1個の送信処理完了後、対応するACKの受信を開始するまでの掛かる時間:100ミリ秒
- ACK受信に掛かる時間:0.5ミリ秒
- ACK受信を完了してから次のパケットが送信可能になるまでに掛かる時間:0.5ミリ秒
10+100+0.5+0.5=111ミリ秒
パケット1個当たりに含まれる正味データ量(ペイロード)は1kバイトなので、1Mバイトのデータは1,000個のパケットに分割されます。1,000個のパケットを転送するためには、上記の111ミリ秒のサイクルを1,000回繰り返す必要があるので、データ1Mバイト当たりの転送時間は、
111ミリ秒×1,000個=111,000ミリ秒=111秒
∴a=コ:111
〔bについて〕
図2の方法では「2つのパケットを送信→ACK待ち→2つのパケットを送信」というサイクルを繰り返します。この方法では、1個目のACK受信待ち時間に2個目のパケットを送信するので、図1と同じ111ミリ秒の間に2個のパケットを送信できます。送信するパケット数は1,000個なので、データ1Mバイト当たりの転送時間は、
(1,000個÷2)×111ミリ秒=55,500ミリ秒=55.5秒
∴b=キ:55.5
〔cについて〕
パケット1つの大きさは 1.2k バイトですから、受信バッファが (1.2×n)k バイトだとすると n 個までのパケットを格納しておけます。"送信済みパケット数-受信済のACK数"は「送信を行ったが受信確認ができていないパケット数」、つまり受信側で受信処理中のパケット数を表すので、この数が受信バッファに格納できるパケットの最大数(n)と同じであれば受信バッファは一杯、nより少なければ受信バッファには空きがあり送信が可能であると判断できます。
∴c=ウ:n未満の
〔dについて〕
パケットの送信とACKの受信は並行して行うことができるため、受信バッファが十分に多ければ、ACK受信の待ち時間なしでパケットの送信を繰り返すことが可能になります。ACK受信の待ち時間がなかったとすると、1パケットを送信する時間間隔は、送信時間"10ミリ秒"+次のパケットが送信可能になるまでに掛かる"0.5ミリ秒"の合計"10.5ミリ秒"となるので、パケット1,000個を送信するのに要する時間は、
10.5ミリ秒×1,000個=10,500(ミリ秒)=10.5秒
∴d=エ:10.5
〔eについて〕
送信側で1つ目のパケットのACKが受信されるのは、初回のパケットの送信完了時点から100ミリ秒後なので「10ミリ秒+100ミリ秒=110ミリ秒後」です。
1個目の送信開始時点を0ミリ秒とすると、m個目の送信開始は以下のようにスタートから「10.5×(m-1)ミリ秒後」という式で表すことができます。
- 2個目の送信開始…10.5ミリ秒後
- 3個目の送信開始…21ミリ秒後
- 4個目の送信開始…31.5ミリ秒後
- m個目の送信開始…10.5×(m-1)ミリ秒後
10.5(m-1)<110
10.5m-10.5<110
10.5m<120.5
m<11.476…
11個とわかります(11個目がスタートから105ミリ秒後に送信可能となる)。
パケットを送信するためには、そのパケットの送信時点でバッファに空きがあることが求められます。11個目の送信時点ではそれまで送信したパケット(1~10個目)に対するACKは一切受信していないので、受信バッファには10個分のパケットが格納されていることになります。よって、11個目の送信時点で受信バッファに空きがあるためには、少なくとも11個のパケットを格納できる容量が求められます。なお、12個目以後の送信はACK受信の後になるので空きができます。
パケット1つの大きさは 1.2k バイトなので、11個分の容量は、
1.2kバイト×11個=13.2kバイト
∴e=カ:13.2