ネットワークは作る前に試す
ある学校が、すべてのクラスが同時に動画を流しても、ネットワークが耐えられるか知りたいと考えています。確かめるためにケーブルを買う人はいません。技術者はプログラムの中にネットワークを作ります。それがシミュレーターで、動かして、パケットがどう動くかを確かめます。
このレッスンが終わると
メモ
模擬ネットワークを動かして、その遅延とパケット損失を読むことができます。
キーワード
- シミュレーター:ネットワークをまねるプログラム。
- ノード:ネットワークの中の 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++ プログラムを採点するチェックがあります。自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。