ブラウザでIPマルチキャストを受信するMulticastReceiver API

2021最新動向について別記事を書きました
asnokaze.hatenablog.com


目次

WICGやIETFにおいて、ブラウザでIPマルチキャストのパケットを受信できるようにする「MulticastReceiver API」(Multicast Receive API) の議論があるようです。

Akamaiの人らによって提案が行われています。その中で「人気コンテンツの大規模配信に対応していく」ことがモチベーションとしてあげられています。

この提案では、いかの事をゴールとしています

  • 1対多のマルチキャストをsubscribeする方法を提供する (送信はスコープ外)
  • 多くのユースケースで使用できるAPIを提供する。
  • トラフィック(パケット)を暗号的に認証する (改変されてないことがわかるようにする)
  • ネットワークの安全性を確保する。大量のトラフィックからネットワークを守る

IPマルチキャスト

ユニキャスト通信では、同じデータがクライアントの数だけルータ上を通ることになります。
f:id:ASnoKaze:20191124200553p:plain

マルチキャストでは、ルータ上でコピーされ必要なクライアント(リスナー)に届けられます。
f:id:ASnoKaze:20191124200635p:plain

各リスナーはSource と Groupを指定してsubscribeします。

MulticastReceiver API

MulticastReceiver Explainer」に例があります。
JavaScriptからsource、group、portを指定してsubscribeします。メタデータを提供するdormsサーバ(後述)を指定します。うけとったパケットはprocessPacketsで処理を行えます。

var mrc = new MulticastReceiverConfig();
mrc.source = '198.51.100.10';
mrc.group = '232.10.10.1';
mrc.port = 5001;
mrc.dorms = 'dorms.example.com';

var mr = new MulticastReceiver(mrc);
// process any packets received
mr.onmessage = function(evt) { processPackets(evt.data); }

// monitor other events, but do nothing with them.
mr.onjoin = function(evt) { console.log('multicast receiver joined'); }
mr.onleave = function(evt) { console.log('multicast receiver left'); }
(略)

mr.join();

プロトコル

Multicast to the Browserを実現するためのプロトコルIETFのMulticast Backbone Deployment (mboned) WGで議論されています。mboned WGは、グローバルインターネット、ドメイン間でマルチキャストルーティングプロトコルと、そのデプロイ、運用について議論をしているWGになります。

現在、ブラウザへのIPマルチキャストに関して、AkamaiのJake Holland氏らによって下記の3つの文書が提案されています。 これら3つを組み合わせてブラウザへの配信を実現させます。

DORMSはsource-specific multicast (SSM)に関する拡張可能なメタデータをディスカバリ・取得する方法を定義します。
AMBIはブラウザが受信したデータの整合性を検証し、パケットロスを監視する方法を定義します。
CBACCはブラウザがネットワークキャパシティ上限を超えないようにする方法を定義します。

ブラウザがゲートキーパーになる場合は図のようになります (経路上の装置がゲートキーパーになる場合もある(資料参照))
f:id:ASnoKaze:20191124204622p:plain
(IETF106 Mbonedの資料より(URL))

雑感

資料ではマルチキャストQUICにも触れているが、上位プロトコルに関しては今の所具体的なところは書かれていない (実験できるようにするのが大事とのこと)。
asnokaze.hatenablog.com

IPマルチキャスト難しい。