
音声通信などで使われるSIPがNATを越えられない理由を調べています。
ただ、検索するといくらでも情報が出てくるのですが、どうも腑に落ちません。
SIPの場合、IPヘッダだけでなくメッセージ部分?にも送信元IPアドレスを書くが、
NATはIPヘッダの送信元IPアドレスしか書き変えないために、通信ができない・・・
という説明を見るんですが、なぜメッセージ部を使う必要があるのでしょうか。
IPヘッダだけで宛先・送信元の制御はできているのですから、
それを使えばいいじゃないかと素人的には思ってしまうのですが・・・
No.1ベストアンサー
- 回答日時:
ご質問の話題について初めて知った門外漢です。
ちょっと興味をもったので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 …
No.3
- 回答日時:
> なぜメッセージ部を使う必要があるのでしょうか。
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のポートマッピングを維持し続ける必要があります。
No.2
- 回答日時:
> なぜメッセージ部を使う必要があるのでしょうか
常に間に何も入らず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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- ネットワーク 一台のサーバーに複数個のIPアドレスを追加出来る事は知っていますが、具体的にどうやるのでしょうか? 4 2022/11/03 20:12
- その他(インターネット接続・インフラ) モバイルデータ使用時のipアドレスについて 1 2022/06/07 20:55
- VPN 無料のwifiはなぜ危険性高い? VPN プライベートDNSモードにすれば安全? 2 2022/06/04 18:23
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 格安スマホ・SIMフリースマホ スマホ ドコモはIPアドレスが固定みたいですが 格安SIMの場合はどうなのですか? 3 2023/07/07 22:17
- VPN 接続のたびにIPが変わるVPNサービスが知りたい 2 2022/06/27 02:34
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
closeされたsocketへの動作につ...
-
winsockのポート指定について
-
ソケットを用いた1対多通信につ...
-
UDP通信する時に、相手にどうや...
-
Macターミナルで実行中のプログ...
-
Windows10でDOSゲーム
-
パソコンの演算速度について
-
世界一美しいソースコード
-
家電製品の電力周波数を変える機械
-
Mac 乗数の入力方法
-
VBSでのSendKeysでの画面の最小化
-
VBSの処理中一旦処理を止めて再...
-
Excel VBAにて、2GB超の点群デ...
-
C言語で、メモリを解放しないで...
-
vb.netでEXCEL起動がうまくでき...
-
怪しいプロセス教えてください。
-
PIC12F683でLEDをスイッチで点...
-
エクセルのメモリ使用状況/Appl...
-
C言語primeについて
-
C#でGUI・CUIの判断する仕方を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットでクライアントのipア...
-
ソケットを用いた1対多通信につ...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
相手のIPアドレスを取得する方法
-
recv関数でフリーズしてしまう
-
closeされたsocketへの動作につ...
-
送信したデータの一部が文字化...
-
UDP通信(SNMP)したいが、うま...
-
ソケット通信
-
Connectエラーが出てしまう・・...
-
WinSockでの通信プログラムがう...
おすすめ情報