問題

 端末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 端末Aと端末Bとの間の通信の様子
図1 端末Aと端末Bとの間の通信の様子
[画像のクリックで拡大表示]

 パケット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 ]秒である。

図2 受信バッファを拡大したときの通信の様子
図2 受信バッファを拡大したときの通信の様子
[画像のクリックで拡大表示]

 受信バッファを更に拡大することで、データの転送に掛かる時間を短縮することを考える。受信バッファの大きさを(1.2 X n)kバイトとすると、“送信済みのパケット数-受信済みのACK数”が[ c ]ときは、端末Aは端末Bの受信バッファにパケット1個分以上の空きがあることが分かるので、次のパケットを送信することができる。

 各処理に掛かる時間が図1及び図2のとおりであり、パケット1個の送信を完了してから、対応するACKの受信を開始するまでに掛かる時間は一定で、その時間が100ミリ秒であったとすると、データ1Mバイト当たりの転送時間は[ d ]秒まで短くすることができ、このときの最小の受信バッファの大きさは[ e ]kバイトである。