分散アプリケーション ----- ピアツーピア (p2p) ネットワーク

目次

1。概要

1.1. P2Pの概念

1.2. P2Pの背景

1.3. P2P の長所と短所

2. P2Pの分類

2.1. 集中度に応じて

2.2. ネットワークトポロジーによる

3. NAT技術の詳しい説明

3.1. 概要

3.2. NAT の長所と短所

3.3. NAT トラバーサルの一般的なソリューション

3.4. プローブ穴あけの基本原理

3.4.1. 基本事項

3.4.2. 同じ NAT ゲートウェイ内

3.4.3. NAT ゲートウェイで到達不能

3.4.4. マルチレイヤー到達不能 NAT ゲートウェイ

3.4.5. 保活

3.4.6. TCP ホールパンチング

3.5. 一般的に使用されるホールパンチプロトコルフレームワーク

4. P2Pダウンロード技術の原理

4.1. 概要

4.2. 2 つの P2P ダウンロード技術ソリューション

4.2.1. BitTorrent 技術的ソリューション

4.2.2. Kademlia 技術ソリューション

4.3. BT技術を活用したP2Pダウンロード導入事例

4.3.1. P2P テクノロジーが直面する問題

4.3.2. 解決策


1。概要

1.1. P2Pの概念

P2P、英語正式名: Peer To Peer、ポイントツーポイント技術は、C/S とは異なるネットワーク モデルであり、統一された中央サーバー ノードはなく、各クライアントはサービスを提供するサーバーでもあります。1969 年 4 月に初めて RFC1 に記録されました。

1.2. P2Pの背景

P2P の概念は、IPv4 から始まり、インターネット上で初めて登場しました。

インターネットとは何ですか? これは、情報やサービスを共有するために、コンピューター、携帯電話、さまざまなネットワーク接続されたデバイスなどのさまざまなハードウェア デバイスを相互接続することです。インターネットは、本質的に C/S モデルである TCP/IP アーキテクチャ モデルを採用しています。通信当事者 (クライアントとサーバー) は、5 つのタプル情報 (送信元 IP + 送信元ポート + 宛先 IP + 宛先ポート + プロトコルの種類) によってマークされ、標準プロトコルに従って相手にデータ パケットを送信し、その他の相手にはデータ パケットを送信します。当事者は、情報リソースの共有を実現するために、標準プロトコルに従ってデータ パケットを解析します。本来の理想的な相互接続モデルに従い、他に何も考慮しない場合、P2P はまったく必要ありません。元来、あらゆるオブジェクトがサーバーまたはクライアントとしてサービスを提供でき、相互接続できるからです。IP はデバイスをマークするために使用され、IPv4 バージョンは現在広く使用されていますが、ポートはデバイス上で実行されているソフトウェア サービスをマークするために使用されます。IP とポートは限られています。当初の設計者は、これほど急速な発展を期待していませんでした。IPv4 アドレス範囲全体では、インターネット デバイスに割り当てるのに十分ではありません。アドレス不足の問題を解決するために、NAT が導入されました。また、NAT 以降、クライアントとサーバーの境界が非常に明確になり、P2P の出現につながりました (もちろん、その後の IPv6 の出現により、このアドレス容量は非常に大きな数に拡張されましたが、結局のところ、無限ではありません。NATその他特典付き)。

NAT (Net Address Translate、ネットワーク アドレス変換) は、限られた IP を無制限に拡張し、IPv4 を復活させる IP 多重化のテクノロジです。ここでは ABCDE IP 分類については何も言いません。NAT の原理を簡単にまとめると、まずインターネット上のネットワークを 2 つに分けます。インターネット上でアクセスできる任意のアドレスで構成されるネットワークをパブリック ネットワーク、インターネット上でアクセスできないアドレスで構成されるネットワークをパブリック ネットワークと呼びます。プライベート ネットワーク側にはクライアントが配置され、パブリック ネットワーク側にはサーバーが配置されるのが一般的です (リバース プロキシ リバース リンクなどの概念を考慮せずに単純化して説明します)。NAT の役割は、パブリック ネットワークとプライベート ネットワークの間のブリッジとして、パブリック ネットワークとプライベート ネットワーク間の通信を開くことです。具体的には、NAT デバイス自体は、パブリック ネットワークの一部として、他の人がアクセスできます。 NAT デバイスは、プライベート ネットワークとのハードウェア相互接続を直接形成します。一般に、リクエストはクライアントによって開始され、クライアントはサーバーに到達できますが (サーバーはパブリック ネットワーク上にあるため、アドレスにアクセスできます)、クライアントはプライベート ネットワーク上にあるため、サーバーはクライアントに直接到達できません。通信網。このようにして、クライアントがリクエストを開始し、そのリクエストが NAT デバイスを経由して送信されると、そのリクエストが 5 タプルの情報によって特定されることがわかり、NAT デバイスはリクエストの送信元の IP を変更する責任を負います (つまり、クライアント) を NAT デバイスのパブリック IP に送信します。その目的は、サーバーがリクエストを受信した後にデータを有効なアドレスに返信できるようにすると同時に、リクエストされたクライアント IP からパブリック IP への変換を記録することです。マッピングテーブルに入れます。サーバーがデータ パケットを受信すると、NAT のパブリック IP にデータ パケットを返信します。データが NAT に到着すると、以前に記録されたマッピング テーブルを再度調べて、どのクライアントがデータ パケットを要求したかを調べます。その後、データ パケットを対応するクライアントに転送します。この場合、プライベート ネットワークの IP はパブリック ネットワークにとっては意味がなく、任意にカスタマイズできます。通常、各組織はこのようなプライベート ネットワークを形成し、各組織のプライベート ネットワーク IP は反復可能であるため、NAT は基本的に NAT パブリック IP をプライベート ネットワークの各クライアントに再利用します。

NAT 技術によるパブリックネットワークとプライベートネットワークの分離は、IP 多重化を実現し、IPv4 不足の問題を解決しますが、同時に TCP/IP 通信の困難に直結する新たな問題をもたらします (NAT により、IP は仮想 IP が使用され、実際のアドレスが使用できないため、外部ネットワークはイントラネット上のホストと直接通信できません。すべてのサービスは C/S アーキテクチャを採用する必要があるため、サーバーを提供する企業にとって帯域幅コストが非常に高くなります。帯域幅コストを節約するために、NAT デバイスの内部および外部通信が開放され、クライアントは、サーバーへの直接アクセスを減らすためにリソース サービス プロバイダーとして使用され、その結果、P2P テクノロジが実現します。

1.3. P2P の長所と短所

P2P の利点:

  • 並列処理能力の向上 (C/S アーキテクチャと比較して、C が増加するにつれて速度はますます遅くなりますが、P2P ネットワークは大幅に変化せず、すべてのクライアントが帯域幅、ストレージ スペース、コンピューティング能力などのリソースを提供できます) )
  • 中央サーバーが存在せず、ユーザー グループ (ピア) に依存して情報を交換し、ネットワーク送信ノードを削減します。
  • サーバーのソフトウェアとハ​​ードウェアに多額の資金を投資する必要はありません

P2P の欠点:

  • アーキテクチャは比較的複雑で、通常はノード間に NAT が分離されているため、直接通信することができず、追加のパス構築と各ノードのリソース調整管理が必要になります。
  • P2P ノードはインターネット上に広がり、開発者、組織、政府に監視の問題をもたらします
  • 大規模ネットワークで利用するとリソース共有が乱れて管理が困難になる
  • 安全性が低い
    • ポイズニング攻撃: 説明とは異なるコンテンツを含むファイルを提供する
    • サービス拒否攻撃: ネットワークの動作が非常に遅くなったり、完全にクラッシュしたりする
    • 裏切り攻撃 (出血): ユーザーまたはソフトウェアが独自のリソースを提供せずにネットワークを使用する
    • データにウイルスが挿入されている: ダウンロードまたは送信されたファイルがウイルスやトロイの木馬に感染している可能性があります
    • P2P ソフトウェア自体のトロイの木馬: ソフトウェアにはスパイウェアが含まれている可能性があります
    • フィルタリング: ネットワーク事業者は、P2P ネットワーク上でデータが通過するのを阻止しようとする場合があります。
    • ID 攻撃: ネットワーク上のユーザーを追跡し、継続的な嫌がらせや合法性攻撃を実行します。
    • スパム: インターネット上で一方的にメッセージを送信すること

もちろん、P2P セキュリティの一部の問題には対応する解決策があります。

2. P2Pの分類

2.1. 集中度に応じて

一般的な P2P

  • ノードは同時にクライアントとサーバーとして機能します
  • 中央サーバーがない
  • 中央ルーターがない
  • 代表的なもの: Gnutella、ファイル共有ネットワーク、フラッドクエリ全ノード検索

特殊型P2​​P

  • 中央サーバーはノード情報を保存します
  • ノードはこの情報を公開して、共有したいファイルを中央サーバーに知らせる責任があります。
  • ルーティング エンドポイントは、絶対アドレスを取得するためのインデックスのセットによって参照されるアドレスを使用します。
  • 典型: Napster、中央サーバーに依存してネットワーク全体のクエリを調整する音楽共有ネットワーク

ハイブリッド P2P

  • 一般的な機能と特別な機能の両方が含まれています
  • 典型的な代表者: Skype

2.2. ネットワークトポロジーによる

P2Pの構造

  • ポイントツーポイント間にはリンク協議があり、相互に特定のルール トポロジを形成します。
  • リソースを要求する必要がある場合、トポロジ ルールに従ってリソースが検索され、存在する場合は見つかる必要があります。
  • 代表的なもの: Chord、YaCy (分散型オープンソースの無料 Web 検索エンジン システム、ユーザーのプライバシーを保護、中央サーバー検索なし、コンテンツが検閲されないことを保証)、Kademlia (プロトコル アルゴリズム、ネットワークの構造を指定し、ノードクエリを通じて情報を交換し、目的のノードを素早く見つけます)

非構造化P2P

  • ポイントツーポイント間にリンク協議があり、相互に不規則なトポロジ構造を形成します。
  • リソースを要求する必要がある場合、ブロードキャストによって、通常は TTL で検索されます。リソースが存在しても見つからない場合があります。
  • 代表的なもの:グヌテラ

緩やかな構造の P2P

  • ポイントツーポイント間にリンク協議があり、相互に不規則なトポロジ構造を形成します。
  • リソースを要求する必要がある場合、既存のコンサルティングの推測に従って、P2P構造と非構造化タイプの間で検索します。
  • 典型的な代表例: Freenet (ソフトウェア、匿名のインターネット分野)

3. NAT技術の詳しい説明

P2P で最も重要なテクノロジーの 1 つは、NAT デバイスに侵入する機能です。したがって、NAT テクノロジーを包括的に理解する必要があります。

3.1. 概要

NAT の本質は IPv4 アドレスの不足を解決するために生まれ、IP 多重化によってアドレスはほぼ無限に拡張できます。

NAT には一般的に 2 つのタイプがあります。

  • 基本的なネットワーク アドレス変換 (基本的な NAT)
    • 「静的 NAT」とも呼ばれ、アドレス変換のみをサポートし、ポート変換はサポートしません (通常、複数のパブリック IP プールが利用可能です)。
    • ブロードバンド ルーターはこの方法を使用します (ブロードバンド ルーターは DMZ ホストとしてマークされる場合があります)。

  • ネットワーク アドレス ポート変換 (NAPT)
    • 複数のホストがパブリック IP を共有できるようにする
    • 通常は、次の 2 つの同時ジョブで構成されます。
      • 送信元アドレス変換タイプ (内部ネットワーク ホストによって送信されたデータ パケットは外部ネットワーク ホストに到達可能)
      • 宛先アドレス変換タイプ (外部ネットワーク ホストから送信されたデータ パケットは内部ネットワーク ホストに到達可能)

3.2. NAT の長所と短所

NAT の利点:

  • 負荷分散: 一部のサーバーから選択した他のサーバーに接続をリダイレクトする (IP の切り替え)
  • 障害終了:ルーターがサーバーダウンを検知すると自動でバックアップサーバーに転送する高信頼サービスを提供します。
  • 透過的プロキシ: インターネットへの HTTP 接続を HTTP プロキシ サーバーにリダイレクトしてデータをキャッシュし、リクエストをフィルタリングすることで、ブラウザ プロキシを構成せずに帯域幅の使用量を削減します。

NAT の欠点:

  • IPセッションの保持時間を短縮する
    • セッションを確立すると、NAT ゲートウェイ上にアソシエーション テーブルが作成され、IP ポート番号が消費されます。これらのリソースは限られており、リソース回復メカニズムが必要です。
    • リアルタイムでリソースを回収します(TCP接続など、分析パッケージにより、セッション終了時にリソースが回収されていると判断できます)
    • タイマー回復 (UDP およびその他の未接続状態では、タイミングに基づいてパケット生存期間のみを決定できます)、さまざまなプロトコルの有効期間の例:
      • DNSプロトコル: 10秒
      • FTP制御:300秒
      • ICMPプロトコル: 10秒
      • TCP プロトコル (通常は 300 秒、fin、rst は 10 秒、syn は 10 秒)
      • UDPプロトコル: 240秒
  • 内部ホストが IP を再利用するため、ホスト追跡に IP に依存するメカニズムが無効になります
    • ネットワーク トラフィック分析に基づくアプリケーションは、エンド ユーザーとトラフィックの間の特定の行動関係を追跡できません。
    • IPベースのユーザー行動ログ分析が困難になり、悪意のある攻撃ホストの特定が困難になる
    • IP ベースのユーザー認証は信頼できなくなりました
    • サーバーの接続制限により、ユーザー間のサービス プリエンプション キューが作成されます (本来は DOS 攻撃を防ぎ、1 人のユーザーからの大量の接続要求を防ぐためでしたが、ここでは過失致死を引き起こしました)
  • IP エンドツーエンド モデルの破壊
    • NAT は複数のセッションの関連付けを保証できません。NAT ゲートウェイに複数のパブリック IP アドレスがある場合、関連付けられたセッションのグループが異なるパブリック ネットワーク アドレスに割り当てられることになります (異なるドメイン名が必要になり、非常に面倒です)。
    • パブリック ネットワーク側がプライベート ネットワーク側にデータを積極的に送信する必要がある場合、NAT ゲートウェイが接続を確立していないため、通常はデータ パケットが到達できません。
  • IP ヘッダー情報を変更すると、一部のセキュリティ プロトコルの動作が妨げられます。
    • 認証プロトコルが正しく機能しません (NAT による IP アドレス、トランスポート層ポート、およびチェックサムの改ざんが原因です。認証の目的は、これらの情報が送信中に変更されないことを保証することであるため)。
    • トンネル プロトコルに問題があります (トンネル プロトコルは通常、トンネル エンティティを識別するために外部アドレスを使用します。NAT トンネルを通過するときに IP 多重化関係が存在するため、相手側は追加するなど、慎重に処理する必要があります)。自身のアイデンティティを識別するための特別なタグ)
    • ICMP プロトコルの逆多重化に失敗しました (IP 対応関係が再マップされるため、ICMP は多重化と逆多重化を行う必要があります。ICMP メッセージのロードで十分な情報が提供できない場合、逆多重化は失敗します)
    • IP フラグメンテーション (通常、IP フラグメンテーションのトランスポート層情報 (IP とポート番号、特にポート番号を含む) は最初のフラグメントにのみ含まれます。NAT は通常、マッピングにポート番号に依存します。トランスポート層情報がないと、NAT を識別するのは困難です)後続のフラグメントとアソシエーション テーブルの間の対応関係。フラグメントごとに追加のポート番号情報を個別に追加する必要があります)

3.3. NAT トラバーサルの一般的なソリューション

  • アプリケーション層ゲートウェイ (ALG): トランスポート層のポート番号に従ってプロトコルを識別し、そのプロトコルに対応する IP アドレスとポートを照会し、それを NAT 変換テーブルの IP とポートに変換し、変換前をフォームに記録します。クエリ関連付けテーブル。このようにして、プライベート ネットワーク側に送信されるすべての IP とポートは、変換された NAT ゲートウェイの IP とポートになり、プライベート ネットワーク側はパブリック ネットワーク側にデータ パケットを送信し、変換が記録される前にテーブルをクエリします。前回、対応するものを見つけて復元しました
    • 新しいプロトコルだけでなく、すべてのアプリケーション プロトコルへのアップグレードも追跡する必要があります
    • 一部のプロトコルは暗号化されており解析できないため、変換できません
  • プローブ テクノロジー STUN: 各サービスのコード サポートを追加し、同時に STUN サービスを展開し、ホールパンチ用の NAT 一時マッピング テーブルの適時性を使用する必要があります。
  • ミドルウェア技術 (UPnP): クライアントはゲートウェイのパブリック ネットワークのマッピング情報の保守に参加し、UPnP 経由でゲートウェイにマッピング テーブルを要求し、それをクライアントに保存し、必要に応じてプロトコルに関与する IP ポートを直接書き換えます。 NAT ゲートウェイのパブリック ネットワーク IP ポートを書き換えてデータを送信し、NAT ゲートウェイが外部ネットワークからデータを受信すると、UPnP によって確立されたマッピング テーブルを通じて IP およびポート情報 (トランスポート層) を変換するだけです。データを内部ネットワークに送信する
    • UPnP (ユニバーサル プラグ アンド プレイ) は、ネットワーク端末とゲートウェイ間の通信プロトコルです。
    • NAT ゲートウェイ、内部ホスト、およびアプリケーション プログラムが同時に UPnP をサポートする必要があり、ネットワーク接続時に NAT ゲートウェイと内部ネットワーク ホストが UPnP シグナリングを交換できるようにする必要があります。
  • リレー プロキシ テクノロジ (TURN): トランジット用のパブリック ネットワーク アプリケーション プロキシ サーバー
  • プロトコル固有のセルフトラバーサル テクノロジー (IKE、IPSec テクノロジー): UDP を使用してメッセージの外側にカプセル化の層を追加します。これにより、内部メッセージは影響を受けなくなります。
    • プロトコル自体がセキュリティを考慮しており、変更に対してメッセージを識別する機能を備えているため、他のメソッドは無効です

3.4. プローブ穴あけの基本原理

ここでは、最初に UDP プロトコル ホール パンチングに基づくテクノロジーについて説明し、最後に TCP ホール パンチングと比較します。

3.4.1. 基本事項

基本原理: 中間サーバーの支援により、マッピング テーブルがそれぞれの NAT ゲートウェイ上に確立されるため、P2P 接続の 2 つの当事者のメッセージは相手方の NAT ゲートウェイを直接通過できます。クライアントはそれぞれ中間サーバーに接続され、中間サーバーはクライアントの内部ネットワーク IP ポートと外部ネットワーク IP ポートを記録します。

P2P セッション確立の原則:

  • クライアント A とクライアント B はそれぞれ集中サーバーにログインし、集中サーバーはそれぞれの内部および外部ネットワーク IP ポートを記録します (ここで、集中サーバーはアクティブな状態を維持し、それぞれの IP ポート情報を更新する必要があります)。
  • クライアント A は最初、クライアント B への接続を開始する方法を知らないため、集中サーバーにメッセージを送信し、クライアント B との UDP 接続の確立を支援するよう集中サーバーに要求します。
  • 集中サーバーは、B の内部および外部ネットワーク IP ポートを A に送信し、さらに A の内部および外部ネットワーク IP ポートを B に送信します。
  • A は B の内部および外部ネットワーク アドレス 2 タプルに UDP パケットの送信を開始し、A は応答する最初の B のアドレス 2 タプルを自動的にロックします (なぜ 2 セットのデータ パケットを同時に送信する必要があるのでしょうか? B と A が同じ NAT ゲートウェイ配下にあるのか、それとも別の NAT ゲートウェイ配下にあるのかは不明です)
  • B は A の内部および外部ネットワーク アドレス 2 タプルへの UDP パケットの送信を開始し、B は対応する A に与える最初のアドレス 2 タプルを自動的にロックします。

3.4.2. 同じ NAT ゲートウェイ内

通常はローカル エリア ネットワークです。

UDP ホールパンチプロセス:

穴を開ける前に

  • A (10.0.0.1:4321) は、NAT ゲートウェイ (155.99.25.11) 経由で S (18.181.0.31:1234) に登録し、ログインします。
    • データ パケットが NAT を通過した後、ランダムなポート番号 62005 が A の接続に割り当てられます。
    • S が認識するものは、S のマッピング テーブルに記録されている (155.99.25.11:62005 がそれに情報を送信する) です。
  • B (10.1.1.3:4321) は、NAT ゲートウェイ (155.99.25.11) 経由で S (18.181.0.31:1234) に登録し、ログインします。
    • データ パケットが NAT を通過した後、ランダムなポート番号 62000 が B のこの接続に割り当てられます。
    • S が認識するものは、S のマッピング テーブルに記録されている (155.99.25.11:62000 がそれに情報を送信する) です。

パンチング

  • A (10.0.0.1:4321) は、NAT ゲートウェイ (155.99.25.11) 経由で S (18.181.0.31:1234) に B のアドレス 2 タプル情報を要求します。データ パケットには A のイントラネット アドレス (10.0.0.1:4321) が含まれています。
  • A (10.0.0.1:4321) のリクエストは、NAT ゲートウェイを介して、確立された NAT マッピング テーブル上で A' (155.99.25.11:62005) のリクエストとなり、S に送信されます。
  • S (18.181.0.31:1234) は、B の内部および外部ネットワーク アドレス情報 (10.1.1.3:4321、155.99.25.11:62000) を含むデータ パケットを、A' (155.99.25.11:62005) に送信します。 Bさんの住所情報
  • 次に、S (18.181.0.31:1234) は、A の内部および外部ネットワーク アドレス情報 (10.0.0.1:4321、155.99.25.11:62005) を含むデータ パケットを B' (155.99.25.11:62000) に送信します。B は保存します。 Aさんの住所情報
  • 次に、相互に通信し、A は B にデータを送信し、B は A にデータを送信します。どちらも最初にイントラネット アドレスとの通信を試みます。データ パケットが相互に受信された場合は、最初のパケットの返信アドレス情報を覚えておいてください。相手の身元を特定するため、内部ネットワークが通信できることを確認する

パンチング後

  • A と B はイントラネット アドレスを直接使用して通信します

知らせ:

  • A と B が相手のパブリック ネットワーク アドレスの 2 タプル情報に送信した UDP パケットは、現在の NAT デバイスが異なるポート間での UDP データ パケットの配信をサポートしているかどうかによって、相手が受信できない可能性があります (ヘアピンループバック変換機能)
  • ただし、NAT デバイスがヘアピン機能をサポートしている場合は、イントラネットを優先して使用するようにしてください。

3.4.3. NAT ゲートウェイで到達不能

UDP ホールパンチプロセス:

穴を開ける前に

  • A (10.0.0.1:4321) は、NAT ゲートウェイ (155.99.25.11) 経由で S (18.181.0.31:1234) に登録し、ログインします。
    • データ パケットが NAT を通過した後、ランダムなポート番号 62000 が A の接続に割り当てられます。
    • S が認識するものは、S のマッピング テーブルに記録されている (155.99.25.11:62000 がそれに情報を送信する) です。
  • B (10.1.1.3:4321) は、NAT ゲートウェイ (138.76.29.7) 経由で S (18.181.0.31:1234) に登録し、ログインします。
    • データ パケットが NAT を通過した後、ランダムなポート番号 31000 が B のこの接続に割り当てられます。
    • S が認識するものは (138.76.29.7:31000 がそれに情報を送信する)、S のマッピング テーブルに記録されています。

パンチング

  • A (10.0.0.1:4321) は、NAT ゲートウェイ (155.99.25.11) 経由で S (18.181.0.31:1234) に B のアドレス 2 タプル情報を要求します。データ パケットには A のイントラネット アドレス (10.0.0.1:4321) が含まれています。
  • A (10.0.0.1:4321) のリクエストは、NAT ゲートウェイを介して、確立された NAT マッピング テーブル上で A' (155.99.25.11:62000) のリクエストとなり、S に送信されます。
  • S (18.181.0.31:1234) は、B の内部および外部ネットワーク アドレス情報 (10.1.1.3:4321、138.76.29.7:31000) を含むデータ パケットを、A' (155.99.25.11:62000) に送信します。 Bさんの住所情報
  • 次に、S (18.181.0.31:1234) は、A の内部および外部ネットワーク アドレス情報 (10.0.0.1:4321、155.99.25.11:62000) を含むデータ パケットを B' (138.76.29.7:31000) に送信します。B は保存します。 Aさんの住所情報
  • 次に、相互に通信し、A は B にデータを送信し、B は A にデータを送信します。両者は最初にイントラネット上で相互に通信を試みます。相互にデータ パケットを受信した場合、最初の応答パケットのアドレス情報を覚えておきます。内部ネットワークが通信できず、後続のすべてのパケットが B の外部ネットワーク アドレスと通信することを確認します。

パンチング後

  • A と B はイントラネット アドレスを直接使用して通信します

注: B から A に送信されたパケットが B の NAT デバイスに到着する前に、A から B に送信されたパケットが到着した場合、デフォルトでは外部ネットワークが内部にパケットを送信することを許可されていないため、パケットは破棄されます。

3.4.4. マルチレイヤー到達不能 NAT ゲートウェイ

個々のクライアントへのインターネット ISP 導入の一般的なモデル

UDP ホールパンチプロセス:

穴を開ける前に

  • A (10.0.0.1:4321) は NAT-A ゲートウェイ (10.0.1.1) 経由でデータを送信し、登録のために NAT-C ゲートウェイ (155.99.25.11) 経由でデータ パケットを S (18.181.0.31:1234) に送信します。そしてログインしてください
    • データ パケットが NAT-A を通過した後、ランダムなポート番号 45000 が A のこの接続に割り当てられます。
    • データ パケットが NAT-C を通過した後、ランダムなポート番号 62000 がこの接続に割り当てられます。
    • S が認識するものは、S のマッピング テーブルに記録されている (155.99.25.11:62000 がそれに情報を送信する) です。
  • B (10.1.1.3:4321) は NAT-B ゲートウェイ (10.0.1.2) 経由でデータを送信し、登録のために NAT-C ゲートウェイ (155.99.25.11) 経由でデータ パケットを S (18.181.0.31:1234) に送信します。そしてログインしてください
    • データ パケットが NAT-B を通過した後、ランダムなポート番号 55000 がこの B の接続に割り当てられます。
    • データ パケットが NAT-C を通過した後、ランダムなポート番号 62005 がこの接続に割り当てられます。
    • S が認識するものは、S のマッピング テーブルに記録されている (155.99.25.11:62005 がそれに情報を送信する) です。

パンチング

  • A(10.0.0.1:4321)は、NAT-Aゲートウェイ(10.0.1.1)およびNAT-Cゲートウェイ(155.99.25.11)を介して、S(18.181.0.31:1234)にBのアドレス2タプル情報を要求し、データ パケットにはイントラネット アドレス (10.0.0.1:4321) が含まれています
  • S (18.181.0.31:1234) は、B の内部および外部ネットワーク アドレス情報 (10.1.1.3:4321、155.99.25.11:62005) を含むデータ パケットを、A' (155.99.25.11:62000) に送信します。 Bさんの住所情報
  • 次に、S (18.181.0.31:1234) は、A の内部および外部ネットワーク アドレス情報 (10.0.0.1:4321、155.99.25.11:62000) を含むデータ パケットを B' (155.99.25.11:62005) に送信します。B は保存します。 Aさんの住所情報
  • 次に、相互に通信し、A は B にデータを送信し、B は A にデータを送信します。両者は最初にイントラネット上で相互に通信を試みます。相互にデータ パケットを受信した場合、最初の応答パケットのアドレス情報を覚えておきます。内部ネットワークが通信できず、後続のすべてのパケットが B の外部ネットワーク アドレスと通信することを確認します。

パンチング後

  • A と B はイントラネット アドレスを直接使用して通信します

3.4.5. 保活

  • NAT デバイスには UDP のアイドル タイムアウト カウントがあるため、すべてのトラバーサルには有効期間があります。
  • 両方の当事者がハートビート パケットを相互に送信する必要があり、両方のセッションが正常に動作できるようにするには、このハートビート パケットを両方の当事者が送信する必要があります。

3.4.6. TCP ホールパンチング

UDP ホールパンチングとの違い:

  • 一般に、NAT デバイスは UDP サポートに適しており、TCP はより複雑です (NAT 上の TCP プロトコルのマッピング テーブルの有効期間は、TCP 接続状況に応じて自動的に無効にできるのに対し、UDP は定期的にのみ無効にできるためです)。 NAT マッピング テーブルは、TCP 送信者番号のポートに基づいています。つまり、以前の登録およびログインと一致している必要があります。そうでない場合、相手側に送信されるポート アドレスが異なり、失敗する可能性が高くなります。 )
  • UDP は 1 つのソケットの送受信通信を処理するだけで済みますが、TCP は同じポートを複数のソケットにバインドする必要があります (ポート多重化)。
  • TCP ホールパンチの成功率は、UDP の成功率よりもはるかに低いです (NAT ファイアウォール戦略は TCP プロトコルにあまり適していません)

TCP ホールパンチングセッション確立の原則:

  • クライアント A はサーバーへの接続を使用してサーバーにリクエストを送信し、サーバーにクライアント B への接続を支援するよう依頼します。
  • サーバーはクライアントBの内部ネットワークと外部ネットワークのTCPアドレス2タプルの情報をAに返すと同時に、サーバーはクライアントAの内部ネットワークと外部ネットワークのTCPアドレス2タプルをBに送信します。
  • クライアント A とクライアント B はそれぞれ、サーバーに接続されているポートを使用して、相手の内部および外部ネットワーク アドレス 2 タプルへの TCP 接続を非同期に開始し、同時にそれぞれのローカル TCP ポートに外部接続アクセスがあるかどうかを監視します。
  • A と B は、新しい接続があるかどうかを確認するために発信接続の待機を開始します。何らかのネットワーク エラーが原因で発信接続が失敗した場合、クライアントは時間を置いて再試行できます。
  • TCP 接続が確立された後、クライアント間で認証操作を開始して、現在の受信接続が目的の接続であることを確認する必要があります (双方の IP ポートを比較)。認証が失敗した場合、クライアントは接続を閉じ、新しい接続が接続されるのを待ちます。クライアントは最初に認証されたクライアントのみを受け入れ、その後、新しい接続を待機し続けることなく P2P 通信プロセスに入ります。

3.5. 一般的に使用されるホールパンチプロトコルフレームワーク

  • STUN (P2P ソリューション、TCP ペネトレーションおよび UDP ペネトレーションをサポート)
  • TURN(リレーテクノロジー)
  • ICE (統合された STUN、TURN)

4. P2Pダウンロード技術の原理

4.1. 概要

ダウンロードの本質は、リソース サーバーからリソース データを要求することであり、通常は限定されたサーバーがリソース サーバーとして使用されます。
P2P ダウンロードの場合、ダウンロードに参加するすべての人がリソース サーバーでもあり、他の人がダウンロードできるようにコンテンツを提供すると考えられます。ダウンローダーは誰をダウンロードするかを知る必要があり、シード ファイルに依存してリソース サーバー インデックスを提供します。

P2P と C/S ダウンロードの比較:

  • 元の C/S モードでは、ダウンロードする人が増えるほど、取得できる帯域幅が少なくなります。
  • P2P ダウンロード モード。ダウンロードする人が増えるほど、提供される帯域幅が増加します。

4.2. 2 つの P2P ダウンロード技術ソリューション

4.2.1. BitTorrent 技術的ソリューション

2001 年にアメリカのプログラマーによってリリースされた BitTorrent プロトコルは、P2P ファイル転送に基づく通信プロトコルであり、このプロトコルでは、リソース発行者がファイル生成に基づいてシード ファイルである .torrent ファイルを提供する必要があります。

種子の組成:

  • トラッカー情報: BT ダウンロードで使用する必要があるトラッカー サーバーのアドレスとトラッカー サーバーの設定
  • ファイル情報:対象ファイルを仮想的に同じサイズのブロックに分割(ブロックサイズは2Kの整数乗) ここでのファイル情報には、各ブロックのインデックス情報とハッシュ情報が含まれます。

P2P シード操作の基本原理:

  • ユーザーをダウンロードするには、まずシード情報、トラッカー サーバー アドレス、および関連設定を取得する必要があります。
  • ユーザーがリソースをダウンロードし、ローカル リソース フラグメントが到着すると、トラッカー サーバーに通知が送信され、トラッカー サーバーはダウンロードされたユーザー情報を記録してサーバー キャッシュに保存します (トラッカー サーバーの役割はサービス検出と似ています)。
  • 他の誰かがダウンロードする必要がある場合、最初にトラッカー サーバーに接続して、以前にダウンロードしたユーザーを含む、ダウンロードされたリソースのピア リストを取得します。
  • ピアとピアのダウンロードを開始する準備が整う前に、BT ソフトウェア (NAT デバイス ポートの有効期間メカニズムなど) を通じて相互に通信できるようにホールが開けられ、ファイルのフラグメントが作成されます。ダウンロードされる。BitTorrent ソフトウェアは、同時に複数のシャードに対して複数の人からリソースのダウンロードを要求する場合があります。ダウンロード後にハッシュ検証が失敗した場合は、他のピアが試行されます。

BT スキームの欠点:

  • Trackerサーバーが異常な場合、Peerリストが取得できない場合があります(単一障害点)
  • 各ピアに障害が発生すると、ダウンロードがタイムアウトになる可能性があります

4.2.2. Kademlia 技術ソリューション

より正確に言うと、Kademlia は BT ソリューションにおける単一障害点問題を解決するための DHT (分散ハッシュ テーブル) 分散型 P2P ソリューション用の P2P プロトコルであり、ブロックチェーンはそのようなソリューションです。

基本合意書:

  • 各ノードには ID (非常に長い) があり、これは DHT ネットワーク内のファイルの特定の計算方法の HASH です。
  • 各ノードはファイル インデックスやファイル フラグメントなどを格納する責任を負う必要がありますが、各ノードは完全な情報を持っているわけではなく、フラグメントが 1 つしかなく、すべてのファイル フラグメントがどこに格納されているかも知りません。
  • HASH はファイルごとに計算され、ノード ID は HASH と同じか類似しており、ノードはファイルがどこに保存されているかを知る必要があります。

セッション確立の原則:

  • ノード新規はオンラインです。ファイル 1 をダウンロードする必要があります
  • まず、新しいノードはファイル 1 のシード ファイルを取得する必要があります。このシード ファイルには、いくつかのノードのアドレスとファイル 1 のハッシュが含まれます。
  • node new ファイル 1Hash に従ってシード ファイル内の既知のノードを照会し、Hash と同じまたは類似するノード情報を見つけます。
  • 各ノードは、node new からリクエストを受信すると、まず要件を満たしているかどうかを確認し、要件を満たしていない場合はさらにそのリクエストをブロードキャストします (ソーシャル ネットワークで誰かを見つけるのと同じです)。
  • ノードが見つかると (ここではノード C で、ファイル 1 のインデックスが含まれています)、ノード new にそれぞれ B、D、F にアクセスしてクエリを実行する必要があることを応答します。
  • ノード new は最初に B に接続し、ダウンロードを開始します。ファイル 1 がローカルにある場合は、ノード C と同様の ID を持つノードにファイル 1 が存在することを伝え、そのファイルを所有者リストに追加できます。
  • ノード C および他のファイル 1 インデックス所有者も、ファイル 1 インデックス リストに新しいノードを追加します。

4.3. BT技術を活用したP2Pダウンロード導入事例

4.3.1. P2P テクノロジーが直面する問題

最大の問題は、P2P レートが高くなく、サーバーから直接リソースを求めることが多いため、多くのサーバーの帯域幅コストを削減できないことです。最も一般的なのは、特定の更新ファイルをプッシュする場合、通常は同時に行われることであり、全員の更新の期間が重なると、ピア ノードの不足が発生しやすくなります。

4.3.2. 解決策

ファイルをプレプッシュすることで、ダウンロード リソースを事前にユーザーに届けることができ、ピア ノードの数を積極的に増やすことができます。そのため、ユーザー自身の体験に影響を与えないことも必要であり、一般的には以下のような目標を達成する必要があります。

  • ユーザーの帯域幅が許す前提で、ダウンロード速度を向上させます
  • また、ユーザーのインターネットへのアクセスに影響を与えないように、ユーザーのアップリンク帯域幅を厳密に制御する必要があります。
  • ダウンロード品質の保証と大規模ファイルのダウンロード時のエラー制御

おすすめ

転載: blog.csdn.net/a1058926697/article/details/131339909