無印吉澤(※新エントリはhatenablogに掲載中)

吉澤です。このサイトではIPv6やP2Pなどの通信技術から、SNSやナレッジマネジメントなどの理論まで、広い意味での「ネットワーク」に関する話題を扱っていたのですが、はてなブログに引っ越しました
最新の記事は http://muziyoshiz.hatenablog.com/ でご覧ください。
RSSフィードは http://muziyoshiz.hatenablog.com/feed に手動で変更するか、
Feedly or Live Dwango Reader を使っている方は以下のボタンで変更ください。
follow us in feedly Subscribe with Live Dwango Reader
«前の日記(2005/11/09) 最新 次の日記(2005/11/20)» 編集

2005/11/15

[NAT][VoIP]MicrosoftとCiscoがICE対応を表明? それがどうしたというのか(前編)

Microsoft と Cisco、『ICE』技術をサポート(Japan.internet.com)
http://japan.internet.com/webtech/20051111/12.html

Microsoft と Cisco Systems は10日、『Interactive Connectivity Establishment』(ICE) 技術をサポートすると共同発表した。サポートの狙いは、ファイヤーウォールやネットワークアドレス変換 (NAT) 機能を備えたルーターを超えてあまねく VoIP 通信を可能にすることにある。

ここで述べられているICEというのは、CiscoのJ. Rosenberg氏が2004年に提唱し、IETFで標準化が進められてきたNAT越え技術です。

NAT越え技術というやっかいな代物の標準化が進むのはすばらしいことです。とはいえ、今回の話については「MicrosoftとCiscoが『我々はIETF標準のNAT越え技術を使っている』と言えるようになる」という以上の意味は無い、というのが僕の個人的な感想です。

そこで、今日はそのあたりについてツッコミを入れてみたいと思います。

----

この日記を書いている時点で、ICEに関する最新のInternet Draftはdraft-ietf-mmusic-ice-06です。原文を読みたい方は、以下のサイトから当たってみてください。

Interactive Connectivity Establishment (ICE): A Methodology for Network Address Translator (NAT) Traversal for Offer/Answer Protocols
http://ietfreport.isoc.org/idref/draft-ietf-mmusic-ice/

あとで暇が出来たら、ICEのInternet Draftを読み直した上で図を書いて説明したいところなのですが(前に読んだときと比べてページ数が倍近くなってる!)、今回は話の前提として、ICEがどのようなNAT越え技術なのかを簡単に説明してみます。多分、基本的な話は変わってないと思いますので……。

ICEとは、シグナリングプロトコルを用いて確立するメディアストリームの経路を最適化することに特化したNAT越え技術です。ICEの想定する主なシグナリングプロトコルとはSIPなので、以下ではシグナリングプロトコル=SIPとして話を進めることにします。

通常、SIPでメディアストリームを確立する際には、発側のSIP UA*1は自分が使えるIPアドレスやコーデックをSIPメッセージに含めて相手に渡します。そして、着側のSIP UAが通信を許可する(=電話の場合は受話器を上げる)と、着側のSIP UAも同様の情報をSIPメッセージに含めて相手に渡します。このとき、通常なら教えあうIPアドレスはそれぞれ1つだけです。

一方、ICEに対応するSIP UAは、使える可能性のあるIPアドレスを事前に調べ上げておいて、それら全てをSIPメッセージに含めて相手に渡します。以下は、そのようなIPアドレスの例です。

  1. 端末に割り当てられたIPv6アドレス、6to4アドレス、IPv4アドレス
  2. 事前にSTUNで取得したNAT上のグローバルIPv4アドレス
  3. 事前にTURNで取得したTURNサーバのIPv4アドレス

SIP UAはこれらのIPアドレスを順番に使ってパケットの送受信をテストし、それに成功したらメディアストリームを確立します(このテストにはSTUNプロトコルを用いる)。その結果として、ICEに対応するSIP UAは最も遅延の少ない通信経路を利用することができるわけです。

例えば、同じプライベートネットワーク上にあるSIP UA同士が通信する場合は、プライベートIPアドレスを使ってend-to-end通信を行うのが最短経路になります。SIP UAがICEに対応している場合は、この最短経路を見つけ出すことができます。

しかしSIP UAがICEに対応していないと、SIP UAはIPアドレスを1つしか相手に渡せません。そのため、SIP UAは事前にSTUNまたはTURNで取得したグローバルIPアドレスを相手に渡さざるを得ず、結果としてend-to-endでない通信になって無駄な遅延が発生してしまいます(STUNの場合はNAT経由*2、TURNの場合はインターネット上のサーバ経由の通信になる)。

----

うーん、どうですか? こんな説明で、ICEの基本的な機能は伝わりましたでしょうか。ここまで書くのにだいぶ手こずってしまったので、後編は明日以降に書きます……。

*1 SIPクライアントと呼ばれることもあります。

*2 ただし、NATがhairpin転送をサポートしていない場合は、STUN + UDP hole punchingを使っても通信できません。また、NATがSymmetric NATの場合も通信できません。遅延どころの話じゃないです。

[]

2004|06|07|09|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|10|11|
2009|01|02|03|04|05|07|08|10|
2010|01|03|
2015|03|
スパム対策のため、60日以上前の日記へのコメント及びトラックバックは管理者が確認後に表示します。
また、この日記に無関係と判断したコメント及びトラックバックは削除する可能性があります。ご了承ください。