70

ブラウザでのピアツーピア接続に興味があります。これはWebRTCで可能であるように思われるので、どのように機能するのか疑問に思っています。

私はいくつかの説明を読み、それについての図を見ました、そして今、接続確立がサーバー上で機能することは私には明らかです。サーバーは、サーバーに依存しない直接接続を開始できるように、相互に接続することをいとわないクライアント間でデータを交換しているようです。

しかし、それは私が理解していないことです。これまで、接続を作成する唯一の方法は、コンピューターAのポートでリッスンし、コンピューターBからそのポートに接続することだと思っていました。しかし、WebRTCではそうではないようです。どのクライアントもポートでリッスンを開始しないと思います。どういうわけか、彼らはポートをリッスンして接続を受け入れることなく接続を作成することができます。クライアントAもクライアントBもサーバーとして機能し始めません。

しかし、どのように?クライアントが相互に接続するために使用できる、WebRTCサーバーを介して交換されるデータは何ですか?

これについてのあなたの説明をありがとう:)

編集

この記事を見つけました。WebRTCとは関係ありませんが、私の質問の一部に答えると思います。よくわかりません、タフです。誰かが私にそれを説明し、私にいくつかの追加のリンクを与えることができれば、それはまだクールでしょう。

4

4 に答える 4

60

WebRTCは、クライアントJSアプリにSDPオファーを提供して(JSアプリが必要とする場合でも)他のデバイスに送信します。他のデバイスはそれを使用してSDP回答を生成します。

秘訣は、SDPにICE候補が含まれていることです(事実上、「このIPアドレスとこのポートで私に話しかけてみてください」)。ICEは、ファイアウォールで開いているポートをパンチするように機能します。ただし、両側が対称NATの場合、一般的には不可能であり、(TURNサーバー上の)代替候補を使用できます。

直接(または実質的にパケットミラーであるTURNを介して)通信すると、DTLS接続を開き、それを使用してSRTP-DTLSメディアストリームにキーを設定し、DTLSを介してデータチャネルを送信できます。

編集:ここの頭字語: http: //blog.1click.io/10-jargons-abbreviations-for-webrtc-fans/残りはGoogleです。これらのほとんどは、IETF(http://ietf.org/)によって定義されています。

編集2:FirefoxとChrome(および仕様)はICE候補に「トリクル」を使用するように移行したため、ICE候補は通常PeerConnectionに追加され、最初のSDPとは独立して交換されます(ただし、最初の候補者はオファーを送信する前に準備ができており、それらをまとめます)。https://webrtcglossary.com/trickle-ice/およびhttps://datatracker.ietf.org/doc/draft-ietf-ice-trickle/を参照してください

于 2012-10-03T22:18:55.257 に答える
27

WebRTCのしくみ

このドキュメントは、WebRTCの簡単で抽象的な紹介を提供します。WebRTCの詳細については、このドキュメントの最後にある「参考資料」セクションを参照してください。

WebRTC

WebRTC(Web Real-Time Communication)は、ブラウザー間のピアツーピア二重リアルタイム通信用に開発された一連のテクノロジーです。その名前が示すように、Webと互換性があり、W3Cの標準です。WebRTCの重要な機能の1つは、NATアドレスの背後でも機能することです。

WebRTCピアツーピア

WebRTCはいくつかのテクノロジーを使用して、ブラウザー間のリアルタイムのピアツーピア通信を提供します。これらのテクノロジーは

WebRTCを実行するためにSignalingServerが必要であるということがもう1つあります。ただし、シグナリングサーバーの実装には定義された標準はありません。各実装は独自のスタイルを作成します。このセクションの後半で、SignalingServerに関する詳細情報を提供します。

上記のテクノロジーについて簡単に説明しましょう。

SDP(セッション記述プロトコル)

SDPは単純なプロトコルであり、ブラウザでコーデックがサポートされている場合に使用されます。たとえば、WebRTCを介して接続される2つのピア(クライアントAクライアントB )があるとします。クライアントAクライアントBは、サポートするコーデックを定義するSDP文字列を作成します。たとえば、クライアントAは、ビデオ用のH264、VP8、およびVP9コーデック、オーディオ用のOpusおよびPCMコーデックをサポートする場合があります。クライアントBは、ビデオにはH264のみ、オーディオにはOpusコーデックのみをサポートできます。この場合、クライアントAクライアントBの間で使用されるコーデックはH264とOpusです。ピア間に共通のコーデックがない場合、ピアツーピア通信を確立できません。

これらのSDP文字列が相互にどのように送信されるかについて質問があるかもしれません。ここでSignalingServerが実行されます。

ICE(双方向接続の確立)

ICEは、ピアがNATの背後にある場合でも、ピア間の接続を確立する魔法です。もう一度、クライアントAクライアントBが接続され、ICEがそのためにどのように使用されるかを見てみましょう。

  • クライアントAは、STUNサーバーを使用してローカルアドレスとパブリックインターネットアドレスを見つけ、SignalingServerを介してこれらのアドレスをクライアントBに送信します。STUNサーバーから受信した各アドレスはICE候補と呼ばれます

上の画像では、2つのサーバーがあります。1つはSTUNで、もう1つはTURNサーバーです。

STUNサーバーは、クライアントAにすべてのアドレスを学習させるために使用されます。この例を挙げましょう。私たちのコンピューターは通常、192.168.0.0ネットワークに1つのローカルアドレスを持ち、 www.whatismyip.comに接続したときに表示される2番目のアドレスがあります。このIPアドレスは、実際には私たちのパブリックIPアドレスです。インターネットゲートウェイ(モデム、ルーターなど)なので、STUNサーバーを定義しましょう。STUNサーバーは、ピアにパブリックIPアドレスとローカルIPアドレスを知らせます。ところで、Googleは無料のSTUNサーバー(stun.l.google.com:19302)を提供しています。

画像にはもう1つのサーバー、TURNServerがあります。TURN Serverは、ピア間でピアツーピア接続を確立できない場合に使用されます。TURNサーバーは、ピア間でデータを中継するだけです。

  • クライアントBも同じことを行い、STUNサーバーからローカルIPアドレスとパブリックIPアドレスを取得し、これらのアドレスをSignalingServerを介してクライアントAに送信します。

  • クライアントAクライアントBのアドレスを受信し、クライアントBとの接続を作成するために、特別なpingを送信して各IPアドレスを試行します。クライアントAが任意のIPアドレスから応答を受信すると、そのアドレスを応答時間とその他のパフォーマンス資格情報とともにリストに追加します。最後に、クライアントAは、そのパフォーマンスに応じて最適なアドレスを選択します。

  • クライアントBは、クライアントAに接続するために同じことを行います

RTP(リアルタイムプロトコル)

RTPは、リアルタイムデータを送信するための成熟したプロトコルです。これはUDPに基づいています。オーディオとビデオは、WebRTCのRTPで送信されます。RTP通信でQoSを提供するRTCP(リアルタイム制御プロトコル)という名前のRTPの姉妹プロトコルがあります。RTPはRTSP(Real-time Streaming Protocol)でも使用されます

シグナリングサーバー

最後の部分は、WebRTCで定義されていないシグナリングサーバーです。上記のように、Signaling Serverは、クライアントAクライアントBの間でSDP文字列とICE候補を送信するために使用されます。Signaling Serverは、どのピアが相互に接続されるかも決定します。WebSocketテクノロジーは、通常、通信用のシグナリングサーバーで使用されます。

互換性

過去1年間で、Safari、Edgeを含むすべてのブラウザーは、WebRTCをサポートする新しいバージョンをリリースしました。Chrome、Firefox、Operaはすでにしばらくの間WebRTCをサポートしています。ブラウザに共通のビデオコーデックはH264です。オーディオの場合、Opusはブラウザで一般的です。PCMはオーディオコーデックにも使用できますが、ライセンスの問題により、すべてのブラウザでAACがサポートされている場合でも、AACは使用されません。IPカメラは通常、ビデオコーデックにはH264を、オーディオコーデックにはPCMまたはAACをサポートします。

さらに読むと参考文献

ところで、私はスケーラブルな1対多のWebRTCとピアツーピアのWebRTC接続をサポートするAntMediaServerの開発者です

于 2018-11-14T05:00:25.547 に答える
20

p2p WebRTC接続の確立には3つのステップがあります(10.000フィートの概要):

  1. ステップ1:シグナリング:両方のピアがシグナリングサーバーに接続し(80/443を超えるWebSocket、Comet、SIPなどを使用)、情報を交換します(メディア機能、利用可能になったときのパブリックIP:ポートペアなど)

  2. ステップ2:検出:LANまたはモバイルネットワークに接続されたデバイスは、アクセス可能なパブリックIP(およびポート)を認識しないため、パブリックインターネット上にあるSTUN / TURNサーバーを使用して、ip:portペア(ICE候補者)。その過程で、ステップ3で使用されるNAT/ルーターに穴を開けます。

  3. ステップ3:P2P接続:ICE候補が最初のシグナリングチャネルを介して交換されると、各ピアは互いのip:portを認識し(NAT /ルーターに穴が開けられます)、ピアツーピアUDP接続を確立できます。

ここに画像の説明を入力してください

上記のスキームは、ローカルネットワークに接続された2つのデバイスを使用したプロセスを説明しています。これは、接続の問題のトラブルシューティングを扱った私が書いた記事の一部ですが、WebRTCがどのように機能するかを説明するのに役立ちます。

于 2017-06-08T10:57:54.227 に答える
11

この本「HighPerformanceBrowserNetworking(O'Reilly)」 http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#STUN_TURN_ICE には、WebRTCの使用方法の基礎が記載されています。 ICEテクノロジー。

ここに画像の説明を入力してください

特に、STUNサーバーのIPアドレスがわかっていると仮定すると、WebRTCアプリケーションは最初にバインディング要求をSTUNサーバーに送信します。STUNサーバーは、パブリックネットワークから見たクライアントのパブリックIPアドレスとポートを含む応答で応答します。

これで、アプリケーションは、SDPを介して他のピアに送信できるパブリックIPとポートタプルを検出します。(SDPは外部シグナリングチャネルを介して送信されることに注意してください。fiwebsocketはWebサービスを介して確立されます)

このメカニズムを導入すると、2つのピアがUDPを介して相互に通信する場合は常に、確立されたパブリックIPとポートタプルを使用してデータを交換できます。

残念ながら、UDPがファイアウォールによってブロックされる場合があります。この問題に対処するために、STUNが失敗するたびに、フォールバックとしてTraversal Using Relays around NAT(TURN)プロトコルを使用できます。これは、UDPを介して実行され、他のすべてが失敗した場合にTCPに切り替えることができます。

于 2016-06-13T14:22:38.950 に答える