組み上げた構成が想定通りに動作しているか、そうでなければ何が問題なのかを発見する事は、いざ運用の場面で障害が発生した場合のトラブルシュートにも欠かせません。これからTremasharkを使って、実際にTrema内部のスイッチとコントローラ間で行われている通信を覗いていこうと思います。今回は、このTremasharkでリピーターハブ(rhub.rb)とラーニングスイッチ(learning-switch.rb)の通信動作を詳細に見ていきます。実際に仮想ホスト間で通信を発生させることで、両者がスイッチとどの様な関係性を持ち動作するのか、TremasharkのGUIを通してより具体的にイメージしてみましょう。Tremasharkの概要については前回の記事にてご紹介をしています。リピーターハブ(rhub.rb)の動作を視てみようリピーターハブは受信したパケットを複製し、ポートが繋がっている全ホストに向けて送信をします。前回のおさらいとして、以下手順に従いもう1度キャプチャを取得してみます。「-s」オプションを指定してリピーターハブ/仮想ホストを起動させることで、Tremasharkのイベントコレクタとユーザインターフェースも同時に立ち上がります。-sイベントを収集したいプロセスに「USR2」シグナルを送信し、イベントコレクタへのイベント通知を有効化します。今回はリピーターハブとスイッチデーモンの間のイベントを見るため、下図赤枠のファイルからUSR2シグナルを送信するためのプロセスID(PID)を取得します。tmp/pidkillコマンドを使い、各プロセスに対してUSR2シグナルを送信します。tmp/pid/switch.0x1.pid`vhost1からvhost2に対して2回pingを飛ばしてみます。-c2では、実際に取得したキャプチャ上でOpenFlowコントローラとOpenFlowスイッチがどの様に動作しているか、順に確認していきましょう。【vhost1からvhost2へのARP要求】1~2行目:Pingを送信する前にARPプロトコルでMACアドレスの解決が行われます。InメッセージでOpenFlowコントローラに問い合わせています。Outを指示しています。【vhost2からvhost1へのARP応答】5~6行目:vhost2はvhost1宛てにARP応答をするために、、ARP応答パケットを送信します。InメッセージでOpenFlowコントローラに問い合わせます。Outを指示しています。Outを指示しています。【vhost1からvhost2へのICMPエコー要求】9~10行目:MACアドレスの解決ができたvhost1は、vhost2宛てにICMPエコー要求パケット(通称:Ping)を送信します。InメッセージでOpenFlowコントローラに問い合わせます。Outで、パケットのフラッディングを指示します。【vhost2からvhost1へのICMPエコー応答】13~14行目:vhost2はICMPエコー応答をvhost1に返します。InメッセージでOpenFlowコントローラに問い合わせます。Outでパケットのフラッディングを指示します。以降に通信されるvhost1からvhost2へのICMPパケットはOpenFlowスイッチ内に登録されたフローテーブルにマッチするため、OpenFlowコントローラに問い合わせされることなくフォワーディングされていきます。vhost1からvhost2へのARP応答】17~24行目:vhost2はvhost1へARP要求パケットを送信します。その応答としてvhost1からvhost2へのARP応答パケットの送信がされています。OpenFlowスイッチ側で作成されたフローテーブルを確認してみましょう。actions=FLOODフローテーブルに書き込まれていることを確認できました。ICMP通信に関しては、n_packetsが1となっており、スイッチ側で通信が処理され、コントローラには問合せていないことが分かります。ラーニングスイッチ(learning-switch.rb)の動作を視てみようラーニングスイッチは、スイッチが受信したパケットの情報を学習し、それを元に宛先を特定して送信するという点で、上記のリピーターハブとは異なります。具体的には、ホストから受信したパケットの送信元MACアドレスとスイッチのポート番号をフォワーディングデータベース(FDB)に学習し、今まで学習してきた情報を元にパケットを宛先のホストへ転送します。Inは行われず、パケットの処理は全てスイッチ側だけで行われます。~ラーニングスイッチ編でご紹介していますので、ご参照下さい。それではリピーターハブの時と同様に、「-s」オプションを指定する事でラーニングスイッチ/仮想ホストと共にTremasharkのイベントコレクタとユーザインターフェースを起動させましょう。-sイベントコレクタへのイベント通知有効化も、先程の手順と大きな違いはありません。今回はラーニングスイッチとスイッチデーモンの間のイベントを見るため、下図赤枠のファイルからPIDを取得します。tmp/pid/switch.0x1.pid`vhost1からvhost2に対してpingを2回してみます。-c2では、キャプチャ上でOpenFlowコントローラとOpenFlowスイッチの動作を確認してみましょう。上記リピーターハブとの動作が異なる部分は赤文字で表記しています。【vhost1からvhost2へのARP要求】1~2行目:vhost1はPingを送信する前にARPプロトコルでMACアドレスの解決をしようとします。InメッセージでOpenFlowコントローラに問い合わせます。Inメッセージから送信元(vhost1)のMACアドレスとパケットの入ってきたポート番号をFDBに保存し、学習をします。Inで受け取ったパケットから宛先のMACアドレス(今回はARPなのでブロードキャスト)を使ってFDBを検索します。FDBにブロードキャストのMACアドレスは登録されていないため、ポート番号を取得できません。Outを指示しています。Modは送出しません。)【vhost2からvhost1へのARP応答】5~6行目:vhost2はvhost1宛てにARP応答をするために、ARP応答パケットを送信します。InメッセージでOpenFlowコントローラに問い合わせます。Inメッセージから送信元(vhost2)のMACアドレスとパケットの入ってきたポート番号をFDBに保存し、学習をします。Inで受け取ったパケットから宛先のMACアドレス(vhost1)を使ってFDBからポート番号を検索します。Modには宛先ポートを指定するように書き込み、スイッチに送信します。Outを指示しています。【vhost1からvhost2へのICMPエコー要求】9~10行目:MACアドレスの解決ができたvhost1は、vhost2宛てにICMPエコー要求を送信します。InメッセージでOpenFlowコントローラに問い合わせます。Inで受け取ったパケットから宛先のMACアドレス(vhost2)を使ってFDBからポート番号を検索します。Modには宛先ポートを指定するように書き込み、スイッチに送信します。Outを指示しています。【vhost2からvhost1へのICMPエコー応答】13~14行目:vhost2はICMPエコー応答をvhost1に返します。InメッセージでOpenFlowコントローラに問い合わせます。Inで受け取ったパケットから宛先のMACアドレス(vhost1)を使ってFDBからポート番号を検索します。Modには宛先ポートを指定するように書き込み、スイッチに送信します。Outを指示しています。Inは行われず、パケットの処理は全てスイッチ側のフローテーブルを参照して転送されます。vhost1からvhost2へのARP応答】17~24行目:vhost2はvhost1へARP要求パケットを送信します。その応答としてvhost1からvhost2へのARP応答パケットの送信がされています。OpenFlowスイッチ側で作成されたフローテーブルを確認してみましょう。actions=output:1フローテーブルに書き込まれていることを確認できました。ICMP通信に関しては、n_packetsが1となっており、スイッチ側で通信が処理され、コントローラには問合せていないことが分かります。ラーニングスイッチの場合、最初のARPリクエストについては、3~4行目の解説にある通り、Flow_Modを送出していないため、フローテーブルには書き込まれません。おわりにここまでTremasharkを活用しながら、リピーターハブとラーニングスイッチを対象にしてより視覚的に実際の通信を確認することができました。今回も最後までお付き合いを頂き、ありがとうございます。9新年あけましておめでとうございます。3何故、それが読まれたか~上半期・エンジニアブログ閲覧数ランキング~2013.6.12「何」を知っているかではなく、「誰」が知っているか2013.5.28戦後、人間尊重の信念を貫きとおした1人の経営者がいた!2013.5.24健康な心が、健康な会社を作る。2iPhone5発売!LTE普及には切実な背景が...2012.9.12「だれを選ぶか」をまず決めて、その後に「何をすべきか」を決める。2012.8.17会社を回すのに大事な3つの感覚。7プロジェクトはたいてい失敗に終わるんです。6月刊『ニュートップリーダー』に記事掲載&"想いを語る夕べ"体験会やります!2012.1.31【第4回】想いを語る夕べ~フォロー編~2012.1.23タニタの社員食堂は"トップの想い"から生まれた!?2012.1.13【第3回】想いを語る夕べ~実施編~2011.12.27オフィスで簡単エクササイズ!2011.12.13【第2回】想いを語る夕べ~準備編~2011.11.24【第1回】想いを語る夕べ~誕生編~2011.11.17「責任感だけで仕事をしていた・・・。