2012-02-24 3 views
2

これは私のシナリオです。Tcp/Udpを使用してデータを送信

私のデバイス(アンドロイド携帯電話)があります。 私は別のデバイス(インターネット上の一部のリモートデバイス)のIPアドレスを知っています

どのようにして他のデバイスにデータを送信できますか? TcpやUdpのようなプロトコルを使用しますか?

EDIT:パブリックIPアドレスとプライベートIPアドレスがあることがわかります(デバイスがWiFi経由で接続した場合など)。そのような場合は、TcpまたはUdpを使用することも可能ですか?

答えて

5

共通の問題(共通の解決策もあります)のある一般的な作業です。あるデバイス(コンピュータ/電話/ etc ..)から別のデバイスにデータを送信したいとします。舞台裏での動作は次のとおりです。

世界には多くのコンピュータがあります。各コンピュータにはアイデンティティが与えられます。名前は必要に応じてコンピュータのIPアドレスと呼ばれます。 IPアドレスには多くのバージョン/規格があり、現在の標準ではIPアドレスに「111.222.333.444」という名前が付けられています。 12桁の数字の並び順が非常に多く、IPアドレスの全範囲が予約されています。つまり、コンピュータには十分なIPアドレスがありません。

ここでは、ルータがこの問題を解決するために発明されました。ルーターは、ローカルエリアネットワーク(LAN)内のすべてのコンピューターにパブリック(WAN)IPアドレスを与えます。 1世帯あたり平均1台のルータで、これにより多くのIPアドレスが節約されます。残念なことに、同じ名前を使用している3台のコンピュータとどうやって通信するので、コンピュータ間の直接通信も切断されます。それらがすべて同じWAN IPアドレスを共有している場合、コンピュータCからコンピュータBのコンピュータAをどのように識別しますか?

まず、いくつかのバージョンとIPアドレスの標準があるように、いくつかのタイプのルータがあることを明確にしましょう。ところで、コンピュータ間の直接通信の問題に責任を負うのはルータではなく、実際はルータのネットワークアドレス変換(NAT)技術です。とにかく、いくつかの種類のNATがありますが、インターネット上の情報はこれらのタイプでは比較的限られていますが、それでもWikipediaで読むことができ、いくつかの大学の研究論文を読むことができます。タイプは、完全コーンNAT、制限付きNAT、ポート制限付きNAT、および対称型NATです。

したがって、LAN内のコンピュータは同じWAN IPを共有します。これは問題だ。 1つの解決策は何ですか?特定のポートに向かうすべての着信トラフィックをローカルエリアネットワークの特定のコンピュータにルーティングするようルータに指示した場合、どうなりますか?たとえば、3台のLANコンピュータがWAN IP 1.1.1.1を共有する場合、ポート転送と呼ばれる手順を設定して、ポート6000に到着するすべてのパケットを192.168.1.101:3500にルーティングするようにルータに指示することができます。

uPnPは、コードを使用して転送することを可能にするファンシー技術(ルータには常に存在するとは限らず、より重要なことに、ほとんどデフォルトでは有効にされていません)です。

uPnPを使用してすべてのデバイスで有効になっているわけではないため、uPnPを使用できない場合、別の解決策が必要です。穴あけがあります。

ホールパンチングはUDPとTCPの2種類がありますが、TCPホールパンチングはTCPが本質的にコネクション型プロトコルであるため、もう少し複雑です。

UDP穴あけの手順は、Wikipediaや他のサイトで読むことができます。しかし、このコンセプトはこのように機能します。送信パケットを送信しているコンピュータはすべて応答を期待します。つまり、ルータは受信パケットの応答を許可します。最初は、2台のコンピュータがお互いの返信を期待しないので、各コンピュータが送信する最初のパケットはルータによって拒否されます。ただし、パケットを送信し続けると、ルータは各コンピュータからの応答が予想されるため、残りのパケットが通過することを許可します。この穴あけされた接続が、時折keep-aliveパケットによってアクティブに維持されている限り、それは生き続けるでしょう。残念ながら、UDPホールパンチングのこの方法は、対称NATでは成功しません(下記のリンクで説明されています)。そのため、最終的な解決策は、接続とトラフィックを自分のサーバーにプロキシすることです。これはコンピュータのファームを必要とするので、かなり高価です。しかし、この最終的な解決策はターン(TURN)と呼ばれています。 STUNは、(cmyip.comの解析とは対照的に)NATタイプとパブリックIPを決定するために照会できるWebサービスです。あなたの個人的な研究に沿って遭遇するいくつかの用語。

これらの概念を活用して遊んでみましょう。 NATのの

タイプ:http://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf

Lidgrenネットワーキング:対称型NATトラバーサル(基本的には、より多くのポートに、より多くのパケットをスパムによる)のためのhttp://think-like-a-computer.com/2011/09/16/types-of-nat/

A法ここであなたを始めるためにいくつかのリソースがありますライブラリ(これにはNATトラバーサルが組み込まれていますが、これはC#ライブラリです):http://code.google.com/p/lidgren-network-gen3/w/list

+1

ありがとうJason!返事が遅くなってごめん。 私は実際にそれを働かせました。穴あけ技術を使用する。 – SatheeshJM

+0

@SatheeshJM:こんにちは、私はあなたが私の参照やコードを提供することができます同じ探しています。前もって感謝します。 –

0

最も現実的なケースでは、データを他の電話機がピックアップする中間デバイスに送信することによって、他のデバイスにデータを送信します。 Canは、2つのデバイス間でTCPやUDPのようなプロトコルを直接使用することができます。プロトコルやデバイスがインターネットにアクセスする方法によっては動作しない場合もあります。

たとえば、あるデバイスが電子メールを送信し、他のデバイスがその電子メールを取得できます。そのモデルを他のタイプのコミュニケーションに一般化することができます。

+0

リアルタイムでデータを送信する必要があります。だから、私はtcp/udpが良いと思った(やはり私は専門家ではない!)インターネットアクセスのタイプがtcp/udpにどのような影響を与えるか説明できますか? – SatheeshJM

+0

「インターネットアクセス」は、NATの背後にあることを意味します。 –

関連する問題