Closed7

マルチキャストの基礎の基礎をRustで学ぶ

nissy-devnissy-dev

まずは、マルチキャストとは何かの解説から

IPでは4つのパケットの送信形式がある

  • ユニキャスト:1 to 1 のパケット送信 (TCP, UDP)
    • 1 to 1だからと言って、送信中のセキュリティを保証するものではない
    • TLSやDLTS (UDPのためのTLS) を使う必要はある
  • ブロードキャスト:多 to 多のパケット送信 (UDP)
    • ネットワーク内の最後のアドレスを使って送信するプロトコル
      • 例) 198.51.100/24 の場合 198.51.100.255
    • IPv4 でしか利用することができない
  • エニーキャスト:1 to 多 のパケット送信 (TCP*, UDP)
    • DNSなどの地理的にサーバーを分散させたい時などに利用する
    • TCPでも可能だが、技術的には非常に難しい
  • マルチキャスト:多 to 多のパケット送信 (UDP, *RTP)
    • ブロードキャストは、既存のあるサブネット内のすべてのホストに送信する
    • マルチキャストは、アドレスに紐づいた全ホストにパケットを受信する
  • RTP (real time protocol)
    • 主に音声や映像の配信のためにUDP上に実装された新しいプロトコル
    • WebRTCが主な使用例

マルチキャストの使い所としては、同じデータを多くの宛先に配信する必要がある場合とのこと。

nissy-devnissy-dev

コードの書き方が基本的に古いので、コードは Mutex や once_cell を使って書き直してみる

nissy-devnissy-dev

join_multicast_v4, set_multicast_if_v4 などの interface がしっくりきてなかったけど、multicast のグループに所属させる Network Interface (IPアドレス) のことか。要は、multicast でパケットを受け取りたいホストのIPアドレスを登録するイメージで理解した。

nissy-devnissy-dev

That output claims that for our test address FF02::123 we have three routes defined, so we should have a route. Please send me feedback if you see an obvious problem with my methods here, and have a solution. In any case, a workaround is to use ifconfig -v to get the index of the interface you want to use for IPv6. Then you can add this flag specific for multicast delivery:

IPv6 で使いたいインターフェイスを ifconfig -v で探してという話なんだけど、探し方がわからない

あー、 IPv6のアドレスを持っているインターフェイス (つまり IPv6 でインターネットに接続しているインターフェイス) の index を探せばいいのか。inet6inet の値がそれっぽい index を set_multicast_if_v6 に渡したらテストが通った

このスクラップは2022/03/25にクローズされました