クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ネットワークシミュレーションの基礎

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

仮想マシンラボ読了目安 13分コマンド9個

ネットワークは作る前に試す

ある学校が、すべてのクラスが同時に動画を流しても、ネットワークが耐えられるか知りたいと考えています。確かめるためにケーブルを買う人はいません。技術者はプログラムの中にネットワークを作ります。それがシミュレーターで、動かして、パケットがどう動くかを確かめます。

このレッスンが終わると

メモ

模擬ネットワークを動かして、その遅延とパケット損失を読むことができます。

キーワード

  • シミュレーター:ネットワークをまねるプログラム。
  • ノード:ネットワークの中の 1 台のコンピューター。
  • 遅延:1 ビットがリンクを渡るのにかかる時間。
  • データレート:リンクが 1 秒に運べるビットの数。
  • パケット損失:送ったのに届かなかったパケット。

ウォームアップ:すでに知っていること

メモ

頭の中で答えましょう。1. パケットとは何ですか。2. ルーターは何をしますか。3. 速いリンクは、短いリンクと同じですか。3 つ目の答えはすぐに使います。

始める前に

メモ

このレッスンの上にあるバーのラボを起動を押します。このラボは、あなた専用の Ubuntu マシンまるごとなので、コンテナより起動に少し時間がかかります。下の実行ボタンは、それぞれのコマンドをマシンのターミナルに順番に入力します。すべて同じセッションで動きます。「マシンはまだ起動中です」と出たら、数秒待ってからもう一度押します。様子を見たり、自分でコマンドを打ったりしたいときは、バーのターミナルを開く(新しいタブ)を押します。

ネットワークは短いプログラムで書ける

あなたのファイルはフォルダー ns3 にあります。最初のコマンドでそこに入ります。first.cc は 2 つのノードを作って 1 本のリンクでつなぎ、エコーサーバーに 1 つパケットを送ります。サーバーはそれを送り返します。sim build はそれを ns-3 に対してコンパイルし、数秒で終わります。できたプログラムの名前は first です。実行すると、1 行目はクライアントがパケットを送った時刻、2 行目は返事が戻った時刻を示します。

コマンド
cd ns3

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
sim build first.cc

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
./first

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

チェック

ヒント

往復にどれくらいかかりましたか。答え: 7 ミリ秒より少し長くかかりました。クライアントは 2 秒に送り、返事は約 2.0074 秒に戻りました。

トレースはすべてのパケットを見せる

ns-3 は first-0-0.pcap も書き出しました。ノード 0 のデバイスを通ったすべてのパケットの記録です。pcap ファイルは、tcpdump のような道具が読む本物の形式です。sim pcap はそれを 1 行に 1 パケットで、秒単位の時刻つきで一覧にします。行は 2 つあります。2.000000 の要求と、数ミリ秒あとの返事で、どちらにも 1024 バイトのデータがあります。

コマンド
sim pcap first-0-0.pcap

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

リンクの速さは、パケットが進む速さだと考える人が多くいます。そうではありません。遅延は 1 ビットが渡るのにかかる時間、データレートはノードがリンクにビットを送り出す速さです。遅いリンクでは、大きなパケットを送り出すのに時間がかかります。長いリンクでは、大きくても小さくても、どのパケットも着くまでに時間がかかります。

遅延とデータレートは別のもの

2 つの設定はコマンドラインにあります。1 つ目の実行は、レートはそのままでリンクの遅延を長くします。2 つ目は、遅延はそのままでレートを 1 Mbps に落とします。どちらも、前に見た 7 ミリ秒より少し長い往復時間と比べましょう。50 ms の遅延は、パケットが 2 回渡るので、約 96 ms を足します。レートを落とすと約 13 ms 増えます。すべてのビットを線に送り出すのに時間がかかるからです。

コマンド
./first --delay=50ms

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
./first --rate=1Mbps

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

チェック

ヒント

パケットの大きさが関係してくるのは、遅延とデータレートのどちらの設定ですか。答え:データレートです。大きなパケットは線に送り出すビットが多くなります。遅延は、どのパケットでも同じです。

ボトルネックでパケットは失われる

bottleneck.cc では、複数の送信者がそれぞれルーターへの速いリンクを持ち、ルーターから受信者までは遅いリンクが 1 本です。FlowMonitor が、各フローの送信数と到着数を数えます。4 Mbps の送信者 2 つを 10 Mbps のボトルネックに入れると、すべてのパケットが届きます。2 つ目の実行では、1 Mbps のフロー 5 本を 4 Mbps のリンクに入れます。ルーターのキューがいっぱいで、入りきらないものを捨てるので、各フローの約 5 分の 1 が失われます。

コマンド
sim build bottleneck.cc

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
./bottleneck --senders=2

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
./bottleneck --senders=5 --each=1Mbps --bottleneck=4Mbps

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最後のチェック

ヒント

前に戻らずに答えましょう。1. シミュレーターは何をしますか。2. pcap ファイルとは何ですか。3. 大きなパケットで遅くなるのは、遅延とデータレートのどちらですか。4. ボトルネックでパケットが失われるのはいつですか。答え:プログラムの中でネットワークをまねる。デバイス上のパケットの記録。データレート。リンクが運べる以上に送られて、キューがいっぱいのとき。では、ホームフォルダーの README.md を、cat ~/README.md で開きましょう。2 つのシナリオは、あなたが書きます。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒一人ひとりの専用コピーです。このレッスンは VM ラボで進めます。生徒一人ひとりが、ns-3 の入った自分専用の Ubuntu マシンを持ち、実行ボタンはそのターミナルに入力して、表示された結果を見せます。学習のポイント:1. シミュレーターはプログラムの中でネットワークをまねる。2. トレースはすべてのパケットを記録する。3. 遅延とデータレートは別のもので、大きなパケットはレートで遅くなる。4. リンクが運べる以上に送ると、パケットが失われる。よくある間違い:速さと遅延を同じと考えること。用意するもの:ラボとブラウザー。ヒント:1 Mbps の実行の前に、遅延とレートのどちらが大きく変わるかをクラスに予想させましょう。ラボ自体には、隠した値で 2 つの C++ プログラムを採点するチェックがあります。自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。

このラボとソースについて: ネットワークシミュレーションのラボ:ns-3 シミュレーターを 1 台の専用 Ubuntu VM で

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。