>MTUが1500バイトの通信回線システムにおいて、300KBのデータを送信することを考える。
つまり「データ部が1500バイトでパケット1つ」です。
なお、特に断りが無いので、この「300KBのデータ」には「IPヘッダ」も含む事とします。
>イーサネットフレーム(ヘッダー+FCS)にプリアンブルを付け送る
1パケットのデータを送るのに必要なバイト数は「プリアンブル8バイト + ヘッダー14バイト + データのバイト数 + FCS4バイト」になります。
なので、まず、パケット数を求めねばなりません。
300KB=307200B
307200÷1500=204.8=205パケット
増えるバイト数は「プリアンブル8バイト + ヘッダー14バイト + FCS4バイト = 26バイト」が205個です。
>すべてのデータを送るのに何ビット送ればよいか。
なので、トータルで送られるバイト数は「26 × 205 + 307200 = 312530バイト」で、ビット数にすると「312530バイト × 8 = 2500240ビット」です。
>1Mbps回線で送るのに必要な時間を計算しなさい。
1Mbpsで1秒間に送れるビット数は、1Mビット=1024Kビット=1024 × 1024ビット = 1048576ビットです。
2500240ビットを毎秒1048576ビットづつ送ると、すべて送るには2500240 ÷ 1048576 ≒ 2.3844146728515625秒かかります。
なお、もし「データはIPヘッダを付けて送り、300KBの中にはIPヘッダは含めない。IPヘッダにはオプションは無く、最短のIPヘッダを付加しているとする」と仮定すると、以下のようになります。
1パケットのデータを送るのに必要なバイト数は「プリアンブル8バイト + ヘッダー14バイト + IPヘッダ最短で20バイト + データのバイト数 + FCS4バイト」になります。
パケット数は、
300KB=307200B
307200÷(1500-20)≒207.5=208パケット
になります。
増えるバイト数は「プリアンブル8バイト + ヘッダー14バイト + IPヘッダ20バイト + FCS4バイト = 46バイト」が208個です。
トータルで送られるバイト数は「46 × 208 + 307200 = 316768バイト」で、ビット数にすると「316768バイト × 8 = 2534144ビット」です。
2534144ビットを毎秒1048576ビットづつ送ると、すべて送るには2534144 ÷ 1048576 ≒ 2.416748046875秒かかります。
ま、IPヘッダがあっても無くても、約2.3844146728515625秒が約2.416748046875秒になるだけ。誤差は約0.032333374023438秒なので、どっちでも同じようなもんです。
それに、上記の計算は「コリジョンが一切起きない」とか「ゲートウェイやルーターやスイッチンングハブを一切通らずにパケットが直通で流れている」など、特殊で「普通は有り得ない状態」に限った場合にしか適用できません。
コリジョンが起きて再送が入れば上記の計算より確実に遅くなりますし、パケットがゲートウェイやルーターやスイッチンングハブを通過する時にパケットが再構築された場合には遅延が発生します。
ぶっちゃけ「だいたいの所要時間は判るが、実際には計算値より遅くなるので、計算しても無意味」です。
お礼
とても詳しい文面で感謝します。大変参考になりました。