RTCPeerConnection P2P

· リリース

sgcWebSockets 2022.8.0 より、sgcWebSockets ライブラリに新しいコンポーネント TsgcRTCPeerConnection が追加されました。

TsgcRTCPeerConnection は、UDP を使用して P2P でピア間を接続するクライアントコンポーネントです。処理の流れは以下の 4 つのステップに分かれます:




これらのステップを実装するため、クライアントは以下のプロトコルを使用します:

シグナリング 

クライアントは起動時点では、誰と、何について通信するかが分かりません。シグナリングでは、以下のような詳細を含む SDP(セッション記述プロトコル)を使用します:

シグナリングはデータ交換に WebSocket プロトコルを使用し、サブプロトコルを通じて動作します。サーバー側では TsgcWSPServer_RTCPeerConnection コンポーネントとして実装されています。

TsgcRTCPeerConnection は内部で TsgcWSPClient_RTCPeerConnection をアタッチした WebSocket クライアントを自動的に生成します。

IP アドレスとポートを取得するため、クライアントは STUN/TURN プロトコルを使用します。そのため、STUN/TURN サーバーも必要です。

リンク:

接続 

2 つのピアが候補と SDP を把握したら、クライアントは ICE と呼ばれる別の標準プロトコルを使用します。

ICE(Interactive Connection Establishment)は、2 つのピア間の接続確立を可能にします。ピアは同じネットワーク内にある場合も、NAT の背後にある場合も対応できます。ICE は中央サーバーなしに直接接続を確立するためのソリューションです。P2P 接続が不可能な場合、ICE は TURN サーバーを使用してデータを中継します。

ICE が 2 つのピア間で接続可能な有効な候補を見つけると、次のステップは通信の暗号化です。

リンク:

セキュリティ確立 

 ピアが接続された後、通信を安全にする必要があります。これには DTLS を使用します。DTLS は UDP 上の通信を保護するために使用される暗号化プロトコルです。

DTLS ハンドシェイクが正常に完了すると、SRTP(Secure Real-Time Transport Protocol)と呼ばれる別のプロトコルが使用されますが、現時点では SRTP は実装されていません。

リンク:

通信 

2 つのピアがセキュアなプロトコルを使用するようになると、通信は以下の 2 つのプロトコルで行われます:

現時点ではこれらのプロトコルは実装されていませんが、UDP 上の DTLS を使用してデータを送受信することができます。