P2P通信
P2Pとは
P2P(Peer to Peer)は、中央のサーバーを介さず端末同士が対等に直接通信する方式です。参加する端末をピア(peer=対等な相手)と呼びます。
対する従来型がクライアント・サーバー方式で、全員が中央のサーバーにアクセスし、サーバーがデータを配る形です。Web サイトの閲覧はこちらにあたります。
| クライアント・サーバー | P2P | |
|---|---|---|
| データの持ち主 | 中央サーバー | 参加している各端末 |
| 参加者が増えると | サーバーの負荷が増える | 配信能力も一緒に増える |
| 単一障害点 | サーバーが落ちると全滅 | 一部が落ちても継続できる |
| 管理・監視 | しやすい | しにくい |
| 例 | Webサイト、メール | ファイル共有、ビデオ通話、ブロックチェーン |
P2P の最大の魅力は、参加者が増えるほど全体の配信能力も増える点です。人気のファイルほど持っている人が多くなり、みんなで少しずつ送り合えるため速くなります。
どこで使われているか
- ファイル共有 — BitTorrent などが代表格。ファイルを細かい断片に分け、複数のピアから並行してダウンロードします
- ビデオ通話 — WebRTC を使ったブラウザ間の通話。映像と音声はサーバーを経由せず端末間を直接流れるため、遅延が小さくて済みます
- ブロックチェーン — 台帳のコピーを全ノードが持ち合い、P2P ネットワークで同期します
- ソフトウェア配布 — 大規模な更新データを端末同士で配り合い、配信サーバーの負荷を下げる仕組みもあります
NAT越えという難関
P2P の実装で最大の壁が NAT越え(NAT traversal)です。
家庭やオフィスの端末はプライベートIPアドレスしか持たず、ルーターの [[NATとポートフォワーディング]] を通して外と通信しています。この状態では、外側から「その端末」を名指しして接続することができません。お互いが NAT の内側にいると、どちらからも接続を始められないわけです。
そこで次の仕組みが使われます。
- STUN — 外から見た自分のグローバルIPとポートを教えてくれるサーバー。これを互いに交換し、[[UDP]] で同時に送り合うと NAT に通り道ができます(UDPホールパンチング)
- TURN — どうしても直接つながらない場合に、通信を中継してくれるサーバー。P2P を諦めて経由する最終手段です
- シグナリングサーバー — 相手を見つけて接続情報を交換するための最小限のサーバー
つまり実務の P2P は「完全にサーバー不要」ではなく、出会いの手助けだけをサーバーに任せ、本番のデータは直接流す形が一般的です。
初学者向けポイント
- P2P だからといって匿名でも安全でもありません。相手に自分のIPアドレスが見えるのが普通です
- 直接つながる相手が信頼できるとは限らないため、[[ソケット通信]] で受け取ったデータの検証は必須です
- 大規模配信では P2P より [[CDN]] のほうが管理しやすく、実務では CDN が選ばれる場面が多くあります。P2P が輝くのは「リアルタイム性」か「中央集権を避けたい」ときです
- 企業ネットワークでは P2P 通信がファイアウォールで遮断されていることがあり、TURN 経由にフォールバックする設計が要ります
関連技術とのつながり
- [[NATとポートフォワーディング]] — P2P最大の障壁。NAT越えの技術が必要になる
- [[ソケット通信]] — ピア同士の直接通信はソケットの上に実装される
- [[UDP]] — ホールパンチングやリアルタイム通信で主に使われる
- [[CDN]] — 大規模配信における中央集権型の対抗手段
Q: P2P通信の特徴として正しいものはどれ?
- [x] 参加者が増えるほど全体の配信能力も増える
- [ ] 必ず中央サーバーがすべてのデータを保持する
- [ ] 通信内容が自動的に匿名化される
解説: 各ピアがデータを持ち合って送り合うため、参加者の増加がそのまま配信能力の増加になります。匿名性は保証されません。
Q: P2P実装で問題になる「NAT越え」とは何の課題?
- [ ] 暗号鍵を安全に配る課題
- [x] NATの内側にいる端末同士が互いに接続を始められない課題
- [ ] ファイルを断片に分割する課題
解説: プライベートIPしか持たない端末は外から名指しできないため、STUNやTURNといった仕組みで通り道を作る必要があります。
Q: 直接接続がどうしても確立できないときに通信を中継するサーバーはどれ?
- [ ] STUN
- [x] TURN
- [ ] DHCP
解説: STUNは外から見た自分のアドレスを教える役割で、直接つながらない場合の中継はTURNが担います。