P2P 動画ストリーミングシステムの再設計と実装
2009SE073 稲山 裕太 2009SE198 中野 祐輔
指導教員：後藤• IP ネットワークにおけるホップ数を減らし，ネットワークへのトラフィックを軽減する.

はじめに

1

邦夫

近年，YouTube や GyaO など動画を配信するストリー

1 つのノードに対する下流ノードはストリーマの設定にミング配信が広く普及しており，ユーザはいつでも動画をよって決定している．ストリーマはデータの配送を設定す見ることが可能となった．今までのストリーミング配信でる際，データ送信に必要なバンド幅を入力する必要がある．

はクライアントサーバ配信を利用するため，ユーザからのこの情報からその動画を中継するノードが一度に配送でき大量アクセスによる負担に耐えることができる大規模サーるノードの数 (以下，配送人数) を決定する．

バや広帯域回線が必要であり，多大なコストがかかる．そ問題点

こで現在では P2P 技術の発達により，誰でも配信者とな• ttl，IP ホップ数が考慮された処理が不完全であり，れる P2P ストリーミングが実現された．

ネットワークへのトラフィック増加への対処が成さ

P2P ストリーミングは，各ノードがストリームデータれていない.

を受信すると同時にデータを複製し，下流のノードにデータを受け渡す方法を用いる．そのためサーバの負担を減

2.2

旧システムにおけるノードの脱退処理らすことができ，ノードを減らすことができる．しかし，旧システムでは，システムの安定性のため，ノード脱退

P2P ストリーミングではストリームデータを受け渡してに対する処理をしている．脱退を希望するノードは脱退のいるノードが接続を中断した場合，その下流のノードはス要請をストリーマに行い，処理が開始される. 脱退を希望

トリームデータを受け取れなくなってしまう．また他ノーするノードの種類別で以下の処理を実行される.

ドへの再接続までに時間が必要であり，その間ストリーミ

1. ストリーマまたは視聴ノードの場合ングが停止してしまう問題がある [2][3].

システム全体にストリーマが離脱し番組を中止する

本研究は，過去の卒論 (発行 2011 年)[2] の引き継ぎであことを伝える. システム内の番組表から番組を削除

り，システムの改良を目的とする．[2] では，ノードが離し，その番組を視聴していたノードの視聴状態を中脱した際にノードの再接続し，ストリーミングを再開する

止する.

プログラムを実装し性能を評価したが，ノードの数が増え

2. ストリーミングを視聴， または中継していた場合た場合にエラーや動画像の質の劣化が生じる．そこで本研
究は，過去のプログラムを参考に問題点を解消した新しいストリーマは下位ノード（一番最後に加わったノールーティング方式を採用し，大多数ノードの時でもノードド）のアップストリーマ（送信元ノード）と配送先離脱処理をより効率よく行えるプログラムを再実装する.

ノード情報を変更し、脱退するノードの代わりとしそして，ネットワークエミュレータを用いて仮想ネットて機能させる.
問題点

ワークを模倣し，複数のノードで P2P プログラムを動作• ネットワーク障害などによるノードの予期せぬ脱退が起こった際の処理が考慮されていない.

し，改良後のシステムを評価する．また, 利便性を考慮するため, Qt4 を用いて GUI を作成し操作を行う. 稲山裕太
は主に P2P プログラムと実験環境の構築，中野祐輔は主に GUI 作成を担当した．

旧システムの概要

2

この節では，旧システムにおけるルーティング方式とノードの脱退処理について述べ，またそれぞれに対する問題点を挙げる．

2.1

旧システムのルーティング方式

旧システムのルーティング方式は以下 3 つの点を考慮して実装されている.

3

新システムの実現
新システムでは旧システムで挙げられた問題点の解消とさらなるシステムの利便性向上を目標とする.
提案するシステムでは，3 つのプログラムによって構成される.

• Streamer: UDP でストリームを発生するプログラム.
• P2Pnode: Streamer から送られてきたデータを制御し受け渡すプログラム.

• 1 つのノードに対する下流ノードの数を至言し，利用可能帯域を越えないようにする.

• Listner: P2Pnode から送られてきたデータを受け取るプログラム.

• ストリーミングデータの中継回数を減らし，データの品質の劣化を防ぐ.

Streamer，Listener は外部プログラムであり，動画や音声を直接送信・受信するプログラムである． P2Pnode はメインプログラムであり，これらのプログラムがそれぞれつながることで P2P ストリーミングが可能となる．

3.1

新システムのルーティング方式

新規参加ノードに対する処理では，旧システムでの手法に加え，ttl，IP ホップ数を考慮した処理を実現させた. また，後述するノードの脱退処理を迅速に行うべく，新規参加ノードに対する処理が完了後，各ノードの持つ隣接ノード情報を増やす処理を追加した. 旧システムでの手法を図1 に示す.

図 2 新規参加ノードのルーティングモデル

3. ノード A は受信したノード C の情報を自らの隣接ノード情報として登録し，ノード C に自分の情報を送信する．

4. ノード C は受信したノード A の情報を自らの隣接ノード情報として登録する.
3.2

新システムにおけるノードの脱退処理

新システムでは，動画視聴ノード数が多数の場合を考えたノード脱退処理システムを提案する. また，旧システムでの脱退処理に加え，ネットワーク障害などによる意図し図 1 新規参加ノードのルーティングモデルないノードの脱退が発生した場合の処理を実現させる.
処理方法は，2 つの手法を用意しそれぞれ『末端ノード引き継ぎ法』と『直下ノード引き継ぎ法』とする. ノード

1. 新規ノードは視聴したい動画を配信しているストリーマに視聴要請を送信する．

より脱退の要請を受信したストリーマは前者の処理を行う. 後者の処理は，ノードが一切の連絡なしに離脱をした

2. 視聴申請を受信したストリーマは，配信人数を満た際に，それを発見した周辺ノードが行う. 動画を視聴する

していないノードの深さまで要請を中継する．図の各ノードは一定時間毎にアップストリーマ（動画の送信元

場合，ストリーマは 2 つのノードにストリーミングノード）に対して Ping を送信し，存在の有無を確認する.

データを配信し 配送人数を満たしているため，中継• 末端ノード引き継ぎ法

ノードを持っていない参加ノード A とノード B にストリーマは末端ノード（最も新しく追加された要請を送信する．

ノード）を選択する. アップストリーマ（送信元

3. 要請を受信したノード A とノード B は，配送人数ノード）情報， 送信宛先ノード情報，周辺ノード情を満たしていないため，新規ノードにストリーミン

報の３つを脱退するノードの持っていた各情報に変グデータを中継可能であることを送信する．

更し， 脱退するノードの代わりとして機能させ， 通

4. 新規ノードは中継可能の情報を受信した際の ttl かIP ホップ数の少ないノードに配信を要請し，ストリーミングデータを中継してもらう．
追加した処理の流れを図 2 に示す.

1. ノード A は中継可能であること意味する通知を受信した際の ttl か IP ホップ数の少ないノード B に配信を要請. ノード B は受信したノード A の情報（通信に必要となる IP アドレスやポート番号）を自らの隣接ノード情報として登録する.
2. ノード B は自分の配送先ノード C の情報を新規ノードに送信する.

信を続行させる.
末端ノード引き継ぎ法を図 3 に示す. 図中で使用する各変数について以下に示す.

– stream：配信可能なノード数を表す.
– limit：木の深さに対する配送可能な残りのノードを表す. ストリーマ側で使用される.
– treesize：ノードの種類によって表す内容が異なる.
リスナー：自分のいる位置 (木の深さ)
ストリーマ：ストリーミングツリーのサイズ• 直下ノード引き継ぎ法また，後藤研究室内の PC を使用し，実機においてもシステムが正常に動作するかを確認する．そして最後に自作GUI の動作確認実験を実施する．
4.1

ネットワークモデル

GINE で構築するネットワークのモデルを図 5 で示す．

図 3 末端ノード引き継ぎ直下ノード引き継ぎ法を図 4 に示す.

図 5 NetworkModel

一つの ISP につきノード 100 個で構成される IP ネット
ワークを構成し，提案した方式に基づき P2P ルーティン
図 4 直下ノード引き継ぎグを行う．
現実のネットワークでは，ISP をまたがって Tree が構

ネットワーク障害などで，ストリーマに対し一切の成され，ノード間の通信が異なる ISP 間をまたがって行わ

連絡なしに脱退したノードを発見したノードが行れてしまうため，各ノードが，同一 ISP 内に存在しているう. 脱退したノードの送信宛先ノード情報を引き継という物理的ネットワークを構築して実験を行う.

ぎ，通信を継続させる.

3.3

GUI の設計

4.2

expect スクリプト

仮想ネットワーク内で P2P プログラムを自動的に実行

新システムでは，よりシステムの利便性を向上させるたするために expect スクリプトを用いる．expect コマンド

めに Qt4 を用いた GUI（Graphical User Interface）を設は対話的に使用するように作られたプログラムをスクリプ計する.

ト中に組み込み，定型的な作業を自動実行させることがでストリーマーの IP アドレスやポート番号の記入など記

きる. P2P プログラムではストリーマとリスナーごとに入は端末で行い, リスナーの参加と脱退を GUI を用いて操

expect ファイルを用意し，実行時に IP アドレスとポート作する.

番号を指定し起動する．

4

実験
我々が提案するシステムは 100 ノード程度が P2P ストリーミングを用いて，動画や音楽データを送受信する. ま

4.3

実験手順

GINE を用いた実験では，多数ノードでの各処理の安定性を確認する.

た， 先行研究 [2] より大規模システムを想定する．しか各ノードの expect スクリプトにツリーを形成するためし実際に想定人数分の P2P ノードを起動し実験するのはの処理を書き込み実行する. ストリーマは一つ. リスナー困難である. そのため， 本研究では Goto‘s IP Network

数は 99 ノードとする. 実験のためストリーマが入力する

Emulator(以下 GINE[1]) を用いて適切な仮想ネットワーデータサイズを調整し，ツリーを形成する．また，ノードクを構築し実験を行う．

が途中で脱退した場合，脱退処理が行われ，再接続が完

GINE[1] とは，多数のルータやリンクで構成される広域了するまで，ストリーミングデータの中継は途切れ，下流ネットワークを模倣することができるネットワークエミュ

ノードへのデータ転送が一時停止し通信に遅延が生じる．

レータである．また，少数実機での実験も実施し，ノー接続完了後，tcpdump コマンドを使用し，ノード間のパドの脱退処理の正確性を確認する．実験環境は，OS にケットの流れを観察し，本研究であげた二種類のノード脱Ubuntu10.04 を使用し，仮想ネットワーク上で expect ス
クリプトを用いて P2P プログラムを自動的に実行する．

退処理をそれぞれ行った際の通信の遅延時間を計測する．
実機を用いた実験では，ノード離脱時の処理の正確性を確認する．実験は後藤研究室内の PC を使用し，ノード数• Help:GUI の操作についてのヘルプを表示する．

は 7 ノードで実施する．

• quit:GUI 画面を閉じる．

各ノードの接続完了後，ひとつの PC に接続された LAN

実際に中央の空欄にに配信元ノードのアドレスを入力しケーブルを抜き，強制的にネットワークから離脱させ，適“REQUEST ボタンを押した際の動作結果を図 7 に示す．

切な処理が行われるか確認する．

4.4

実験結果

100 ノードのツリーの形成は成功した. また脱退処理など各々の処理も問題なく実行することができた. 脱退処理により生じる通信遅延時間は，末端ノード引き継ぎ法が平均 342msec. 直下ノード引き継ぎ法が平均 170msec と測定することができた. これより，前者よりも後者の方が，システムに対する影響が少ないことが確認できた. 個々のノードが持つべき情報は増えてしまうが，配信動画の劣化防止や，視聴者の満足度を第一に考えた場合，ユーザから

図 7 動作結果の脱退申請を受け付けた際も，後者の処理を採用すべきだという結論に至った.
実機での実験では，離脱したノードは下位ノードにより即座に認識され，ネットワーク障害などによる脱退に対する処理として，直下ノード引き継ぎ処理が実行された．また，処理完了後ストリーミングデータも中継され，ノード間の再接続も完了したことも確認できた.

4.5

GUI 動作確認

自作 GUI を実際に動作させた結果を記す．GUI 機動後の MainWindow 画面を図 6 に示す．

5

おわりに
本研究では， システムの安定性向上を目的にシステムを再設計し，その性能を評価した. 多数ノードでの実行も成功し，ノードの離脱によるノード間の再接続処理も完了した. また，離脱要請なしに離脱するノードに対する処理を追加し，ネットワーク障害などによるユーザの意図しない事態にも対応できるシステムを実現させた. また，自作

GUI の構築により，ユーザの利便性向上にも貢献した．
今後の課題として，以下 2 つがあげられる.
1. GUI の機能追加
2. 配信データの品質計測プログラムの起動と配信元ノードへの脱退申請、アップストリーマの存在確認のための ping 送信は今回作成したGUI で実現したが, まだ受信したデータを表示，再生する機能などはないため追加する必要がある。また、動画を実図 6 GUI 起動後の画面際に送受信し品質を確認するまでは至っていないため、品質を計測し、品質確保のためのシステム改良も今後の課題となると考えられる。以上を実現することで、より利便性

各ボタンの説明を以下に示す．

• REQUEST:中央の空欄に配信元ノードのアドレスを入力することで，P2P ノードの設置され，新規参の高いシステムが完成する.

参考文献[1] Goto, K.: Network Emulator with Virtual Host andPacket Diversion, Cyber Journals: Multidisciplinary
する.
Journals in Science and Technology, Journal of Se• PING:中央の空欄に IP アドレスを入力すること，
lected Areas in Telecommunications (JSAT), Vol. 3,そのアドレスを持つノードへ ping を送信する．
No. 3, pp. 13–20 (2012).
• LEAVE:中央の空欄に配信元ノードのアドレスを入力することで，配信元ノードへ脱退申請が送信さ [2] 牧 祐希，長江 翔：Ｐ２Ｐストリーミング放送シス
テムの改良，南山大学 情報通信学科 2010 年度卒業論れる．
文 (2011).
• Listener Dialog:新たにリスナー設定を行う際に使[3] 後藤祐輝，田中達也：Ｐ２Ｐストリーミングのための用．
加の要請が送られ，リスナーポートの設置まで完了• Streamer Dialog:新たにストリーマ設定を行う際に使用．

ルーティングの提案とそのエミュミレーション，南山大学 情報通信学科 2008 年度卒業論文 (2009).