WebRTCファイル転送の仕組み

WebRTCファイル転送は3つの段階で動きます。シグナリングサーバーが2つのブラウザを引き合わせ、STUNとICEが家庭のルーター(NAT)を越えるネットワーク経路を探し、直接の経路がなければTURNリレーに切り替えます。そしてブラウザ同士がDTLSで暗号化されたデータチャネルを開き、ファイルを直接またはリレー経由で、保存することなく少しずつ送ります。

WebRTCファイル転送を使うと、2つのブラウザが、クラウドストレージにアップロードすることなく互いにファイルを 送れます。簡単そうに聞こえますが、インターネットは家庭のパソコン同士が直接やり取りするようにはつくられて いませんでした。このガイドでは、StrongFolderを例に、実際に何が起きているのか — シグナリング、NAT、STUN、 ICE、TURN、DTLS、データチャネル — をわかりやすく解説します。

WebRTCとは何ですか?

WebRTC(Web Real-Time Communication)は、W3CとIETFが標準化した、ブラウザ間の リアルタイム接続のためのブラウザAPIとネットワークプロトコルの集まりです。Chrome、Edge、Firefox、Safari、 Operaのすべてが対応しています。ビデオ通話や音声通話のためにつくられましたが、あらゆるバイナリデータを運ぶ データチャネルも備えています。ファイルとは、まさにそのバイナリデータです。

重要なのは、WebRTC接続がいったん確立すると、データはサーバーのストレージではなく2つの端末の間を流れる ことです。これがブラウザでのP2Pファイル転送を可能にしています。

なぜ2つのブラウザは単純に直接つながれないのですか?

自分専用のパブリックアドレスを持っているデバイスがほとんどないからです。あなたのノートパソコンは、家庭の ルーター、オフィスのファイアウォール、携帯キャリアのネットワークの内側にあります。ルーターは NAT(Network Address Translation)を行い、多数のプライベートなデバイスで1つのパブリック IPアドレスを共有し、内側から送ったものへの応答だけを通します。

そのため、2つのブラウザは、ファイルのデータを流す前に3つの問題に直面します。

  1. 互いに到達する方法がわからない — どちらも相手の存在を知らない。
  2. 自分のパブリックアドレスがわからない — 知っているのは192.168.1.20のようなプライベートアドレスだけ。
  3. ルーターが要求していない外部からの通信をブロックするかもしれない。

WebRTCは、それぞれの問題を別々の仕組みで解決します。

WebRTCファイル転送はステップごとにどう動きますか?

「共有」をクリックしてから最後の1バイトまでの全体の流れは次のとおりです。

 Sender browser                   Servers                      Recipient browser
 ──────────────                   ───────                      ─────────────────
 1. Choose files ──── metadata ──▶ Signaling server
                                        ◀──────── 2. Open link ────────
 3. Offer (SDP) ─────────────────▶ Signaling ──────────────────▶ Answer (SDP)
 4. Ask STUN "how do I look?" ─▶ STUN servers ◀─ Ask STUN "how do I look?"
 5. ICE candidates ◀─────────────▶ Signaling ◀──────────────────▶ ICE candidates
 6. ICE checks: try LAN → direct internet → TURN relay
 7. DTLS handshake ◀════════════ encrypted ═════════════════▶ DTLS handshake
 8. Data channel: file chunks ═══(direct or via TURN relay)══▶ written to disk

ステップ1〜2 — シグナリング。 送信者がファイルを選び、サービスはリンクに必要なメタデータを記録します。 受信者がリンクを開くと、両方のブラウザがシグナリングサーバーに接続します。WebRTCは シグナリングの方式を定めていません。StrongFolderはPeerJSと独自のシグナリングサーバーを使っています。

ステップ3 — オファーとアンサー。 一方のブラウザが、SDP(Session Description Protocol)でオファーを 作成します。「データチャネルを使いたい。これが私の暗号化のフィンガープリントと機能です」という内容です。 もう一方はアンサーで応えます。どちらもシグナリングサーバーを通って送られます。

ステップ4 — STUN。 各ブラウザはSTUNサーバーに「私はどのアドレスとポートから来て いるように見えますか?」と尋ねます。その答えが、ルーターによって割り当てられたパブリックアドレスです。 STUNサーバーが扱うのはごく小さなリクエストだけで、ファイルのデータは扱いません。StrongFolderは、Googleの ものを含む公開STUNサーバーと独自のSTUNサーバーを使っています。

ステップ5 — ICE候補。 各ブラウザは、自分に到達できる可能性のある方法、つまり候補を集めます。 ローカルネットワークのアドレス(host)、STUNで得たパブリックアドレス(server-reflexive)、TURNリレー上の アドレス(relayed)です。これらの候補をシグナリング経由で交換します。

ステップ6 — 接続チェック。 ICE(Interactive Connectivity Establishment)が候補の 組み合わせを試し、使えるもののうち最適なものを選びます。両方のデバイスが同じWi-Fiにあれば、ローカルの経路が 選ばれます。ルーターが許せば、インターネット上の直接経路(「ホールパンチング」)が選ばれます。直接の経路が どれも使えなければ、リレー経由の経路が使われます。

ステップ7 — DTLS。 データが流れる前に、ブラウザ同士はDTLSハンドシェイク (UDP向けに調整されたTLS)を行い、証明書のフィンガープリントがオファーとアンサーに含まれるものと一致するかを 確認します。これ以降、すべてが暗号化されます。

ステップ8 — データチャネル。 DTLSの上ではSCTPが動き、データチャネルに確実で順序どおりの配信を 提供します。StrongFolderでは、受信者のブラウザがファイルを要求し、送信者のブラウザがディスクからファイルを 少しずつ読み込んで送り、受信者は届いた断片を順にディスクに書き込みます。そのため、非常に大きなファイルでも メモリに収める必要はありません。

STUN、TURN、ICEなどの用語はどういう意味ですか?

用語役割ファイルのデータが見えるか標準
シグナリングブラウザ間でオファー、アンサー、候補を受け渡す見えない標準化されていない(アプリごと)
NAT1つのパブリックIPを多数のデバイスで共有するルーターの機能——
STUNブラウザに自分のパブリックアドレスとポートを伝える見えないIETF RFC 8489
ICE候補を集めて使える経路を選ぶ見えないIETF RFC 8445
TURN直接の経路が使えないときに通信を中継する暗号化されたパケットのみIETF RFC 8656
DTLS接続を暗号化する(UDP向けのTLS)暗号化するIETF RFC 9147(1.3)、RFC 6347(1.2)
SCTPデータチャネル断片を確実に順序どおり届ける運ぶ(暗号化された状態で)IETF RFC 8831

これらはすべて用語集で簡単に説明しています。

TURNリレーはいつ使われ、何が見えるのですか?

リレーはあくまで代替手段であり、標準ではありません。ICEがリレーを使うのは、直接の候補の組み合わせが どれもつながらない場合だけです。典型的には、シンメトリックNATのネットワーク(一部の携帯キャリア)、 外向きのUDPをブロックする企業のファイアウォール、特定のVPNなどです。

直接接続できない場合(厳しい企業ファイアウォールや一部のモバイル回線など)、暗号化された ストリームはStrongFolderのリレー(TURN)サーバーを経由します。リレーはデータを中継する だけで、保存はしません。

リレーはDTLSで暗号化されたパケットを受け取り、そのまま転送します。リレーにわかるのは、通信が流れていること、 その量とタイミングであり、中身ではありません。リレー経由の転送は、すべてのバイトがリレーを余分に往復する ため、直接の転送より遅くなることがあります。転送が異常に遅い場合は、別のネットワークを試してください。 オフィスのネットワークでは直接つながらなくても、スマートフォンのテザリングや自宅のWi-Fiなら直接つながる ことがよくあります。

今すぐファイルを送る

無料 · ブラウザで · 登録不要

WebRTCの暗号化はどのくらい安全ですか?

WebRTCでは暗号化が必須で、暗号化されていないデータチャネルを開く方法はありません。DTLSは2つのブラウザが 取り決めた最新の暗号方式を使い、接続ごとに新しい鍵が作られます。

ただし、すべてのWebRTCサービスに当てはまる注意点が1つあり、正直にお伝えします。2つのブラウザは、 シグナリングサーバーを通じて交換された証明書のフィンガープリントで互いを確認します。つまり、サービスの シグナリングがそれを改ざんしないことを信頼していることになります。だからこそStrongFolderは、自社の保護を 転送中の暗号化と説明しており、あなたが鍵を持つエンドツーエンド暗号化とも、「ゼロ知識」とも呼んで いません。「安全」の意味をより広く知りたい方は、安全なファイル共有と セキュリティとプライバシーをお読みください。

なぜ送信者のブラウザを開いたままにする必要があるのですか?

送信者のブラウザこそがファイルの送り元だからです。代わりに頼れるサーバー上のコピーはありません。データ チャネルが送信者のディスクから断片を読み込めるのは、タブが開いていてデバイスが起動している間だけです。 受信者のダウンロードが終わるまで、送信者のブラウザタブを開いたままオンラインにしておく必要があります。ファイルはサーバーではなく送信者のデバイスから届くためです。 これにどう備えるかは 送信者がオンラインでいる理由で解説しています。

WebRTCファイル転送の速度はどのくらいですか?

決まった速度はありません。上限は経路上で最も遅い区間、多くの場合は送信者の上り速度で決まります。目安として、 1 GBは50 Mbpsで約2.7分、100 Mbpsで約80秒、高速なローカルネットワークなら1分を大きく下回ります。実際の転送は、 プロトコルのオーバーヘッド、ディスクの速度、そしてリレーを使う場合は余分な経由によって、これらの数値より やや遅くなります。1つのリンクを複数の受信者が開けます。各受信者は送信者から直接ダウンロードします。 同時に複数のダウンロードがあると、送信者の上り帯域を分け合います。

まとめ

WebRTCファイル転送は、短い交渉と、その後に続く長い暗号化されたストリームでできています。シグナリングが ブラウザ同士を引き合わせ、STUNとICEがNATを越える経路を探し、最後の手段としてTURNが中継し、DTLSで暗号化 されたデータチャネルがファイルをディスクからディスクへ運びます。送信者として実際に何を意味するのかを知るには、 まずブラウザでのP2Pファイル転送と StrongFolderの仕組みをお読みください。

よくある質問

WebRTCのデータチャネルとは何ですか?

データチャネルは、音声や映像ではなく任意のバイト列を2つのブラウザ間で運ぶWebRTCの機能です。UDPの上のDTLSの上でSCTPが動くため、暗号化されており、確実で順序どおりの配信に設定できます。これはファイル転送に必要な性質です。

STUNとTURNの違いは?

STUNサーバーは、ブラウザに自分のパブリックアドレスがどう見えるかを伝えるだけで、2つのブラウザはそれをもとに直接接続を試みます。ファイルのデータはSTUNを通りません。TURNサーバーはリレーで、直接の経路が使えないときに暗号化されたストリームがここを通ります。StrongFolderは独自のTURNリレーを運用しており、データを中継するだけで保存しません。

シグナリングサーバーは私のファイルを見ますか?

いいえ。シグナリングサーバーがブラウザ間で受け渡すのは、接続のためのメッセージ(セッション記述とネットワークの候補)だけです。ファイルのデータは、直接またはTURNリレー経由でデータチャネルを流れます。

WebRTCファイル転送は暗号化されていますか?

WebRTCはすべてのデータチャネルをDTLSで暗号化するため、どの接続でもファイルのストリームは転送中に暗号化されます。 WebRTCでは暗号化されていないデータチャネルは使えません。鍵は2つのブラウザが取り決め、そのフィンガープリントはシグナリングを通じて送られます。そのため、これはあなたが鍵を管理するエンドツーエンド暗号化ではなく、転送中の暗号化です。

WebRTC転送が失敗したり遅かったりするのはなぜ?

多くの場合、ネットワーク経路が原因です。厳しいファイアウォールやVPNが直接のUDP通信をブロックするため、接続がTCP経由のTURNリレーに切り替わるか、まったく接続できなくなります。別のネットワーク(スマートフォンのテザリングなど)を試すか、VPNをオフにするか、IT部門にWebRTCの許可を依頼してください。

TURNリレーは私のファイルを読めますか?

リレーは、2つのブラウザ間でDTLS暗号化されたパケットを中継します。リレーに見えるのは暗号化された通信、サイズ、タイミングであり、ファイルの中身ではありません。また、StrongFolderのリレーは中継したデータを保存しません。

次のファイルもフォルダも、直接送りましょう

アップロード不要、当サービスによるサイズ制限なし、アカウント不要。ファイルまたはフォルダごと選んでリンクをコピーするだけで、受信者はあなたのデバイスから直接ダウンロードできます。

ファイルを送るChromeに追加