らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

CML で WAN Emulator を使い、品質が悪い回線を再現する

※ 後で思い出したのですが、VIRL にも遅延 / ジッタ / ロスの再現機能はありました。

「品質の悪い WAN 回線でネットワークがどのように動作するか?」を確認したい場合、WAN エミュレータを使います。 (VIRL にはありませんでしたが) CML では WAN Emulator が追加されたので、特別な用意や追加の設定無く、すぐに WAN エミュレータ機能を使い始めることが出来ます。 今回は CML に追加された WAN Emulator の簡単な使い方をメモしておきます。

検証環境のトポロジー

WAN Emulator は CML のデフォルトで存在します。

f:id:sig9:20200621100011p:plain

今回は以下のようなトポロジーを作ります。 インターネット (品質の悪い回線) 部分に WAN Emulator を使います。

f:id:sig9:20200621101044p:plain

CML 上に作った実際のトポロジーは以下です。 WAN Emulator は透過的に (レイヤー 2 的に) 動作しますでの、2 台の IOSv の間に WAN Emulator を挟み込むだけです。 WAN Emulator はインターフェイスがふたつしか無いので、3 つ以上のインターフェイスに接続することは出来ない 点に注意します。

f:id:sig9:20200621100014p:plain

IOSv の設定

IOSv は以下のように設定しました。

R1

hostname R1
!
interface GigabitEthernet0/0
 ip address 10.0.0.1 255.255.255.0
 no shutdown
end

R2

hostname R2
!
interface GigabitEthernet0/0
 ip address 10.0.0.2 255.255.255.0
 no shutdown
end

WAN Emulator の初期状態

WAN Emulator へコンソール接続すると以下のような画面が表示され、設定を確認したり変更することが出来ます。 ENTER を押してしまったのか、コンソール接続するといきなり Profile Selection になってしまったので今回は Cancel をクリックして Main Menu へ戻ります…

f:id:sig9:20200621100017p:plain

WAN Emulator の設定は Port Settings から行います。

f:id:sig9:20200621100020p:plain

初期値は以下になっていました。

f:id:sig9:20200621100024p:plain

項目
Latency (ms) 100
Jitter (ms) 0
Loss (%) 0.0
Bandwidth (kbit) 512

この設定のまま、R1 → R2 へ Ping してみると以下のようになりました。 WAN Emulator での制御は双方向に対して行われます。 R1 → R2 へ Ping した場合は「R1 → R2 への Request」と「R2 → R1 への Reply」の両方へ遅延 (初期値は 100msec) が挿入されている為、結果として約 200msec の遅延という結果になっています。

R1# ping 10.0.0.2 repeat 100  
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (100/100), round-trip min/avg/max = 204/206/212 ms

遅延設定を変更してみる

遅延 (Latency) を 30msec へ変更してみます。 設定変更は数値を変更して Apply Settings するだけで、一瞬で終わります。

f:id:sig9:20200621102026p:plain

Ping 結果は以下の通りです。 前述の通り、WAN Emulator の制御は双方向トラフィックに行われる為、30msec x 2 (往復分) で約 60msec の遅延を再現することが出来ています。

R1# ping 10.0.0.2 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (100/100), round-trip min/avg/max = 62/65/68 ms

ロスを設定する

ロス (Loss) を設定してみます。 具体的には以下のように「遅延は 50msec、ロスは 50.0% の確率」で設定しました。

f:id:sig9:20200621102622p:plain

Ping 結果は以下の通りです。 遅延は「片方向あたり 50msec」挿入しているので、往復では約 100msec の遅延を挿入出来ています。 ロスは「片方向で 50.0%」挿入しているので、「行きで 50.0%」「更に帰りで 50.0%」のロスが発生し、結果として想定通り、約 25% 程度のロスが発生しています。

R1# ping 10.0.0.2 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
.!...!...!........!!..!.....!.......!...!........!!.....!...!!.......!
.!......!.!.!!!.!!.....!...!!.
Success rate is 26 percent (26/100), round-trip min/avg/max = 100/105/108 ms

ジッタを設定する

ジッタ (Jitter) を設定してみます。 具体的には以下のように「ジッタは 100msec」で設定しました。

f:id:sig9:20200621103803p:plain

Ping 結果は以下の通りです。 片方向で 100msec のジッタを挿入しているので 0 ~ 200msec 程度のジッタが発生していることが分かります。

R1# ping 10.0.0.2 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (100/100), round-trip min/avg/max = 4/52/174 ms

遅延とジッタの違い

CML に限った話では無く、ネットワーク全般的な用語ですが、遅延とジッタの違いをまとめておきます。

  • 遅延は「平均的に遅くなっている状態」を意味します
  • ジッタは「早くなったり、遅くなったりする状態」を意味します。 この状態を「揺らぎ」「揺らいでいる」と呼ぶこともあります

遅延とジッタで Ping の実行結果例を比較すると分かりやすいかも知れません。 遅延では最小値と最大値の幅があまり無く、平均的に遅くなっていることが分かります。 ジッタは最小値と最大値の幅が大きく、結果にむらがある (揺らいでいる) ことが分かります。

項目 最小値 平均値 最大値
遅延 62 65 68
ジッタ 4/52/174

何もしない (遅延/ジッタ/ロスを挿入しない)

遅延やジッタ、ロスを挿入せず、「品質の良い回線」を再現すべく、これらの設定値をゼロにしてみました。 Bandwidth だけは初期値の 512kbps ですが、ここでは帯域幅を消費し尽くすようなテストは行わない為、このままで進めます。

f:id:sig9:20200621112742p:plain

Ping 結果は以下の通りです。 遅延やジッタ、ロスも無く、良好な応答が得られています。

R1# ping 10.0.0.2 repeat 100
Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (100/100), round-trip min/avg/max = 4/5/12 ms

事前定義されているプロファイルを利用する

WAN Emulator には事前に 10 種類のプロファイルが用意されており、プロファイル毎に遅延 / ロス / 帯域幅が決まっています。 Main MenuSelect Profile と辿ることでプロファイルの選択画面へ遷移出来ます。

f:id:sig9:20200621113500p:plain

見切れていますが、10 番目のプロファイルは OFF というもので、遅延などの制御を一切行わなくなります (品質の良い回線を再現したい場合に使います。

f:id:sig9:20200621113503p:plain

画面の下部にはカーソルをあわせているプロファイルの設定値が「遅延」「ロス」「帯域幅」の順序で表示されます。 例えば WIFI (good) というプロファイルにカーソルをあわせると「遅延は 40msec、ロスは 0.2%、帯域幅は 30000kbit」ということが分かります。

f:id:sig9:20200621113506p:plain

試しに WIFI (good) を選択した後で Port Settings を確認すると、プロファイル画面に表示されていた通りの設定値になっていることが分かります。

f:id:sig9:20200621114233p:plain

プロファイルを利用する際の注意点

プロファイルを利用する際は以下の点に注意する必要があります。

プロファイルを追加 / 変更 / 削除することは出来ない

以下を実行することは出来ません。 但し、プロファイルの追加や修正については「自分で Port Settins から設定を行う」ことで十分カバー出来ますので全く問題になりません。 むしろ、私に限ってはプロファイルはあまり利用せず、毎回、Port Settings から自分で値を設定しています。

  • プロファイルを新たに追加する
  • 登録済みプロファイルの設定内容を変更する
  • 登録済みプロファイルを削除する

プロファイルではジッタを挿入出来ない

WAN Emulator 自体には「ジッタを挿入する」機能がありますが、プロファイルには「ジッタの挿入も定義されたもの」がありません。 従って、ジッタを挿入したい場合は Port Settings から手動で挿入したいジッタの値を入力する必要があります。