sgcWebSockets 2022.8.0 より、sgcWebSockets ライブラリに新しいコンポーネント TsgcRTCPeerConnection が追加されました。
TsgcRTCPeerConnection は、UDP を使用して P2P でピア間を接続するクライアントコンポーネントです。処理の流れは以下の 4 つのステップに分かれます:- シグナリング
- 接続
- セキュリティ確立
- 通信
これらのステップを実装するため、クライアントは以下のプロトコルを使用します:
- WebSocket: シグナリングに使用するプロトコルです。クライアントはセッション記述プロトコル(SDP)とローカル・パブリック・リレー IP アドレスを交換します。
- UDP: トランスポートプロトコルです。クライアントは UDP を使用してピア間でメッセージを送受信します。
- DTLS: TLS に類似した暗号化仕様で、ピア間のメッセージを保護し、第三者による読み書きを防ぎます。
- STUN: パブリック IP アドレスを取得するためのプロトコルです。
- TURN: NAT の背後にいるピアの IP アドレスを中継するためのプロトコルです。
- ICE: ピア間でアクセス可能な IP アドレスとポートを特定するためのプロトコルです。
シグナリング
クライアントは起動時点では、誰と、何について通信するかが分かりません。シグナリングでは、以下のような詳細を含む SDP(セッション記述プロトコル)を使用します:
- ピアに到達できる IP アドレスとポート
- 通信を保護するためのフィンガープリント証明書
- ユーザー名とパスワード
- ...
シグナリングはデータ交換に WebSocket プロトコルを使用し、サブプロトコルを通じて動作します。サーバー側では TsgcWSPServer_RTCPeerConnection コンポーネントとして実装されています。
TsgcRTCPeerConnection は内部で TsgcWSPClient_RTCPeerConnection をアタッチした WebSocket クライアントを自動的に生成します。
IP アドレスとポートを取得するため、クライアントは STUN/TURN プロトコルを使用します。そのため、STUN/TURN サーバーも必要です。
リンク:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
接続
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 つのプロトコルで行われます:
- RTP: リアルタイムトランスポートプロトコル。SRTP で暗号化されたメディアの交換に使用します。
- SCTP: ストリーム制御伝送プロトコル。DTLS で暗号化された DataChannel メッセージの送受信に使用します。
現時点ではこれらのプロトコルは実装されていませんが、UDP 上の DTLS を使用してデータを送受信することができます。
