VoIP技術者のための実践講座 [第2回 WireSharkでSIPシグナリングを見る]
前回の「VoIP技術者のための実践講座[第1回WireSharkを使う]」においてインストールは完了していますので、今回は具体的な使い方をご紹介しようと思います。本記事ではタイトルにもあるようにVoIP(Voice/Video over Internet Protocolボイス/ビデオ オーバー インターネット プロトコル)技術者を想定しています。そのため今回はVoIPの代表的な通信プロトコルである、SIP (Session Initiation Protocol)のシグナリングを見ることを目標にWireSharkを使ってみましょう。
その前にSIP(Session Initiation Protocol)のシグナリングとはVoIP技術者、Network技術者にとっては当たり前かもしれませんが、RFC3261で規定されています。気合のある方は以下の原文を読みましょう。
https://www.ietf.org/rfc/rfc3261.txt
今回は上記RFC3261から代表的なSIPトラペゾイドの図を抜粋しました。
AliceとBobのSIPフォンとの間に2台のSIPサーバが存在し、SIPのシグナリングメッセージを仲介していることがわかります。INVITEリクエストから始まり200OKでセッションが確立しています。話が終わった後、Bobが電話を切っているのがBYEの向きからわかりますね。
Wiresharkで現実を確認
では、このような流れは本当に行われているのでしょうか。Wiresharkを利用して実際のネットワークをパケットキャプチャして確認してみましょう。今回以下の機器で調査を行いました。
SIP電話機A
SIP ID:y1046, ip address: 172.16.200.50
SIP電話機B
SIP ID: y1530, ip address: 172.16.200.152
SIPサーバー
172.16.200.84
実験はSIPサーバーにインストールしてあるWiresharkのパケットキャプチャをONにして、SIP電話機AからSIP電話機Bに電話を掛け、通話後にSIP電話機Bが電話を切ります。
<手順>
- WiresharkのパケットキャプチャをON(開始)
[Capture]->Startで開始です。また、緑のボタンを押しても同じです。
- SIP電話機Aから電話機Bへ電話を掛けます。SIP電話機Bは電話に出た後、数秒待って電話を切ります。
- WiresharkのパケットキャプチャをOFF
上記画面の[Capture]->Stopで停止できます。また、赤いボタンを押しても同じです。
それではキャプチャした内容を見ていきましょう。以下がキャプチャした直後の画面の一部です。実はこのSIPサーバーは今回実験で使用したSIP電話機以外のSIP端末からも接続されているため、色々なパケットが入り混じっています。これは実際の現場でも同様の事が多々あります。この画面のままでは人間の目で必要なパケットを読み解くことは不可能ですよね。
Wiresharkのフィルター機能を使う
そこで、今回の本題の一つです。Wiresharkのフィルター機能を使いましょう。今回見たい対象のメッセージはSIP電話機A(172.16.200.50)とSIP電話機B(172.16.200.152)とのやり取りですので、以下のようにフィルターを掛けてみます。
ip.addr==172.16.200.50 || ip.addr==172.16.200.152
画面上部のフィルター欄に記入します。
どうでしょうか。かなり見やすく絞れましたが、まだまだ不要なパケットがありますね(赤く塗りつぶされたパケット以外が不要なパケットです)。今回見たいパケットはSIPプロトコルのメッセージだけのはずです。そのためさらにフィルターにsip条件を追加します。
(ip.addr==172.16.200.50 || ip.addr==172.16.200.152)&&sip
どうでしょうか。欲しいパケットの情報だけがスッキリとフィルタリングされて見えたのではないでしょうか。また、それぞれのパケットの中を見たい場合はその行をクリックするだけでOKです。
グラフでフローを見る
プロの方は上記まで絞れるともうOKですが慣れない人はもう少しビジュアルで見たいかもしれません。
その時は以下のように“SIP Flows”のメニューを使用します。(Wireshark 2.6.5の場合。2018年12月時点の最新バージョンです。 )
少し前のバージョンをご使用の方は以下の通り“Flow Graph”を使用します。
(画面はWireshark 1.12.xの場合です。 )
すると最初に冒頭に紹介したRFCのメッセージ概念図みたいなフローグラフが現れます。
SIP電話機AとSIP電話機BがSIPサーバーを介してメッセージをやり取りしていることがわかりますね。冒頭のRFCの概念図と今回の実験での違うところは「407メッセージが飛んでいる」ところと、「仲介しているSIPサーバーが1台」だけの所でしょうか。
いかがでしょうか。今回はシンプルな構成でSIPのメッセージングを見てきました。簡単ですが、非常に重要な部分でもあります。次回はSIPサーバーだけでなくIP PBXが構成に参加するとどういうメッセージングのやり取りになるかご紹介しようと思います。
このWireSharkのフローはRFCのフローと違い、ACKやBYEもSIPサーバを経由してますがなぜでしょうね。ウチでもサーバを経由してるのでそちらが一般的みたいですが。
確かに。RFCではACKやBYEはSIPサーバを経由しなくてもよい仕様になっていますね。ではなぜ商用のSIPサーバではこれらのメッセージも経由するのでしょうか。それには理由があります。次回触れたいと思います。