ケーブルTV局で理解するマルチキャスト
3つの通信方式を「テレビの見方」で比較してみましょう
マルチキャスト = ケーブルTVの契約チャンネル配信
ケーブルTV局は番組を1回だけ送出し、契約している家庭だけが視聴できます。未契約の家庭には届きません。AWSマルチキャストもまったく同じ仕組みで、登録されたグループメンバーだけにデータを効率的に同時配信します。
電話(1対1通話)
Aさん → Bさん
1人の相手に専用回線で話す方式。確実だが、100人に同じ話をするには100回電話する必要がある。
街頭スピーカー(1対全員)
Aさん → 全員
街中に放送を流す方式。全員に届くが、興味がない人にも強制的に聞こえてしまう。帯域の無駄遣い。
ケーブルTV(1対登録者)
Aさん → 契約者グループ
番組は1回だけ送出し、契約チャンネルの視聴者だけが受信。効率的かつ無駄がない。
| ケーブルTV局のたとえ | AWS マルチキャスト | 役割 | |
|---|---|---|---|
| ケーブルTV局(中継局) | Transit Gateway | マルチキャストルーターとして配信を中継 | |
| 放送エリア(配信区域) | マルチキャストドメイン | どのサブネットに配信するかの範囲を定義 | |
| チャンネル(スポーツ、映画など) | マルチキャストグループ(IPアドレス) | 受信したいデータの種類を区別 | |
| 番組制作会社 | マルチキャスト送信元(Source ENI) | データを送出するEC2インスタンス | |
| 契約している家庭の視聴者 | グループメンバー(Member ENI) | データを受信するEC2インスタンス | |
| チャンネル契約・解約の手続き | IGMP JOIN / LEAVE | グループへの参加・離脱を動的に管理 | |
| 「まだ視聴していますか?」の確認はがき | IGMP Query(2分ごと) | TGWがメンバーシップを定期的に確認 |
アーキテクチャ全体像
Transit Gatewayがマルチキャストルーターとして機能する仕組み
📡 マルチキャストドメイン
ケーブルTVの「配信エリア」にあたります。どのサブネットがマルチキャスト配信に参加するかを定義するコンテナです。
- 1つのサブネットは1つのドメインにのみ所属可能
- 1つのTGWに複数ドメインを作成可能
- IGMPサポートの有効/無効をドメインごとに設定
- マルチキャスト有効の新しいTGWが必要
📺 マルチキャストグループ
ケーブルTVの「チャンネル」にあたります。マルチキャストグループIPアドレス(239.x.x.x等)で識別される送受信のまとまりです。
- グループIPアドレスで識別(例: 239.1.1.1)
- メンバーシップはENI単位で定義
- Source(送信元)とMember(受信者)で構成
- UDPプロトコルを使用(コネクションレス)
IGMP = チャンネル契約の仕組み
ホストがグループに参加・離脱するプロトコルの動作フロー
JOIN: チャンネル契約
EC2ホストがマルチキャストグループに参加したいとき、IGMP JOINメッセージを送信します。TV局でいえば「スポーツチャンネルを契約します!」と申し込むイメージです。通常2〜3回のリトライが自動で行われます。
QUERY: 視聴確認はがき
Transit Gatewayは2分ごとにIGMP QUERYを全メンバーに送信し、「まだ視聴していますか?」と確認します。送信元IP 0.0.0.0、送信先IP 224.0.0.1、プロトコル番号2で送信されます。
応答: まだ見てます!
メンバーはQUERYに対してJOINメッセージで応答し、メンバーシップを更新します。3回連続で応答がないとメンバーシップが自動削除されますが、完全削除まで12時間は猶予があります。
LEAVE: チャンネル解約
ホストがグループを離脱する場合、IGMP LEAVEメッセージを送信します。「チャンネル解約します」と明示的に通知することで、即座にマルチキャスト配信が停止されます。
⚠️ IGMPv2 強制設定が必要
- EC2インスタンスはデフォルトでIGMPv3が有効ですが、Transit GatewayはIGMPv2のみサポートします
- IGMPv2を強制するコマンド:
sudo sysctl net.ipv4.conf.eth0.force_igmp_version=2 - 永続化する場合は
/etc/sysctl.confに追記が必要です - 全JOINメッセージが失われた場合、ホストはグループに参加できません。アプリ側で再トリガーが必要です。
2つのモード: 静的 vs IGMP
ケーブルTVの「手動チャンネル割当」と「視聴者が自分で契約」の違い
📋 静的(Static)モード
TV局が手動でチャンネル契約を管理するイメージ
🔄 IGMP(動的)モード
視聴者が自分でチャンネルを契約・解約するイメージ
📝 試験対策ポイント(ANS-C01)
- 「IGMPを使用した動的グループ管理」が問われたら → IGMPv2のみサポートという制約を思い出す
- 「IPv6マルチキャスト」が問われたら → 静的モードのみ対応
- 「アプリケーション変更不要でマルチキャスト」→ IGMPモードを選択
- 「マルチキャストのフラグメンテーション」→ TGWはフラグメント化されたパケットをドロップする
- 「Direct Connect / VPN でマルチキャスト」→ 非サポート(VPCアタッチメントのみ)
必要なネットワーク設定
IGMPトラフィックとマルチキャストUDPの許可ルール
ネットワークACL: インバウンドルール(最小構成)
| タイプ | プロトコル | 送信元 | 説明 |
|---|---|---|---|
| カスタムプロトコル | IGMP (2) |
0.0.0.0/32 |
TGWからのIGMP Query を許可 |
| カスタムUDP | UDP |
送信元ホストIP | 受信マルチキャストトラフィックを許可 |
ネットワークACL: アウトバウンドルール(最小構成)
| タイプ | プロトコル | 送信先 | 説明 |
|---|---|---|---|
| カスタムプロトコル | IGMP (2) |
224.0.0.2/32 |
IGMP LEAVE メッセージ |
| カスタムプロトコル | IGMP (2) |
マルチキャストグループIP | IGMP JOIN メッセージ |
| カスタムUDP | UDP |
マルチキャストグループIP | 送信マルチキャストトラフィック |
💡 セキュリティグループの注意点
マルチキャストの送信元と送信先が同じVPC内にある場合でも、セキュリティグループ参照(ソースSGの指定)は使用できません。IPアドレスベースのルールで許可を設定する必要があります。また、Nitro以外のインスタンスを使用する場合は「送信元/送信先チェック」を無効にしてください。
設定手順とコード例
AWS CLIとCloudFormationでのマルチキャスト設定
# 1. マルチキャスト有効のTransit Gatewayを作成 aws ec2 create-transit-gateway \ --description "Multicast TGW" \ --options "MulticastSupport=enable" # 2. マルチキャストドメインを作成(IGMPサポート有効) aws ec2 create-transit-gateway-multicast-domain \ --transit-gateway-id tgw-0123456789abcdef0 \ --options "Igmpv2Support=enable,StaticSourcesSupport=disable" # 3. サブネットをマルチキャストドメインに関連付け aws ec2 associate-transit-gateway-multicast-domain \ --transit-gateway-multicast-domain-id tgw-mcast-domain-xxxxx \ --transit-gateway-attachment-id tgw-attach-xxxxx \ --subnet-ids subnet-xxxxx # 4. (静的モードの場合)送信元を登録 aws ec2 register-transit-gateway-multicast-group-sources \ --transit-gateway-multicast-domain-id tgw-mcast-domain-xxxxx \ --group-ip-address "239.1.1.1" \ --network-interface-ids eni-source-xxxxx # 5. (静的モードの場合)メンバーを登録 aws ec2 register-transit-gateway-multicast-group-members \ --transit-gateway-multicast-domain-id tgw-mcast-domain-xxxxx \ --group-ip-address "239.1.1.1" \ --network-interface-ids eni-member-xxxxx
# CloudFormation テンプレート(YAML) AWSTemplateFormatVersion: '2010-09-09' Description: 'Transit Gateway Multicast Setup' Resources: MulticastTGW: Type: AWS::EC2::TransitGateway Properties: Description: "Multicast-enabled TGW" MulticastSupport: enable MulticastDomain: Type: AWS::EC2::TransitGatewayMulticastDomain Properties: TransitGatewayId: !Ref MulticastTGW Options: Igmpv2Support: enable StaticSourcesSupport: disable DomainAssociation: Type: AWS::EC2::TransitGatewayMulticastDomainAssociation Properties: TransitGatewayMulticastDomainId: !Ref MulticastDomain TransitGatewayAttachmentId: !Ref TGWAttachment SubnetId: !Ref PrivateSubnet
# EC2インスタンスでのIGMPv2強制設定 # 1. 現在のIGMPバージョンを確認 cat /proc/sys/net/ipv4/conf/eth0/force_igmp_version # → 0(デフォルト: IGMPv3) # 2. IGMPv2を強制 sudo sysctl net.ipv4.conf.eth0.force_igmp_version=2 # 3. 永続化(再起動後も有効にする場合) echo "net.ipv4.conf.eth0.force_igmp_version=2" | \ sudo tee -a /etc/sysctl.conf # 4. 設定確認 sudo sysctl net.ipv4.conf.eth0.force_igmp_version # → 2 # 5. マルチキャストグループに参加(テスト用) # socat を使用した例 socat UDP4-RECVFROM:5001,ip-add-membership=239.1.1.1:eth0,reuseaddr - # 6. マルチキャスト送信テスト(送信元から) echo "Hello Multicast" | socat - UDP4-DATAGRAM:239.1.1.1:5001
主なユースケース
マルチキャストが活躍する代表的なシナリオ
金融データの同時配信
株価、為替レートなどのリアルタイム市場データを、複数のトレーディングシステムへ同時に配信。ユニキャストでは帯域がN倍必要だが、マルチキャストなら1ストリームで済む。
ストリーミングメディア配信
社内向けライブ動画配信やビデオ会議のマルチキャスト配信。帯域を大幅に節約しながら、大人数への同時配信を実現する。
分散システムの状態同期
クラスタ間での設定変更の一斉通知、キャッシュの無効化通知、サービスディスカバリーなど。全ノードに同時に情報を到達させる。
ソフトウェア更新の一斉配布
数百台のEC2インスタンスへのパッチ配布やファームウェア更新。マルチキャストならネットワーク負荷を最小限に抑えつつ全台に同時配信可能。
⚠️ 不向きなケース
- 高頻度取引(HFT): Transit Gatewayマルチキャストはレイテンシに敏感な用途には不向き。パフォーマンス要件は事前にAWSチームと確認してください。
- Direct Connect / VPN経由: オンプレミスからのマルチキャストはサポートされていません。VPCアタッチメントのみ対応。
- Transit Gateway Connect: Connectアタッチメント経由のマルチキャストルーティングは非サポート。
IGMP対応マルチキャストの利点
動的グループ管理がもたらすメリット
動的なグループ管理
ホストが自律的にJOIN/LEAVEするため、管理者の手動操作が不要。スケールアウト時にも自動でメンバー追加される。
アプリケーション変更不要
既存のマルチキャスト対応アプリケーションをそのままAWSに移行可能。標準的なIGMPv2プロトコルに準拠。
リアルタイムの追跡
TGWが2分ごとにメンバーシップを確認し、離脱したホストを自動検出。常に最新のメンバーリストを維持する。
帯域幅の効率化
1つのストリームを複数メンバーに同時配信するため、ユニキャストのN倍通信と比較して大幅な帯域節約を実現。
よくある質問(FAQ)
sudo sysctl net.ipv4.conf.eth0.force_igmp_version=2 で明示的にv2を強制する必要があります。
まとめ
📡 マルチキャスト
1つのストリームを登録済みメンバーに同時配信。UDPベースのコネクションレス通信で帯域を効率化。
🔀 Transit Gateway
VPC間のマルチキャストルーター。マルチキャストドメインでサブネットを束ね、グループIPで配信先を制御。
📋 IGMP
JOIN/LEAVE/QUERYで動的にグループメンバーシップを管理。IGMPv2のみサポート。2分ごとのQuery確認。