パソコン1台でネットワークを作る
Mininet は、ホスト、スイッチ、リンクをパソコン1台の中に作る、ネットワークの試験用ツールです。本物のケーブルを買わなくても、つなぎ方を何度でも作り直せます。
このレッスンでは、小さなネットワークを作り、pingall ですべての組に通信できるかを調べます。
このレッスンのゴール
メモ
小さな試験用ネットワークを作り、pingall で通信を調べられる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ホスト | 試験用の、仮想のコンピュータ | h1 |
| トポロジー | 機器のつなぎ方 | |
| リンク | 2つの機器をつなぐ、仮想のケーブル | |
| Mininet | 仮想のネットワークを1台の中に作るツール | |
| pingall | すべてのホストの組に ping を送る試験 |
学生が入力するセルは、このプレビューでは空白です。
Mininet はホストを名前空間で作る
Mininet のホストは、本物のコンピュータではありません。Linux の1つの OS の中に作る、独立したネットワーク環境です。名前空間と呼びます。
スイッチは Open vSwitch で、コントローラも同じ中で動きます。リンクは、仮想のケーブルです。形は --topo で選びます。
形の指定とホスト、スイッチの数
| 指定 | ホスト | スイッチ | 形 |
|---|---|---|---|
| single,2 | 2 | 1 | 1台のスイッチに2台 |
| single,4 | 4 | 1 | 1台のスイッチに4台 |
| linear,3 | 3 | 3 | スイッチが一列で、各スイッチに1台 |
| tree,depth=2,fanout=2 | 4 | 3 | 根のスイッチの下に2台、その下に各2台 |
学生が入力するセルは、このプレビューでは空白です。
Mininet はラボの br0 を消す
Mininet は、始まるときと終わるときに、Open vSwitch のブリッジをすべて消します。ラボの br0 も消えます。
消えた br0 は、sudo sdnlab flows で作り直せます。このレッスンの Run は、先に Mininet だけをまとめて試し、最後に作り直すのが安全です。
2台のホストで pingall
sudo mn --mac --test pingallここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Mininet の出力は作った順に読む
出力には、まず Adding hosts と Adding switches が出ます。続いて、ホストとスイッチの間のリンクの一覧が出ます。次に Ping の行が、組ごとに並びます。
最後の Results の行が答えです。0% dropped (2/2 received) は、2回送って2回とも届いたという意味です。
pingall は全員から全員へ送る
ホストが n 台なら、各ホストが他の n - 1 台に送ります。だから ping の数は、n 掛ける n - 1 です。自分自身には送りません。
ホストが4台なら 4 掛ける 3 で12です。台数が増えると、組は急に増えます。
例: ホストの数と ping の数
| ホストの数 | 1台が送る相手 | ping の数 |
|---|---|---|
| 2 | 1 | 2 |
| 3 | 2 | 6 |
| 4 | 3 | 12 |
| 5 | 4 | 20 |
学生が入力するセルは、このプレビューでは空白です。
4台を1台のスイッチに
sudo mn --mac --topo single,4 --test pingall 2>&1 | grep Resultsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
スイッチを3台、一列に
sudo mn --mac --topo linear,3 --test pingall 2>&1 | grep Resultsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
木の形にする
sudo mn --mac --topo tree,depth=2,fanout=2 --test pingall 2>&1 | grep Resultsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
全部届くのは、コントローラが規則を書くから
規則のないスイッチは、何も運びません。それなのに pingall が全部届くのは、Mininet のコントローラが、必要な規則を書くからです。
次の例は、2台のホストの通信のあとに、スイッチの規則表を見たものです。数字や時間は、実行のたびに変わります。
例: コントローラが書いた規則
OFPST_FLOW reply (OF1.3) (xid=0x2):
priority=1,arp,in_port=2,dl_src=00:00:00:00:00:02,dl_dst=00:00:00:00:00:01 actions=output:1
priority=1,icmp,in_port=1,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02 actions=output:2
priority=1,icmp,in_port=2,dl_src=00:00:00:00:00:02,dl_dst=00:00:00:00:00:01 actions=output:1
priority=0 actions=CONTROLLER:128よくある間違い
注意
pingall が全部届いたら、ネットワークの規則は正しい、と思いがちです。実際は、試験用コントローラが「何でも通す」規則を書いているだけかもしれません。届いたかどうかと、意図した規則かどうかは別の確認です。
残ったものを片づける
sudo mn -cここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。