ネスぺの過去問を解いていく中で、ネットワーク上位層の知識が弱いと感じたので対策として、以下のネットワーク上位層のプロトコルについてまとめました。
- SIP/WebRTCについて
ただし、以下のプロトコルは別記事でまとめています。
自分の試験前の見直し用ですので、間違いがあったらご指摘ください。
目次
SIP/WebRTCについて
SIP(Session Initiation Protocol)とは
IPネットワーク上でピアツーピアで通信するためのプロトコルであり、VoIPのような音声のリアルタイム通信に利用される。
SIPメッセージフォーマット
SIPでやるとりされるメッセージはHTTPをベースにしたテキスト形式。
引用元: https://www.infraexpert.com/study/telephony4.html
- HTTPと同じようにスタートラインにSIPメソッド、URI、バージョンが記載される。
- ヘッダ部分にはIPアドレスや通話の識別子(Call-ID)が含まれている。
アプリケーションレイヤでIPアドレスを保持しているため、後述するNAT越えのような技術が必要になる。 - ボディはSDP(Session Description Protocol)という記述構文を使い、IPアドレスや圧縮形式などの情報を交換している。ここら辺はWebRTCも同じみたい。
SIPのシーケンス
SIPはSIP端末間のシグナリングを制御するために使用される。SIP端末間の通信が確立すれば、RTC/RTCPによってリアルタイムメディアストリームがやりとりされる。
引用元: https://www.infraexpert.com/study/telephony4.html
- SIP端末は事前にSIPサーバにREGISTERメッセージでURI情報を登録しておく。
- SIP端末が電話かけるときに、SIPサーバへINVITEメッセージを送信する。すると、SIPサーバはSIP端末間のシグナリング制御(セッション張ったり、Prrrr鳴らしたり?する。)
- SIP端末間にセッションが張れた後はRTP(Real-time Transport Protocol)/RTCP(RTP Control Protocol)でリアルタイムに音声や動画のデータを送受信する。
RTPはUDPパケットで送信するが、パケット内にシーケンス番号があり、正しい順番に入れ替えることでパケットの抜けを確認している。
RTCPは送信バイト数やパケットのロスト情報などの統計情報をアプリケーションに伝える。これによってQoSに転用できたりする。
WebRTCとは
SIP同様にIPネットワーク上でピアツーピアで通信するためのプロトコルである。Webという文字からわかるように、ブラウザ上で動作するビデオチャットサービスのような音声/動画のリアルタイム通信に利用される。
つまり、ブラウザが電話になる。
WebRTCの構成
WebRTCの構成は以下のように、Webサーバ、ICEサーバ、WebSocketサーバで構成されている。
引用元: https://www.slideshare.net/nttwestcon/20140805-technical-descriptionofwebrtcpublicedition
- シグナリングを行うのは、WebSocketサーバであり、WebSocket上でSDP(Session Description Protocol)のやり取りを行う。
- ICE Serverによって後述するNAT越えするためにピアツーピアの間のグローバルIPアドレスを交換し合う。
- 詳しくは、上記の引用元が分かりやすいのでそちらを参考
NAT越え対策
SIP/WebRTCは端末間でピアツーピアの通信を行う。この通信の間にNATが介入すると、IPアドレスが変換されてしまいピアツーピア通信先のIPアドレスを把握することができない。そのため、NAT越え(NATトラバーサル)を実装する必要がある。
※ピアツーピアで通信するためにやりとりされるSDP内にIPアドレスが記述されており、その内容をもとにピアツーピアしようとする。NATはアプリケーションレイヤのIPアドレス変換はしてくれないので、別途対応する必要がある。
NAT越えの方法としては幾つかパターンがある。
- UPnP(Universal Plug & Play)
- STUN(Simple Traversal of UDP through NATs)
- TURN(Traversal Using Relay NAT)
- B2BUA(Back-To-Back User Agent)
概要の説明は以下のサイトを参考
ネスぺ平成28年午後II 問1ではSTUNサーバを使ったNAT越えの問題が出題されました。STUNサーバの仕組みを知るうえでよい問題だと思うので、以下でまとめます。
- STUNリクエストとSTUNレスポンスでサーバ認証を行う。
- BindingリクエストとレスポンスでNATにより変換されたグローバルIPアドレスとポート番号を入手できる。
関連情報
参考
以下の書籍やサイトをよく参考にしました。
以上!
コメント