2017-04-03 17 views
1

私はNATのパンチスルーを読んでいます。私はアイデアを得ているようだが、それを実装するのは苦労し、私はここで一歩足りないと感じている。 この機能をテストするのは難しいです。インターネットベースの接続の場合、環境をほとんど制御できないからです。NATPはP2Pの概念を理解しているパンチスルー

サーバーとクライアントの両方の外部アドレスと、外部から見たポートを保持する「ファシリテーター」として実行するSQLサーバーがあります。 - サーバー/クライアントIP/PORTを格納するWebリクエスト(PHPスクリプト)を使用してSQLサーバーに接続します。 - 両方がわかっている場合、クライアントとサーバーの両方が接続を試みますクライアントは設定されたポートで接続します) - 重要なことはありません

ここには2つの未知数があります。私はあなたにチェックしたいと思います。 NAT-Punchthroughは、それ以降のステップで接続する予定の正確な(内部/ LAN)ポートで最初のステップを実行する必要がありますか?

もしそうなら、私は私のサーバーは、水中でどのように動作するかを正確に知っていないので、それはその後、私の最初の与えられた静的ポートがオーバー接続するための複数のポートを必要とするかもしれないが、それは、少なくとも私にヒントを与えます。

誰かがこの文書をお持ちの場合は、私にお知らせください。

出典:
Programming P2P application
http://www.mindcontrol.org/~hplus/nat-punch.html

答えて

1

NATは、教育を受けた当て推量の原理で動作パンチスルー。これは、通常、IPマスカレードを行うデバイスとの接続を作成するために使用されます。これは、ほとんどのホームインターネットモデムで、NATがIPマスカレードを参照するために互換的に使用されている点で使用されている技術です。

ホームモデムのようなNATシステムの背後にあるデバイスから接続するとき。インターネットへのアウトバウンド接続に使用されるポートを制御することはできません。しかし、これらのデバイスの多くは、特定のパターンを使用してポートを割り当てます。例えば、インクリメンタルな数字。

NAT punch throughは、両方とも独立したNATデバイスの背後にある2つのソースシステムに直接接続しようとします。第3のシステムでは、あなたの「ファシリテーター」は、アウトバウンド接続で両方のNATデバイスによって現在割り当てられているオリジンポート番号の検出器として機能します。発信元ポート番号とIPアドレスは、他の当事者に送信されます。

ここであなたの質問にお答えします。両方のシステムが直接接続したい場合は、もう一方のシステムと通信しようとします。彼らは、ファシリテーターによって検出された既知のポート番号を中心に、ある範囲のポートに接続しようとします。これは推測です。

両方のソースシステムが接続試行を開始することが重要です。これは、インターネットからのトラフィックを許可するローカルデバイスにNATセッションを確立するためです。いずれかのソースデバイスがこれらのNATセッションポート番号の1つを正しく推測すると、確立されています。実際には

、NATのために使用してパンチを持っている組織からの技術者は、おそらくより人気のNATポート割り当てアルゴリズムを検討し、そのソフトウェアをチューニングするいくつかの時間を費やしています。あなたがNATデバイスを介して接続の制御を持っている場合、いくつかのテストを設定し、ポート番号が異なるサーバーへの接続の間でどのように変化するかを見るのはかなり簡単だろう。

+0

だから、ストーリーは短いです。ちょうど1ポートまたは線形増分から私たち自身のNAT-パンチスルーを作ることができると思うのは馬鹿であるので、代わりに私たちのためにこの "マジック"ビットを行うサービスを見つけるべきでしょうか? – Smileynator

+0

あなたが試してはいけない理由はありませんが、[この前の研究](http://www.brynosaurus.com/pub/net/p2pnat/)によれば、あるスキルで成功率は60%程度になる可能性があります。あなたが試して結果を得るなら、あなたがしたことを他の人が知っていることは素晴らしいフィードバックになるでしょう。 –

+1

少なくとも生産で渡すためには最大90%を得る必要があるため、これから後退する予定です。 NAT-Punchtroughを提供できるサービスがあります。しかし、私の知る限り、彼らはすべてソケットのようなものをしているので、あなたはこの魔法をLinuxサーバで実行しているのです。彼らは約90%の成功を収めています。 100%の信頼性が必要な場合は、RELAYサーバーを使用しています。これはPhoton Networkingのようなものです。これはしばしば高価になります。小さなチームで右に出くわすのは難しいです! #遅延 – Smileynator

関連する問題