• 締切済み

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

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点についてお答え頂けると幸いです。 回答お待ちしています。

みんなの回答

  • nnori7142
  • ベストアンサー率60% (755/1249)
回答No.4

 追加補足ですが、No2の方の仰るUDPホールパンチングといった機能は、ルーターの一部にて搭載されています「NAT traversal」機能の一部を利用しておりますが、「NAT traversal」機能自体、全てのルーター機器にて仕様上付いている機能ではないため、一般的な家庭内LAN環境での動作保証するものでは御座いません。  実際の所、「NAT traversal」機能設定が可能なタイプのルーターとして、Yamaha製ルーターやAllied-Telesys製、Cisco製機器等業務用ルーターにおいて対応しているといった現状になります。本来、「NAT traversal」機能は、VPN等SOHO関連の業務LAN接続にて利用されている手法ですが、UPNP関連機器(VOIPルーターやVOIPアダプタ)等もこういったNAT traversal要素の機能を利用しているに過ぎないので、接続するルーターにより安定動作するか否かは流動的になります。

  • nnori7142
  • ベストアンサー率60% (755/1249)
回答No.3

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

  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.2

1. > "例外なく"端末B側のルータでポートマッピングを行う必要があるのでしょうか? 基本的にその認識で正しいです。 ただし、内側から外側にパケットを送信すると、 通常、それに対する応答パケットが外側から届きますので、 これをうまく処理できるよう、NATルーターは内部で自動的に 動的なポートマッピングを設定します。 つまり、送信元ポート番号宛に応答パケットが届いたら、 内側の送信元PCにパケットを届けられるようにします。 (これはTCPもUDPも同様です。) 2. > Skypeなどの仕組みを説明しているサイトを見ると、接続の手順を踏んだのちに > 端末間で通信を行うとの記述があるのですが、いくら接続先のIPがわかっていても、 > アプリケーション間で接続を確立するには、片方でポートマッピングが必要になる > と思うのですが、これはどういうことなのでしょうか? Skypeは、UDPホールパンチングという技術を使っています。 http://ja.wikipedia.org/wiki/UDP%E3%83%9B%E3%83%BC%E3%83%AB%E3%83%91%E3%83%B3%E3%83%81%E3%83%B3%E3%82%B0 を参考にしてください。 ここにも書かれてある通り、NATの種類はいくつかあり、 UDPホールパンチングがうまく機能しないケースもあります。 UDPパケット送信先と別のIPから応答パケットが届いた場合、 それを内側のPCに通すかどうかが問題です。 UDPホールパンチングがうまくいかない場合、 最終的にはリレーノードによる中継を行います。 Skypeの通信の仕組みは http://www.itmedia.co.jp/enterprise/articles/0505/30/news070_3.html を参考にしてください。

回答No.1

1. 端末BにプライベートIPアドレスがふられており、外部と通信をするにはNAPTが必要な場合、ルーターがルーターに来た通信を端末Bに中継しないと通信ができません。 2. まず、グローバルIPアドレスを持っていて、なおかつ、Skypeに使えるポートが開いている端末をSkypeに参加している端末から見つけます。そして、その端末に通信をしたい端末の呂方から接続をします。こうすることで、プライベートIPアドレスしかふられていない端末間でもSkypeで通信をすることができます。 3. UDPについてもNAPTできますが、2.で書いた方法をUDPで使えばプライベートIPアドレスしかない端末間で通信ができます。 UDPのNAPTの場合、ステートを使って判断することができないのでいつNAPTのテーブルから対応付けを削除するかが難しいですけどね。(まぁ、TCPでもお行儀が悪いやつがいるので、そういうのを何分経ったら対応表から削除するかというのも同様に難しいですが。)

関連するQ&A

  • TCP及びUDP通信について

    TCP及びUDP通信について 現在WinSockAPIを用いた通信を行うプログラムを組んでいます。 しかしながらネットワークに関しては初心者で、わからない点がいくつか出てきたので質問させて頂きます。 -------------------------------------------------- 1.TCPで双方向通信を行う場合、サーバ側は指定したポートにbind→listenし、接続を待ち受けます。 クライアント側はサーバのIPを指定し、接続確立後にポートはOSが自動で割り振ると聞きました。 つまり、クライアント側がポートを開放せずに通信が出来るのは、OSなどが自動でポートを割り当て、割り当てたポートに到着したデータを該当アプリケーションに渡すからでしょうか? ポート関連は全てルータが管理しているものだと思っていたのですが、OSがポートを割り当てるという動作がよく理解できません。 -------------------------------------------------- 2.UDPで双方向通信を行う場合、端末A・端末Bともに指定したポートにbindする必要があると聞きました。 つまり、UDPで双方向通信を行う場合、端末A・端末Bの双方でポートを開放する必要があるということでしょうか? -------------------------------------------------- 是非ともご教授ください。

  • ルーターを介したTCPとUDP通信の違いについて

    端末1---(LAN側)ルーター(WAN側)---端末2 というふうに接続されていた場合を想定します。 上図で端末1がTCPセッションを端末2と張ろうとした場合(httpなど)のルーターの動きについて確認させてください。 <ルーターの動き> (1)端末1からのTCPセッション開始のパケットを受信す るとMACアドレスとIPアドレスをルーターのものにす り替え、ポート番号も変えて端末2に渡す。この時の アドレスとポート番号の対応表を記憶しておく。 (2)端末2から応答が返ってきた場合(1)で記憶した対応表 を基にパケットのMAC,IP,ポートをすり替えて端末1 に渡す。 (3)TCPのセッションが終了したら(1)で記憶した対応表は 破棄する。 とりあえずこの解釈は正しいでしょうか? なお、UDP通信の場合は(1)の対応表を全く作らないということで良いでしょうか? ご教授よろしくお願いします。

  • ネットワークカード2枚挿し TCP/IP通信

    PCにネットワークカードを2枚挿しています。 一方はある機器に一方はネットと繋がっています。 機器とPCでTCP/IP通信をするアプリケーションを作成しています。設定画面を作って相手機器のIP、ポート番号等を設定するようにしています。 TCP/IPの場合はPCのIP等を設定画面に入れなくても どちらのネットワークカードを経由するかというのは 決めてくれるんでしょうか? PCのIPアドレスは指定する必要ないですか? UDP/IPの場合はどうなんでしょうか? PCと機器の両方のIP、ポート番号を指定しなければいけないのでしょうか?

  • TCP/IP通信3ハンドシェイクについて

    TCP/IPのTCP通信の3ハンドシェイク通信に関して質問なのですが、インターネットを使ったある端末でセンターのサーバーと6秒に1度程度3ハンドシェイク通信を行ってインターネット回線が正常かどうかを判定する機能を持っているそうなのですが、その時に1回の通信でどの程度のパケットをやり取りしているのかということを質問してみたら、約1.2kbyte程度のパケットをやり取りしていると業者の方が言っていました。 ちょっと興味があってWireSharkでこの端末とサーバ間のパケット通信をのぞいてみたところ、端末が1.2kbyte送信していたのですが、サーバからのACKと思われるパケットが1.2kbyteのパケットを返してきていて、再度端末が60バイト程度のパケットをサーバのIPアドレスに送信していました。 私はてっきり、端末とサーバー間のこの3ウェイハンドシェイクのパケットの総量が1.2kbyteだと思っていたのですが、これだと1.2k + 1.2k + 60 = 2.46kbyteとなると思うのですが、パケットのやり取りとしては正しいのでしょうか? サーバー側が受信したら同じ容量の1.2kbyteのデータをACKとして返してきているように思うのですが、Wiresharkで見ても全く同じデータでは無いようでした。サーバはデータを受け取ったら、ちゃんと受信したという1 or 0のデータみたいなものを返せばよいだけだと思うのですが、理由はあるのでしょうか?

  • winsockを使ったTCP及びUDP通信について

    今回winsockを使った通信プログラムを組む事になったのですが、わからない点が多々ありましたので、どなたかご教授頂けると大変ありがたいです。 1. TCP通信において、送信側が"Hoge" "Fuga"と2回sendした際、受信側でrecvすると"Ho" "geFu" "ga"と3回受信する可能性があると認識しているのですが、これは正しいでしょうか? (到着する順序は保証されるが、recvする際に送信側がどのようにsendしたかは考慮されない) 2. UDP通信においては、上記のような現象は起きないと認識しているのですが、これは正しいでしょうか? (UDP通信では、2回sendすれば2回以上はrecvしない。パケットの破棄はあっても、分割はない) 3. もしUDP通信でも上記のような現象が起きる場合、到着順序の保証がされないという観点から、recvした際に"Ho" "ga" "geFu"と受信する事はあり得るのでしょうか? 4. 2が正しい前提での話です。UDP通信では、MTUを超えた場合、自動でパケットが分割されると聞きました。プログラムを組む際、これは意識しないといけないのでしょうか? (MTUが1500Byteの場合、UDPで2000Byteをsendすると、recvで1500,500と2回受信する?) 以上の4点です。 どなたかご存知の方いらっしゃいましたら、是非ご教授ください。

  • NAPTとPING

    ルータのパケットフィルタルールにWAN側UDP禁止にしたらなぜかPINGのリプライが返ってこなくなりました。ICMPパケットってNAPTではUDPでラップされるんですか?

  • Web Caster V110 のポート開放のしかた

    他にも同じ質問をしてる人がいたんですが、 そのやり方でやってみてもできませんでした。 自分でやった方法は (1) アドレス欄に192.168.1.1を入力し、ルーターのページにいく (2) 左メニューのNAPT設定から静的NAPT設定(ポート転送規則)の   割り当て WAN側 受信ポート範囲に10000~10000を入力 (3) プロトコル種別はTCP、UDP共に開放したいのでまずはTCPを選ぶ (4) LAN側 転送IPアドレスに192.168.1.2を入力   (これはコマンドプロンプトでIPCONFIGと入力してでてきた    IPアドレスをいれました。) (5) LAN側転送ポートに10000を入力して確認をクリック、   送信をクリックしました。 以上です。 よろしくお願いします。

  • 通信する際なぜポートをが必要なのか

    ポートについて以下の認識で正しいか教えてください。    ・基本的にTCP、UDPの通信は通信相手のIP+ポートで接続しにいく。  ・ルータ等でポートを塞いでいた場合は、上記の通信はすべてはじかれる。  ・すべてのポートがふさがっているPC同士は直接通信することが出来ない。    また質問なのですが、クライアント側は通信するときにどこかポートは空けなくてもいいのでしょうか。  つまり、通信しにいけるが、通信を受け付けることが出来ないということでしょうか。  ポートを空けなくていい場合、サーバ側はどうやってクライアントのあるプログラムにあて先を指定してデータを送るのでしょうか。

  • TCP/IPでの通信の仕組み(パケット分割)について

    TCP/IPでのパケットの分割の仕組みで疑問に思ったことがあったので質問します。 本を見ると(日経NETWORK 新ネットワーク超入門より) TCPの役割:IP機能の負荷を減らすため、データが伝送途中で分割されないで送れる最大サイズになるように区切る。 ルータの役割:ルータ内のIP機能が、転送先の回線で決められたサイズに合わせて分割したりする。 と書いてあったのですが、 端末A -- ルータ1 -- ルータ2 -- サーバ (MTU:1500B) (1000B) (500B) (それぞれ、端末A ルータ1 MTU 1500B ルータ1 ルータ2 MTU 1000B ルータ2 サーバ MTU 500B と仮定) のようなトポロジを仮定した場合 端末Aがサーバと通信する場合はどのように通信が行なわれるのでしょうか?

  • NAPTとIP-Unnumberd

    IP-Unnumberdの設定が施されたルータの配下のDHCPクライアントに自動的にIPアドレスをリースさせて、NAPTを機能させる、という使い方は無理なのでしょうか? IP-Unnumberdの状況の下では、ルータのLAN側へもパブリックネットワークのグローバルIPアドレスを固定化させねばならない、と思われますので、其処では、ネットワークアドレスの齟齬のせいでNAPTが利用され得ないのではないか、と考えたものですから、教えて下さいませ。