こんな夜中にOpenFlowでネットワークをプログラミング!

第12回 【Trema編】動画放送局をIPマルチキャストで作ってみよう!

この記事を読むのに必要な時間:およそ 2 分

はじめに

グー⁠ーッモーニング,ベトナー⁠ーー⁠ーーム!

『グッドモーニング,ベトナム』⁠バリー・レヴィンソン)

今回はOpenFlowでミニ放送局気分を味わってみましょう! 動画を配信するしくみの1つにマルチキャストがあります。これはNTT東/西の「ひかりTV」などで実際に使われているしくみで,動画などのデータを多くの視聴者に対して効率的に配信できるという特徴があります。このマルチキャストを使った動画配信をTremaで実現してみます。

観たい人にだけ届けるマルチキャスト

マルチキャストを使った動画配信の動作を簡単に説明しておきましょう図1)⁠動画ストリーミングサーバが配信を始めると,マルチキャストネットワークが視聴者全員にパケットをコピーして転送します。ここでもし,動画を観ない人も含めた全員に動画を届けてしまうと,ネットワークの負荷が非常に大きくなってしまいます。そこでマルチキャストでは,動画を観る視聴者にだけパケットを配信します。

図1 マルチキャストネットワーク

図1 マルチキャストネットワーク

マルチキャストを実現するには,今まで扱ってきたレイヤ2注1よりも上位のレイヤの情報を使う必要があります。たとえば,テレビのチャンネルに相当するグループアドレスはIPヘッダ(レイヤ3)の中に含まれています。それぞれの視聴者に,観たいチャンネルの動画を届けるためには,このグループアドレスに基づいてパケット転送を行う必要があります。

このように,マルチキャストでは扱うレイヤが増えるため,これまで本連載で紹介してきた内容よりも少し踏み込んだOpenFlowプログラミングが必要となります。もちろん,Tremaでは各レイヤの情報をとても簡単に扱うことができます。

それでは,マルチキャストの詳しいしくみから順に見ていきましょう。

注1)
職場や家庭のLANで使われるスイッチングハブなどがレイヤ2の装置です。レイヤ2では,MACアドレスを基にパケットの転送が行われます。

マルチキャストの動作

マルチキャスト転送を実現するために,OpenFlowスイッチはどのように動作すればよいでしょうか?

説明を簡単にするため,スイッチ1台の構成を考えましょう図2)。ストリーミングサーバが動画パケットをスイッチに送ると,スイッチは受け取ったパケットをコピーして,受信ホストがつながっているすべてのポートに出力します。

図2 スイッチ1台のマルチキャスト

図2 スイッチ1台のマルチキャスト

では,受信ホストの存在をスイッチはどのようにして知るのでしょうか? 受信ホストは,受信開始時にIGMP(Internet Group Management Protocol)パケットを出して「どの動画を観たいか」をスイッチに伝えます。スイッチは,このIGMPパケットを受け取ったポートに対してのみパケットを送信します。

ポイントは,IGMPを送ったホストの管理方法と,IGMPを送ったホストにだけパケットを届けるしくみです。では,OpenFlowでの実現方法を見ていきましょう。

OpenFlowでのマルチキャスト

ここでも説明を簡単にするため,スイッチ1台の小さなネットワークに,動画を送信するストリーミングサーバ1台と受信するホスト3台を接続した場合を考えます。

視聴者にだけパケットを送る

まずは,視聴者にだけパケットを送るしくみです図3)⁠マルチキャストでは,送信者であるストリーミングサーバはパケットの宛先フィールドにグループアドレス(たとえば239.192.0.1)を含めます。これは「どの視聴者グループに動画を届けるか」を示すグループ名の一種と考えてください。

図3 視聴者にだけパケットを送る

図3 視聴者にだけパケットを送る

コントローラは,packet_inで送られてきたパケットのグループアドレスを参照し,そのグループに参加しているホスト(視聴者)を調べます。そして,視聴者が接続しているポートにパケットを出力するフローをflow_modメッセージでスイッチに書き込みます。これで,以降のパケットは視聴者にだけ転送されます。

グループへの参加と脱退

ホストがグループに参加/脱退するためにはIGMPパケットを使います。ホストがIGMPパケットを送ると,これがpacket_inとしてコントローラに上がります。コントローラは,これがグループへの参加(MEMBERSHIP_REPORT)であるか脱退(LEAVE_GROUP)であるかを判別し,内部的に持っているグループ情報を更新します。このグループ情報は,定期的にフローを更新する際に使います図4)⁠

図4 グループへの参加

図4 グループへの参加

著者プロフィール

高宮安仁(たかみややすひと)

Trema開発チーム自称リーダー。東京の大学で計算科学を学び,並列プログラミング用ライブラリや,大規模クラスタ管理ツールの開発,とくに東工大のスパコンTSUBAME,分散クラスタInTriggerの管理基盤などなど主に分散・大規模システムのミドルウェア開発者・研究者として活動。現在は企業の研究者として,OpenFlow用プログラミングフレームワークTremaのメイン開発者。モットーは何がなんでも定時に帰ること。コンピューターはもちろん映画や音楽も好きで,スクラッチDJとしても活動しています。DJの仕事ください。


鈴木一哉(すずきかずや)

Trema開発チームのメンバー。Ascend,古河電工,ヤマハ等のネットワーク機器を扱うエンジニアを経て,現在は経路制御の研究に従事。ホエールズ時代からのベイスターズファンで,98年の優勝時にはもちろん横浜スタジアムへ駆けつけました。野球のない時期には,もっぱらSFを読んでいます。会社ではランニングサークルに入っており,先日も多摩川の駅伝に参加しましたが,練習不足で全然走れませんでした。ちゃんと練習して,来年こそはしっかり走るぞ!

コメント

コメントの記入