アプリ版:「スタンプのみでお礼する」機能のリリースについて

TCP/IPにおける端末間の通信について(NAPT)


お世話になります。

TCP/IPについて質問です。
NAPT機能の付いたルータを介し、インターネット越しに通信を行う場合を想定します。


1.端末A(送信側)から端末B(受信側)にTCPあるいはUDPを用いてデータを送信する場合、端末Bでは必ず待ち受けるポートにbind(listen)し、また端末Aでは指定されたポート宛てにデータを送信する必要があると聞きました。
ここまでは理解できますが、ここにNAPT機能の付いたルータが介入する場合、"例外なく"端末B側のルータでポートマッピングを行う必要があるのでしょうか?

2.上記の認識がもし正しい場合、2台の端末で通信を行う場合は少なくとも片方でポートマッピングが必要ということになります。
だとするならば、SkypeやMSNメッセンジャーなどのクライアント側でポートマッピングが必要のないアプリケーションは、必ずサーバを介した通信を行っているということでしょうか?
Skypeなどの仕組みを説明しているサイトを見ると、接続の手順を踏んだのちに端末間で通信を行うとの記述があるのですが、いくら接続先のIPがわかっていても、アプリケーション間で接続を確立するには、片方でポートマッピングが必要になると思うのですが、これはどういうことなのでしょうか?

3.上記の認識が正しい場合、UDPで受信する為には必ずポートマッピングが必要ということになります。
だとするならば、クライアント側でポートマッピングが必要のないアプリケーションは、少なくとも受信にはUDPを用いていないということでしょうか?


以上の3点についてお答え頂けると幸いです。
回答お待ちしています。

A 回答 (4件)

 追加補足ですが、No2の方の仰るUDPホールパンチングといった機能は、ルーターの一部にて搭載されています「NAT traversal」機能の一部を利用しておりますが、「NAT traversal」機能自体、全てのルーター機器にて仕様上付いている機能ではないため、一般的な家庭内LAN環境での動作保証するものでは御座いません。


 実際の所、「NAT traversal」機能設定が可能なタイプのルーターとして、Yamaha製ルーターやAllied-Telesys製、Cisco製機器等業務用ルーターにおいて対応しているといった現状になります。本来、「NAT traversal」機能は、VPN等SOHO関連の業務LAN接続にて利用されている手法ですが、UPNP関連機器(VOIPルーターやVOIPアダプタ)等もこういったNAT traversal要素の機能を利用しているに過ぎないので、接続するルーターにより安定動作するか否かは流動的になります。
    • good
    • 0

 お尋ねの件ですが、NAPT配下での拠点接続には、確かに静的IPマスカレード接続が最低限必要となります。

他ネットワーク環境により、静的ルート設定やRIP設定が必要となります。
 それに対し、メッセンジャー系ソフトは、UPnP機能ソフト的にを利用し、「LAN内の機器からのポートマッピング要求対応機能」、「LAN内の機器へのWAN側IPアドレスの通知機能」を持たせ、ポート交換を自動化しております。自動化の仕組みとして、大抵はUDPポート番号を利用しておりますが、機能的に同じようなソフトや周辺機器を利用しますと、パケット衝突や高い負荷の通信がかかった際に不具合が出やすい通信形態となります。
 UPNP関連機能は、あくまでも設定を簡略化させるための暫定規格と思った方が無難です。キチンと利用ポートをそれぞれ固定設定し、 ルーターにそれぞれポート転送記述させる形が機器的にも良いかと存じます。
 特にVPNサーバ公開やVPNクライアント接続には、静的IPマスカレード設定だけではなく、静的ルート設定が必要、同一LAN-WAN接続の場合には、RIP通信設定も必要となる場合もあります。
    • good
    • 0

1.


> "例外なく"端末B側のルータでポートマッピングを行う必要があるのでしょうか?

基本的にその認識で正しいです。
ただし、内側から外側にパケットを送信すると、
通常、それに対する応答パケットが外側から届きますので、
これをうまく処理できるよう、NATルーターは内部で自動的に
動的なポートマッピングを設定します。
つまり、送信元ポート番号宛に応答パケットが届いたら、
内側の送信元PCにパケットを届けられるようにします。
(これはTCPもUDPも同様です。)

2.
> Skypeなどの仕組みを説明しているサイトを見ると、接続の手順を踏んだのちに
> 端末間で通信を行うとの記述があるのですが、いくら接続先のIPがわかっていても、
> アプリケーション間で接続を確立するには、片方でポートマッピングが必要になる
> と思うのですが、これはどういうことなのでしょうか?

Skypeは、UDPホールパンチングという技術を使っています。
http://ja.wikipedia.org/wiki/UDP%E3%83%9B%E3%83% …
を参考にしてください。
ここにも書かれてある通り、NATの種類はいくつかあり、
UDPホールパンチングがうまく機能しないケースもあります。
UDPパケット送信先と別のIPから応答パケットが届いた場合、
それを内側のPCに通すかどうかが問題です。

UDPホールパンチングがうまくいかない場合、
最終的にはリレーノードによる中継を行います。
Skypeの通信の仕組みは
http://www.itmedia.co.jp/enterprise/articles/050 …
を参考にしてください。
    • good
    • 0

1.


端末BにプライベートIPアドレスがふられており、外部と通信をするにはNAPTが必要な場合、ルーターがルーターに来た通信を端末Bに中継しないと通信ができません。

2.
まず、グローバルIPアドレスを持っていて、なおかつ、Skypeに使えるポートが開いている端末をSkypeに参加している端末から見つけます。そして、その端末に通信をしたい端末の呂方から接続をします。こうすることで、プライベートIPアドレスしかふられていない端末間でもSkypeで通信をすることができます。

3.
UDPについてもNAPTできますが、2.で書いた方法をUDPで使えばプライベートIPアドレスしかない端末間で通信ができます。
UDPのNAPTの場合、ステートを使って判断することができないのでいつNAPTのテーブルから対応付けを削除するかが難しいですけどね。(まぁ、TCPでもお行儀が悪いやつがいるので、そういうのを何分経ったら対応表から削除するかというのも同様に難しいですが。)
    • good
    • 0

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