dポイントプレゼントキャンペーン実施中!

音声通信などで使われるSIPがNATを越えられない理由を調べています。
ただ、検索するといくらでも情報が出てくるのですが、どうも腑に落ちません。

SIPの場合、IPヘッダだけでなくメッセージ部分?にも送信元IPアドレスを書くが、
NATはIPヘッダの送信元IPアドレスしか書き変えないために、通信ができない・・・
という説明を見るんですが、なぜメッセージ部を使う必要があるのでしょうか。
IPヘッダだけで宛先・送信元の制御はできているのですから、
それを使えばいいじゃないかと素人的には思ってしまうのですが・・・

A 回答 (3件)

ご質問の話題について初めて知った門外漢です。


ちょっと興味をもったのでgoogleしてみました。
こんなド素人の意見でも参考になるようでしたらどうぞ。


> SIPがNATを越えられない理由

次の記事では「越えられない」とは言っていませんでした。相性が良くない,さまざまな問題が発生する,と言っています。つまり,越えられる場合もある,ということでしょう。
http://www.atmarkit.co.jp/fnetwork/tanpatsu/21fi …


> メッセージ部分?にも送信元IPアドレスを書く

googleでヒットしたのがこちら。
http://www.atmarkit.co.jp/fnetwork/tanpatsu/21fi …
http://intuniv.cs.shinshu-u.ac.jp/Lecture/VoIP/S …
SDPという構文で記述されたボディ部の中に,次の行が発見できます。
  c=IN IP4 192.168.1.11
  c=IN IP4 send.example.org


SDP(セッション記述プロトコル)に関する RFC2327 はこちら。
http://www.softfront.co.jp/tech/ietfdoc/trans/rf …

この中の「6. SDP仕様」の「接続データ c= フィールド」には
次の記述が登場します。
----------------------------------------------------------------
o 一般的に、接続アドレスはclass-DのIPマルチキャストグループアドレスで
ある。セッションがマルチキャストではない場合、追加の属性フィールドの指
定どおり、接続アドレスには、期待されるデータソース、データリレー、また
はデータシンクの完全修飾ドメイン名またはユニキャストのIPアドレスが含ま
れる。マルチキャスト告知で通信されるセッション記述で、完全修飾ドメイン
名またはユニキャストアドレスを指定することは想定していない。ただし、禁
止もしていない。ユニキャストデータストリームがNATを経由する場合、ユニ
キャストのIPアドレスではなく完全修飾ドメイン名を使用することが推奨され
る[RECOMMENDED]。他に、マルチホームのホスト上にある特定のインター
フェース指定する場合、IPアドレスの使用が必要なこともある。したがって、
本仕様では、どちらを使用するかについては個々のアプリケーションに判断を
委ねる。ただし、どのアプリケーションでも、両方の形式を受信できるように
対応しなければならない[MUST]。
----------------------------------------------------------------

NATを経由する場合はIPアドレスを埋め込んでもダメだと,SDPも当然 分かっているということですね。

ただ,一般的に各クライアントPCはNATを意識していない,NATを介すか介さないかによってクライアントPCは送信データの形式を変えているわけではないので,前述のような相性問題はハードソフトの実装の違いによって発生しそうにも思いました。


> なぜメッセージ部を使う必要があるのでしょうか。

「6. SDPの用法」にもあるように,SDPという仕様が,インターネット電話だけを想定しているのではなく,電子メール告知やWWW告知なども射程に含めた,汎用的に設計された規定だからだと思います。

と言いつつ,じゃあインターネット電話だけを想定したサブセットを規定してしまえばいいのに,と,素人しては単純に思ったりもするわけですが。


ちなみに。
上記のようなIPアドレスの埋込み以外にも問題点はあるようです,ご参考までに。
http://itpro.nikkeibp.co.jp/free/TIS/denwa/20050 …
    • good
    • 0

> なぜメッセージ部を使う必要があるのでしょうか。



SIPヘッダーにSIP-URIやIPアドレスを記載できるために各種の通信サービスとの相性がいいのです。
たとえば、デバイス1がINVITEを送る際、音声の入出力にはデバイス2を使いたいとすると INVITEのSDPにデバイス2のIPアドレスを記載することができます。


> IPヘッダだけで宛先・送信元の制御はできているのですから、
> それを使えばいいじゃないかと素人的には思ってしまうのですが・

転送や電話会議などはサービスが1対1ではないので、IPヘッダを元にした呼制御ではサーバ側の負担が大きそうです。



SIPのNAT越え問題を解決/回避する方法としていくつかありますが、知っているものを列挙すると。
 - NAT内のUAでSTUNを使う。 (STUNサーバをNAT外に用意するか STUNサービスを利用する必要があります。)
 - NAT内のUAでUPnPを使う。(ルータがUPnPに対応している必要があります。)
 - SIP-ALG機能をもったルータを使う。
 - NAT越えに対応したSIPサーバをNAT内またはNAT外に設置。UAはSIPサーバ経由での通信になります。


仮に上記などを用いてNAT越えができたとしても、ルータによってNATのポートマッピングの保持期間が異なるため、ポートフォワードやUPnPによるポートマッピング定義が無い限り、定期的にパケット(REGISTERなど)を送受してNATのポートマッピングを維持し続ける必要があります。
    • good
    • 0

> なぜメッセージ部を使う必要があるのでしょうか



常に間に何も入らず1対1で通信するならいらないかもしれません
ただし、
http://www.geocities.jp/mazbeer/sipSamples/rfc36 …
のようにSIP proxyを通した場合、proxyはあくまでもかけてきたのはaliceだと上位側に伝えるため、ペイロード部分(メッセージ部)に、
o=alice 2890844526 2890844526 IN IP4 client.a.example.com
のようにIPアドレス(この例の場合はFQDN)が含まれています

なお、NAT時に、ヘッダのIPアドレスだけでなく、ペイロード部分のIPアドレスまで書き換えてくれる機能を持っているルータもあります
SIP ALG(Application Layer Gateway)などの名前で呼ばれていますが、このような機能を持つルータであればNATを使っている環境でもSIPを通すことができます
http://www.ncsc.co.jp/g220kinou.html
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!