vol66. Ethernet AVB とmulticast通信

Ethernet AVBとmulticast

Ethernet AVB に関する仕事をしている。

Ethernet AVB では以下のようなプロトコルがあるけど、 これらのプロトコルは皆multicast通信を利用する。

  • AVTP
  • gPTP
  • SRP
  • AVDECC

あれ?でも、どうやってmulticast通信をするんだ?
 
broadcast 通信では、Ethernet Switch は受け取ったメッセージを問答無用全てのポート に送ればよい。でも、multicast通信の場合は、Ethernet Switchは受信したメッセージを どのポートにおくればいいの?
すべてのポートに送るのならば、broadcast 通信と変わらないよね。。。
また、Routerの場合はどうなるの?

そんなギモンをもったので、調べてみた。
 
ネットワークのプロトコルは千差万別でとても複雑なので、以下の2種類に大別して考えていく。

  1. IP層におけるmulticast
  2. Ethernet AVBにおけるmulticast

   
基本的な考え方としては、どちらも、multicastメッセージを送る前に、 あらかじめmulticastメッセージが送信される経路を作ることをする。
そして、そのためのプロトコルが存在する。
 
まずは、IP通信におけるmulticastをみてみよう。

IP通信におけるmulticast

IP通信におけるmulticastグループへの加入を通知するためのプロトコルは2種類ある。

https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/IGMP_basic_architecture.png/600px-IGMP_basic_architecture.png

一つは、エンドポイント(PC)からルーターまでの間で使用されるプロトコル
もう一つは、ルーター間で使用されるプロトコルだ。

エンドポイントからルーターまでのプロトコル

ホスト(Receiver)がルーター(ラストホップルーター)に対して、マルチキャストグループへの参加、維持、離脱を通知するためのプロトコル
IPv4向けのIGMPとIPv6向けのMLDがある。

  • IGMP

    • Internet Group Management Protocol
    • IPv4
  • MLD

    • Multicast Listener Discovery
    • IPv6
    • ICMPv6上に実装

ルーター間のプロトコル

multicastルーティングプロトコルと呼ばれる。 現在は、PIM-SMが広く使われている。

  • DVMRP (Distance Vector Multicast Routing Protocol)
  • MOSPF (Multicast Open Shortest Path First)
  • PIM (Protocol Independent Multicast)
    • PIM-SMモード(Sparse Mode)
    • PIM-DMモード(Dense Mode)
    • PIM-SSM

流れ

multicast通信を行う前に、この2種類のプロトコルを駆使して、multicastのディストリビューションツリーを構築する。
その後、multicastメッセージを送信すると、構築したツリーにしたがって、 multicastグループに参加したデバイスに、メッセージが送信されるという仕組みだ。

IP通信におけるルーターEthernet Switch

ここで、ルーター(L3 switch)とEthernet Switch(L2 switch) でのMulticast メッセージに対する挙動を整理しておく。

  • Ethernet Switchはデフォルトですべてのポートにおくる

    • ただし、Ethernet SwitchがIGMP spoofing をサポートしていれば、multicast group に属している ポートにのみ送る
      • IGMP spoofing を用いると、Ethernet Swicth はEndpoint とルーター間との IGMPのやりとりをのぞき見して、どこのポートにmulticast 通信のクライアントがいるかを把握できる
  • ルーターはデフォルトでどこのポートにもおくらない

Ethernet AVBにおけるmulticast

さて通常のTCPUDPでのmulticastはIP通信なので上述の通りだ。
だが、Ethernet AVB はIP通信を使わないプロトコルだ。
なので、先に述べたIGMPやMLDといったプロトコルはつかえない。
 
ではどうやってmulticast通信するのか?
 
Senderはどうやって、multicast用のMACアドレスを取得し、 Receiverはどうやって、multicastのドメインに参加すればいいのか?
 
答えは、それぞれのメッセージによって異なる。  

AVTP

AVTPはAudioやVideo、またはControl message を運ぶためのtransport protocol。
AVTPメッセージのディストリビューションツリーの構築は、SRPプロトコルを使って行う。 具体的にはMSRPプロトコルを使う。MSRPを使って、AVB talker からAVB listenerまでのAVTPメッセージが 流れる経路を構築する。

Talker から Listener までの経路の構築

 
https://upload.wikimedia.org/wikipedia/en/thumb/0/08/Listener-Ready-b.pdf/page1-600px-Listener-Ready-b.pdf.jpg
 

大きくわけると3ステップに分かれる。

  1. MSRP Domain message でSRP Domain を形成
    • Class A, Class B のDomain
      • 使用するVID, Priority Value の値
  2. MSRP talker advertise
  3. MSRP Listener ready

 
まずは、MSRP Domain メッセージでSRP Domain を構築する。 これにより、Class AのDomain、Class BのDomain が定義される。 それぞれのClassのDomain では、どのVIDとPCPの値を使うかが決定される。
 
次に, MSRP Talker Advertise メッセージをつかって、Talker は持っているStream の情報 (Stream IDや必要bandwidthに関する情報)をSRP Domain のSwitchやEndpointに通知する。
 
最後に、Talker からAdvertise されたStreamを受け取りたいListener は、 MSRP Listener ready メッセージをつかって、Talker に対して、MSRP Listener ready メッセージを送る。
 
この一連の流れによって、AVB talker からのAVTPのmulticast通信を受け取るAVB listener までの経路が確定する。

 
(注意) - AVTPは、VLANも利用するので、MVRPプロトコルを使用して、VLANのドメインも構築しておく必要もある - Class A 用のVLAN ドメイン、Class B用のVLANドメインが必要

Destination Address
  • AVTPの destination address は、MAAP(MAC Address Acquisition Protocol)でallocation されたmulticastアドレスを使用する。 MAAP はIEEE1722で定義されている。 Dynamicで動的に決定する方法と、Staticにあらかじめ用意されているアドレスを使用する方法がある。

    • Dynamic
      • multicastアドレスの取得には、MAAPを使う。
        下図の、MAAP Dynamic Allocation Pool の範囲のアドレスが割り当てられる。
    • Static
      • MAAPで予約されたmulticastアドレスを使用する。
        下図の、MAAP Locally administrated Pool の範囲のアドレスを使用できる。

f:id:john-rama01:20200917052056p:plain
IEEE1722-2011 MAAP Multicast Addresses より

gPTP

gPTPは時間同期のプロトコル
john-rama01.hatenablog.com

Destination Address に01:80:C2:00:00:0Eを用いる。

この"01:80:C2:00:00:0E"はIEEE802.1Qで"Individual LAN Scope group address, Nearest Bridge group address"として規定されている。 つまり隣接したBridgeとの通信用のアドレスだ。
 
このアドレスを用いた場合、Multicast通信用のMAC addressを用いているにもかかわらず、 Ethernet switchはこのメッセージを他のポートに転送するようなことはしない。
 
("AVB Software Interfaces and Endpoint Architecture Guidelines"より) https://avnu.org/wp-content/uploads/2014/05/AVnu_SWAPIs_v1.0.pdf

When using gPTP, the packets are sent to a gPTP reserved destination multicast MAC address 01:80:C2:00:00:0E using a Layer-2 (L2) encapsulation with the gPTP allocated Ethertype 88F7. Although this defined MAC address is a multicast address, the address falls within a bridge management reserved range and is not forwarded to other ports.

 
ちなみにLLDP(Link Layer Discovery Protocol)も同じMulticast Address "01:80:C2:00:00:0E"を使用する。 LLDPは隣接するEthernet Switchやデバイスに対して、自分の機器情報を アドバタイズするために使用するプロトコルだ。

MSRP

MSRPは、帯域予約のためのプロトコル
このMSRPプロトコルによって予約された帯域は、FQTSSによってShaping されることによって帯域を制限する。

Destination Address に01:80:C2:00:00:0Eを用いる。 (MSRPがこのaddressを用いることは、正確には802.1Qには規定されていない。)

これは、gPTP同様、Eternet Switch でメッセージが他のポートに無条件にforward されないようにするため。

MSRPのpropagation ruleは、以下のドキュメントの"2.6. Propagation Rules "が参考になる。
https://avnu.org/wp-content/uploads/2014/05/AVnu_Stream-Reservation-Protocol-v1.pdf

MVRP

MVRPはVLAN domain を動的に形成するのに使うプロトコル。      Destination Address に01:80:C2:00:00:21を用いる。

ちなみに、01:80:C2:00:00:20 - 01:80:C2:00:00:2F は、IEEE802.1Qにて、MRPアプリケーション用に予約されている。

f:id:john-rama01:20200922060224p:plain
IEEE802.1Q MRP application Address より

AVDECC

IEEE1722.1(AVDECC)は - デバイスの検出(ADP) - ストリームの接続管理(ACMP) - デバイスのパラメータ取得や制御(AECP) のプロトコルから成る。

IEEE1722.1にて、ADPやACMPで使うMulticast MAC Address は91:E0:F0:01:00:00が予約されている。

f:id:john-rama01:20200923035145p:plain
IEEE1722.1より

Ethernet Switchの基本動作はmulticast メッセージを受け取ると、broadcastするため、 このMAC Address を受け取ったEthernet Switch は全ポートにメッセージを送る(と思う。。。)

まとめ

今回は、multicast 通信についてまとめてみた。

ポイントは、

  • IP通信の場合は、IGMP/PIMといったプロトコルディストリビューションツリーを構築する。
  • AVBの場合は、
    1. AVTPメッセージは
      • SRPでツリーを構築
      • MMRPで定義されたmulticast アドレスを使う
  • gptp/MSRP
    • 他のportに転送されない、IEEEで規定されている特別なmulticast アドレスを使う
    • MSRPのpropagation rule は特殊
  • MVRP, AVDECC(ADP, ACMP等)
    • IEEEで規定されているmulticast アドレスを使う
      といったところだ。

P.S blogの記事は、あくまで、自分が調べたものを纏めたものなので、間違いがあるかもしれません。 何かおかしなところや不明瞭なところがあれば、ぜひ教えて頂ください!!