WiresharkでVoIP解析 ~パケットから音声品質を測定~
総務省によると、メタル回線を使った従来の電話サービスは2024年1月からIP網への移行が始まり、2025年1月に移行完了が予定されています。
出典:総務省-PSTNマイグレーションに関連する制度整備等の状況について(令和3年6月17日)
VoIPは2000年代にIP電話とともに発展、普及した技術です。IP網への移行にあたり、VoIPを使ったクラウドの音声通話サービスの増加が予想されています。
今回は、VoIPの仕組みとWiresharkでできるVoIP解析について解説します。
目次
VoIPとは
VoIPとは、Voice over Internet Protocolの略で、文字通りIPネットワーク上で利用する音声通話の技術を指します。仕組みとしては、アナログの音声をデジタル化し、それをIPパケットにして、ネットワークに送受信することで、音声通話を実現します。
VoIPで重要な役割を果たしている技術として、「呼制御(シグナリング)」と「音声信号の変換(コーデック)」が挙げられます。
呼制御(シグナリング)技術と関連するプロトコル
呼制御(シグナリング)とは、VoIP通信の際に通話の確立から解除までの一連のプロセスを管理します。呼制御プロトコルは、音声データ自体ではなく、通信の制御情報を扱うため、通信品質や通話内容には直接関与しませんが、確実な通信の確立や適切な通話制御には欠かせない要素です。
一般的な呼制御の流れは以下の通りです。これはアナログ電話での流れと非常に似ています。
- 通話の開始要求(セッションの確立): 通話を開始する際、通信の参加者は相手に通話を要求するシグナルを送信します。この要求には、通話の開始者や通話の属性(音声通話、ビデオ通話など)などの情報が含まれます。
- 通話の応答(セッションの確立応答): 相手側は通話の受諾や拒否などの応答を行います。受諾の場合、通話が確立され、通信が開始される準備が整います。
- 通話中の制御: 通話中には、通話の制御情報が交換されます。例えば、通話中に通話の転送やミュート、通話の終了などが行われる際、これらの情報はシグナリングを通じて伝達されます。
- 通話の終了: 通話が終了する際、通話の終了要求が送信されます。相手側がこれに応答することで、通話が正式に終了します。
代表的な呼制御プロトコルには、SIP(Session Initiation Protocol)、H.323、MGCP(Media Gateway Control Protocol)があります。
呼制御プロトコルでセッションを確立したあと、音声データの送受信には一般的にRTPプロトコルが利用されます。
音声信号の変換とコーデックの種類
音声通話は、送信側のコーダ(Coder:符号器)で音声信号(アナログ信号)を符号化し、IPパケットとしてネットワークに送信します。それを受信側のデコーダ(Decoder:復号器)でIPパケットを音声信号に変換します。これらをあわせてコーディック(CODEC)と呼びます。
音声通話とコーデックのイメージ
次に音声符号化の仕組みについて説明します。アナログの音声信号はIPパケットでは送れないため、「0」と「1」で表すデジタルデータに変換する必要があります。音声符号化は以下の図のようなフローとなっています。
音声の符号化
図からもわかるように音声符号化は3段階の処理を経て、IPネットワークで送信されます。
① フィルタリング
信号内の高周波数成分を除去し、人間の声の周波数成分を抽出する。
一般的には、4000Hz以上を除外するフィルタを設定する。
② サンプリング
アナログ信号から一定間隔で信号を抽出する。
コーデックにより間隔は異なり、電話の場合は、標本化定理に従い4kHzx2=8kHzとなる。
③ 量子化
信号を数値で置き換える。
符号化方式はコーデックにより異なり、PCM方式、CELP方式など複数存在する。
サンプリング周期等は、コーデックにより異なります。現在では、多くのコーデックが開発されており、それぞれ異なる特性を持っています。以下に代表的なコーデックをいくつか紹介します。
- G.711: 高音質な通話を提供するロスレスコーデックですが、圧縮率が低いため、帯域幅を多く消費します。
- G.729: 高い圧縮率を持つコーデックで、ネットワーク帯域幅を節約できますが、音声品質はやや低下します。
- Opus: オープンなコーデックで、低遅延と高音声品質を両立させることができます。音声通話だけでなく、音楽のストリーミングにも適しています。
- AMR (Adaptive Multi-Rate): 主にモバイル通信で使用されるコーデックで、帯域幅に合わせて自動的にビットレートを調整し、効率的な通信を実現します。
WiresharkのVoIP解析 ー呼制御プロトコル編ー
Wiresharkでは、VoIPに関する様々な解析が可能です。呼制御プロトコルが含まれている場合、メニュー画面から、Telephony > VoIP Calls で各呼の統計を確認できます。
Wiresharkで対応している呼制御プロトコルは、Wireshark VOIP Protocol Familyをご確認ください。
なおリストでは以下の項目が確認可能です。
項目 | 説明 |
---|---|
Start Time | 通話の開始時間 |
Stop Time | 通話の終了時間 |
Initial Speaker | 通話を開始したIPアドレス |
From | 送信者IPおよび関連情報 |
To | 受信者IPおよび関連情報 |
Protocol | 呼制御プロトコル SIP、H.323、H.248、SIGTRANなど |
Duration | 通話が終了するまで、またはWiresharkがキャプチャを停止するまでの時間 |
Packets | 呼制御に含まれるパケット数 |
Status | 現在の通話状態(プロトコルに依存) CALL SETUP、RINGING、IN CALL、CANCELLED、COMPLETED、REJECTED、UNKNOWNのいずれか |
Comments | 追加のコメント(プロトコルに依存) |
リストからより詳細な解析が可能です。リスト上の呼(コール)を選択の上、下にあるボタンで各種操作を行います。
Telephony > VoIP Calls
No. | ボタン | 詳細 |
---|---|---|
(i) | Flow Sequence | パケットごとのシーケンスが確認できます。 |
(ii) | Prepare Filter | 関連するパケットだけのフィルタが自動で設定されます。 |
(iii) | Play Streams | 音声をコーデック再生することができます。 |
以下は、VoIP解析の画面イメージです。
WiresharkのVoIP解析 ー音声プロトコル編ー
音声プロトコルで最もよく使われるRTPもWiresharkで解析が可能です。Telephony > RTP より解析を行います。
なお、呼制御プロトコルの解析のところで「音声のコーデック再生が可能です」と説明しましたが、それはあくまで、呼制御プロトコルとRTPのパケットが同一のpcapファイルに存在している場合のみです。RTP通信は、呼制御プロトコルによってアドレスやポート番号がアサインされます。ですので、同じファイル内に呼制御プロトコルが存在しない場合、RTPパケットかどうかの判別がつかず、UDPの表示となってしまいます。その場合には、Wiresharkの"Decode As"の機能を使用して、まずRTPパケットとして翻訳する必要があります。
- RTPとして翻訳したいフレーム上で右クリックをして"Decode As…"を表示
- Decode As設定画面より"Current"フィールドで"RTP"を選択
この設定を行うと"UDP"と表示されていたものが"RTP"として翻訳されます。Telephony > RTPより解析を行う場合は、RTPとして翻訳されていることが前提です。UDPで翻訳されている場合は、RTPのリストに表示されませんので、先にこの設定を行います。
リストでは以下の項目が確認可能です。
項目 | 説明 |
---|---|
Source Address | 発信元アドレス |
Source Port | 発信元ポート |
Destination Address | 宛先アドレス |
Destination Port | 宛先アドレス |
SSRC | RTPパケットフィールドに含まれる値で、RTPの送信元を識別するための識別子 |
Start Time | 音声の開始時間 |
Stop Time | 音声の終了時間 |
Duration | 音声が終了するまで、またはWiresharkがキャプチャを停止するまでの時間 |
Payload | 使用されたコーデック |
Packets | RTPに含まれるパケット数 |
Lost | RTPシーケンス番号から算出されるロストパケット数 |
Min/Mean/Max Delta | 各種デルタタイム(ms) |
Min/Mean/Max Jitter | 各種ジッタ(ms) |
Status | パケットに関連する情報 |
RTPも呼制御プロトコル同様、リストからよりRTPストリームを選択し詳細な解析を行います。
Telephony > RTP
No. | ボタン | 詳細 |
---|---|---|
(iv) | Find Reverse | 反対方向のペアのストリームを探します。 |
(v) | Analysis | 選択したRTPの詳細な解析画面に遷移します。 |
(vi) | Prepaire Filter | 関連するパケットだけのフィルタが自動で設定されます。 |
(vii) | Play Stream | 音声をコーデック再生することができます。 |
以下は、RTP解析の画面イメージです。
SYNESISのVoIP機能
当社の販売するパケットキャプチャ装置「SYNESIS」にもVoIP機能のひとつ、VoIPフィルタがあります。これは、SIPパケットを解析することにより、電話番号をキーに関連するRTPパケットを抽出する機能です。複数のポートでキャプチャされたそれぞれのトラフィックから抽出できます。
SIPパケットとRTPが異なる回線でキャプチャされる場合、WiresharkですとPcapファイルのマージ作業が必要になります。このファイルマージ作業は煩雑で、また、ファイルサイズによっては非常に時間がかかってしまいます。もし素早く関連するパケットを見つけたい場合は、やはりSYNESISのような有償ツールのほうが便利です。
SYNESISの機能に興味がありましたら、以下よりお問い合わせください。ご質問やデモンストレーションは、随時受け付けています。
あとがき
以下は総務省発行の令和4年版情報通信白書から引用したグラフです。
2014年を境に固定電話と0ABJ型IP電話(ひかり電話等の音声通話サービス)は加入者数は逆転しています。実は我が家も数年前に0ABJ型IP電話に変更しました。
ひとつだけ予想外だったのは、移動通信以外の合計数はそんなに減少していないことです。クレジットカードや銀行口座の申し込みが携帯電話だけで手続きができるようになっても固定電話はまだ必要である、と考えている人が多いからでしょうか。(私もその一人ですが...。)