OpenFlow を用いた 仮設ネットワーク環境での経路制 … · Open vSwitch[5]...

38
平成 28 年度 学士学位論文 OpenFlow を用いた 仮設ネットワーク環境での経路制御の 実現と評価 Implementation and evaluation of routing control in temporary network environment using OpenFlow 1170364 舩越勇樹 指導教員 横山和俊 2017 2 28 高知工科大学 情報学群

Transcript of OpenFlow を用いた 仮設ネットワーク環境での経路制 … · Open vSwitch[5]...

平成 28年度

学士学位論文

OpenFlowを用いた

仮設ネットワーク環境での経路制御の

実現と評価

Implementation and evaluation of routing control in

temporary network environment using OpenFlow

1170364 舩越勇樹

指導教員 横山和俊

2017年 2月 28日

高知工科大学 情報学群

要 旨

OpenFlowを用いた

仮設ネットワーク環境での経路制御の

実現と評価

舩越勇樹

大規模災害が発生した際には,情報システムを活用することで迅速に被災情報を確認し,

効果的に救助活動を行うことができると考えられる.しかし,災害時には電気や通信インフ

ラが途絶えてしまうため,情報システムを利用することが困難になってしまう.そのため,

情報システムを利用するためには仮設ネットワークを災害現場に構築することが必要であ

る.この仮設ネットワークには,被災現場まで搬送することから可搬性に優れた機器で構成

し,緊急度の高い情報を優先的に転送することが求められることが考えられる.

本論文ではこれらの要件を基に,ネットワーク機器として Raspberry Piを使用し,QoS

機能,経路制御機能を実現するために OpenFlow を使用した仮設ネットワーク環境を検討

し,検証を行った.また,この環境の有効性を評価するために評価実験を行った.その結

果,経路制御機能により重要な情報を優先的に送信できることを確認した.これにより,

Raspberry Pi及び OpenFlowを使用した仮設ネットワーク環境は被災現場での情報交換に

おいて十分に実用性があると考えられる.

キーワード OpenFlow, Raspberry Pi, SDN, QoS, 経路制御

– i –

Abstract

Implementation and evaluation of routing control in

temporary network environment using OpenFlow

Yuki  Funakoshi

When large scale disasters occur, the information system are effective to collect

damage information, and to rescue an injured person. However, it is difficult to use

information systems, since electricity and network are not available. Therefore, in order

to use the information system, it is necessary to construct a temporary network in the

disaster area. Temporary network needs to use portable equipment, and it needs to

have functionality controlling priority of information to be transferred.

In this paper, we verify feasibility for temporary network in disaster area. We use

Raspberry Pi as portable equipment, and use OpenFlow to control network routing. In

addition, we evaluate throughput of temporary network and time for priority routing

protocol based on OpenFlow.

key words OpenFlow, Raspberry Pi, SDN, QoS, Routing control

– ii –

目次

第 1章 はじめに 1

1.1 研究背景 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 問題点の解決方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

第 2章 仮設ネットワーク環境の検討 4

2.1 仮設ネットワーク環境への要件 . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 仮設ネットワーク環境実現の方針 . . . . . . . . . . . . . . . . . . . . . . 7

2.2.1 Raspberry Pi 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2.2 Ryu概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.3 Open vSwitch概要 . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 Ryuでの経路制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

第 3章 仮設ネットワーク環境の実装 11

3.1 プロトタイプ構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.2 経路制御機能プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.3 経路を直接指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3.1 プログラム概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.4 動的ルーティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.4.1 プログラム概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.4.2 トポロジー解析処理 . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.4.3 経路計算処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.4.4 ルート設定処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.5 Ryuアプリケーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

第 4章 評価 21

– iii –

目次

4.1 評価項目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.2 Raspberry Piを利用した際の性能評価 . . . . . . . . . . . . . . . . . . . 22

4.2.1 評価内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.2.2 評価環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.2.3 結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.2.4 考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.3 経路制御機能の動作確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.3.1 評価内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.3.2 評価環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.3.3 結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.4 経路制御機能の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4.1 評価内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4.2 評価環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4.3 結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4.4 考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

第 5章 おわりに 29

謝辞 30

参考文献 31

– iv –

図目次

1.1 仮設ネットワーク環境の概要図 . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1 仮設ネットワークの構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2 Ryu SDN Framework概要図 . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.1 プロトタイプ構成図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.2 経路を指定する場合の概要図 . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3 動的ルーティングの概要図 . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.1 帯域幅計測のネットワーク環境 . . . . . . . . . . . . . . . . . . . . . . . . 22

4.2 初期に設定された経路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.3 切り替えを行った経路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.4 一つの経路設定に必要な時間 . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.5 動的ルーティングに必要な時間 . . . . . . . . . . . . . . . . . . . . . . . . 27

– v –

表目次

2.1 使用するハードウェア,及びソフトウェア . . . . . . . . . . . . . . . . . . 7

2.2 Raspberry Piのモデルによる仕様の違い . . . . . . . . . . . . . . . . . . . 8

3.1 プロトタイプ構成におけるハードウェア . . . . . . . . . . . . . . . . . . . 12

4.1 帯域計測結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.2 経路制御測定結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

– vi –

第 1章

はじめに

1.1 研究背景

大規模災害が発生した場合,情報システムを利用することにより迅速に被災情報確認する

ことができ,効果的に救助活動を行うことができる.しかし,東日本大震災では,4電力事

業者の管内合計で,延べ 460万件を超える停電が発生し,東北・関東で 13,000局を超す移

動無線基地局が停波し,震災直後から東北・関東地方を中心に通常の約9倍の通話が殺到し

て輻そう状態となった [1].そのため,常用の通信システムでは被災現場での被災情報の交

換を行うことができないと考えられる.以上のことから,救助活動などに情報システムを利

用するためには仮設ネットワークを被災現場で構築する必要が有る.

 被災現場で仮設ネットワークを構築し情報システムを活用した救助活動を開始するために

は,まず迅速な仮設ネットワークの環境構築が必要となってくる [2].そのため,被災現場

まで機材を持ち運ぶことを考えると仮設ネットワークに使用するネットワーク機器には可搬

性に優れいるものが求められ,尚且つ災害時によりインフラが使用できない際にも,インフ

ラに依存せずに動作をする物が求められる.

 情報システムを利用した救助活動では,音声や動画といったような大きなデータも使用さ

れることが考えられる.しかし,仮設ネットワークでは通常時のネットワークに比べ機器や

通信方式により,安定せず,限られた通信帯域を利用して通信を行わなければならないこと

が予想される [3][4].その影響により,重要な情報が輻輳し遅延が発生することが考えられ

る.このことから,重要な情報を優先的に転送する事が求められる.これを実現するため

に,安定した通信を行うことができるように経路を自由に切り替える機能や,重要な情報以

– 1 –

1.2 問題点の解決方法

外の情報の帯域を制限する機能が必要である.

つまり,図 1.1の様に,救急隊員が持ち運ぶことの出来る可搬性の高いネットワーク機器

を利用し,かつ,被災情報などの緊急度の高い情報には広い通信帯域で尚且つ,専用の経路

を提供し,その他の緊急度の低い情報には狭い帯域を提供する仮設ネットワーク環境が求め

られる.

1.2 問題点の解決方法

仮設ネットワークで使用するネットワーク機器は可搬性を考慮して,シングルボードコン

ピュータである Raspberry Pi を使用する.Raspberry Pi にソフトウェアスイッチである

Open vSwitch[5]を導入することで,小型で可搬性に優れており,ポータブルバッテリーな

どを接続することでインフラに依存しないネットワーク機器として運用できる.また,経路

を自由に設定することや,重要な情報に対して優先的に情報を転送するといった柔軟なネッ

トワーク制御を行うため,QoS 機能や経路制御機能が必要となってくる.そのため SDN

を実現するためのネットワーク制御技術である OpenFlow[6] を使用する.OpenFlow は

OpenFlowコントローラと OpenFlowスイッチで構成されており,OpenFlowコントロー

ラ内のアプリケーションを設計,実装することにより,QoS制御や,経路制御などを実現可

能となる.既存の研究として,Raspberry Piを用いて OpenFlowを使用し仮設ネットワー

クを構築することが提案されている [7].しかし,実装されている機能は QoS機能のみであ

る.そのため,本研究では経路制御が可能な仮設ネットワークが実現可能であるかを検討

する.

– 2 –

1.2 問題点の解決方法

図 1.1 仮設ネットワーク環境の概要図

– 3 –

第 2章

仮設ネットワーク環境の検討

2.1 仮設ネットワーク環境への要件

仮設ネットワーク環境の実装方法を検討する際に求められる要件として,QoS 機能の搭

載,経路制御機能の搭載,ネットワーク機器の小型化,電池・ポータブルバッテリーでの動

作などがあげられる.

緊急度の高い情報を優先的に転送する必要が有るため,QoS 機能と経路選択機能を搭載

する必要が有る.QoS機能では,特定の端末や,パケットに対して通信を行う帯域幅を設定

する事が可能となる.そのため,重要な情報に対しては一定の帯域を保証することができ,

その他の情報に対しては,逆に帯域に制限を設けることができるため,重要な情報の安定

して転送することができる.また,経路制御機能では,ネットワークの接続状況からネット

ワーク機器間の経路を変更することが可能となる.そのため,救助活動で緊急度の高い情報

を安定して行うための専用経路を設定することや,ネットワークに障害が発生した場合,障

害箇所を迂回して通信を行うことができる.被災現場へ救助隊員が所持、搬送、設置をする

事や,災害によってインフラが破壊されており,インフラを使用できない状況を想定してい

るため,小型で可搬性に優れたネットワーク機器で,尚且つ,電池やポータブルバッテリー

で稼働するものが必要となる.以上の要件をまとめると以下のようになる.

– 4 –

2.1 仮設ネットワーク環境への要件

• QoS機能の搭載

緊急度の高い情報を優先的に送信するため,重要度の高い情報に対して帯域を保証する

• 経路制御機能の搭載

緊急度の高い情報を優先的に送信するため,各スイッチ間の接続や速度を安定させる

• ネットワーク構成機器の小型化

スイッチを人が携帯するため,持ち運びやすくさせる

• 電池やポータブルバッテリーでの動作

インフラを使用しないことを前提としているため,インフラを使用せずに動作する

検討から想定した仮設ネットワーク環境の構成を図 2.1に示す.想定する仮設ネットワーク

環境では,SDNを実現するための技術である OpenFlowを導入する.仮設ネットワークを

構成する OpenFlow スイッチは一つの OpenFlow コントローラによって制御されており,

通信を行いたい端末は APを介して OpenFlowコントローラを通りサーバーと通信を行う.

各 OpenFlowスイッチ間は無線通信によって接続される.

各 OpenFlowスイッチは現在のトポロジーの情報を OpenFlowコントローラへと送信し,

情報を受け取った OpenFlow コントローラでは情報と,内部に実装されたアプリケーショ

ンをもとに各 OpenFlow スイッチに制御情報を転送することでネットワークの設定を変化

させることができる.

– 5 –

2.1 仮設ネットワーク環境への要件

図 2.1 仮設ネットワークの構成図

– 6 –

2.2 仮設ネットワーク環境実現の方針

2.2 仮設ネットワーク環境実現の方針

2.1から,仮設ネットワーク環境を実現するための方針を決定する.使用するハードウェ

アやソフトウェアを表 2.1にまとめる.これらの概要をそれぞれ次節で述べていく.

表 2.1 使用するハードウェア,及びソフトウェア

ハード,ソフト 用途

Raspberry Pi 3 Model B OpenFlowスイッチ用コンピュータ

Ryu OpenFlowフレームワーク (OpenFlowコントローラ)

Open vSwitch OpenFlowソフトウェアスイッチ

2.2.1 Raspberry Pi 概要

Raspberry Pi は,ARM プロセッサを搭載したシングルボードコンピュータである.イ

ギリスのラズベリーパイ財団により開発されており,現在までに様々なモデルの Raspberry

Piが開発されている.モデルごとの使用を表 2.2にまとめる.サイズはいずれも小さく手の

ひらサイズとなっている.そのため,内臓のハードディスクなどの記憶装置が搭載されてお

らず,SDメモリーカードもしくはmicroSDメモリーカードを起動や保存などを行う記憶装

置として利用する.OS は公式サポートとして Debian ベースで開発されている Raspbian

が存在している.

本実験では,Raspberry Pi 3 model Bを利用する,この Raspberry Piのモデルでは電

源が 1.4A(7W)で最大 2.5A(12,5W)必要とされている.そのため,ポータブルバッテリー

により電源を供給することで稼働させることができる.また,OS には先述した Raspbian

を利用し,Raspbianに Open vSwitchを導入することにより,OpenFlowスイッチとして

利用する.

– 7 –

2.2 仮設ネットワーク環境実現の方針

表 2.2 Raspberry Piのモデルによる仕様の違い

モデル Raspberry Pi 1

Model B+

Raspberry Pi 2

Model B

Raspberry Pi 3

Model B

CPUクロック周波数 700 MHz 900 MHz 1.2GHz

CPUコア数 1 4 4

メモリ 512 MB 1 GB 1GB

電源 600mA 900mA 1.4A

ネットワーク イーサネット イーサネット イーサネット  

IEEE802.11b/g/n

Bluetooth 4.1

2.2.2 Ryu概要

Ryu SDN Frameworkは SDNアプリケーションの開発に必要なライブラリやツールを提

供するフレームワークである [8].SDNは,データ転送を担うデータプレーンと,制御を担

うコントロールプレーンに分けられる.これにより,一つのコントロールプレーンで集中管

理することでネットワークの構造や構成などをソフトウェアにより柔軟に制御可能となって

いる.Ryuでは SDNアプリケーションの開発する上で必要となってくる,データプレーン

を制御するための基本機能や,SDNアプリケーションで共通的に必要となる機能を提供し

ている.図 2.2に概要を示す.

 この SDNを実現するための標準の一つにOpenFlowがある.このRyu SDN Framework

には OpenFlowにおけるコントロールプレーンである OpenFlowコントローラ機能を持っ

ている.この機能を使用することで,OpenFlowスイッチを使用した SDNアプリケーショ

ンの開発が容易になります.また,Ryu SDN Frameworkは Pythonで開発されており,ア

プリケーションの開発を行う際にも Pythonを利用して行う.

– 8 –

2.2 仮設ネットワーク環境実現の方針

図 2.2 Ryu SDN Framework概要図

2.2.3 Open vSwitch概要

Open vSwitch は Apache2 ライセンスによりオープンソースで開発されているマルチ

レイヤスイッチである.仮想環境での仮想スイッチとしての役割を果たし,Linux 標準の

Bridge 機能に代わる機能を持つまた,仮想ネットワーク層に標準的な制御機能と可視性の

あるインタフェースを持っている.コードはプラットフォームに依存しない C で書かれて

いるため,他の環境に移植することが容易である [5].

– 9 –

2.3 Ryuでの経路制御

2.3 Ryuでの経路制御

経路制御は,ネットワーク上で上でパケットを目的地まで転送するため,パケットの経路

の情報を管理することで,複数ある経路の内から,最適な経路を選択するための仕組みであ

る.既存のネットワークでは,パケットを二つ以上の異なるネットワーク間で転送するため

には,ルータを使用する.ルータでは,パケットをネットワーク層で,どの経路を転送すべ

きかを判断する経路制御の機能を持っている.経路制御には,静的ルーティングと動的ルー

ティングの二種類が存在している.動的ルーティングでは,あらかじめルータ内の経路表に

経路を記憶させることで行う.もう一方の動的ルーティングでは,ルータ同士が経路情報を

互いに交換し,自動的にルータ内の経路表を作成や更新を行い経路制御を行っている.

OpenFlowでは,OpenFlowスイッチに対してルータの機能を持たせることができる.こ

れは,Ryuに同梱されている RESTアプリケーションを使用することで可能となる.この

アプリケーションで行えることを以下にまとめた.

• 各スイッチに対して IPアドレスや,VLANの設定

• 静的ルートの設定

• デフォルトルートの設定

• 設定した情報の取得

この REST アプリケーションを利用することで,静的ルーティングが可能となる,しか

し,この RESTアプリケーションには動的ルーティングを行う機能はついていない.動的

ルーティングを行うためには,各スイッチのトポロジー情報を取得する必要がある.そのた

め,Ryuに同梱されている RESTアプリケーションをもう一つ利用し,スイッチのトポロ

ジー情報を取得を行う.この情報をもとに経路を計算しスイッチに設定を行うアプリケー

ションを作成することで,動的ルーティングが可能となる.

– 10 –

第 3章

仮設ネットワーク環境の実装

3.1 プロトタイプ構成

仮設ネットワーク環境を提案するにあたり,性能の評価を行うためにプロトタイプのネッ

トワーク環境を構築し,実装を行った.このプロトタイプの構成図を図 3.1に示す.プロト

タイプの構成では,Raspberry Piを使用した OpenFlowスイッチを 3台用意しており,そ

れぞれ互いに接続されている.そのうちの,2台に端末とサーバが接続している.この 3台

の OpenFlow スイッチはコントローラとの接続のみ無線で接続されており,ほかの接続は

実装の都合上すべて有線で接続されている.

図 3.1 プロトタイプ構成図

– 11 –

3.2 経路制御機能プログラム

次に,使用するハードウェアを表 3.1に示す.OpenFlowコントローラは仮想マシン上で

実行させる.ソフトは VMware Workstation 12 Playerを利用し,OSは Ubuntu 16.04.1,

CPU割り当てを 2コア,メインメモリ割り当てを 2GBに設定を行った.

表 3.1 プロトタイプ構成におけるハードウェア

ハードウェア 用途 性能 備考

Raspberry Pi 3

model B

OpenFlow

スイッチ

fastEthernet,USB2.0 ポー

トを搭載

OS は Raspbian

を使用

VAIO

VPCZ21AGJ

ノートパソコン

OpenFlow

コントロー

intel core i5-2410M,メイン

メモリ 4GB,GigabitEther-

netを搭載

コントローラは

VMware Work-

station内で実行

Buffalo LUA4-

U3-AGT

USBLAN

ポート

USB3.0,GigabitEthernet

に対応

Raspberry Piに

接続する

3.2 経路制御機能プログラム

経路制御機能として,経路を直接指定する方法と,動的ルーティングの二つの機能を実装

した.経路を直接指定する方式では,特定の情報のみを送受信する経路を設定することで通

信の安定性を向上させることを目的としている.これは,コントローラに直接設定を送信す

ることで行う.

もう一つの,動的ルーティングでは,ネットワークに障害が発生しトポロジーに変化が起

こった際に,自動的に再度ルーティングを行い通信を回復させることを目的としている.こ

れは,動的ルーティングを行うプログラムを動作させることで行う.

– 12 –

3.3 経路を直接指定

3.3 経路を直接指定

3.3.1 プログラム概要

救助活動を行う中で,緊急を要する通信は必ず発生すると考えられる.このような情報は

接続が不安定で通信が途切れることや輻輳により遅延が発生することがあると救助活動に支

障をきたすと考えられる.このような状況を避けるため,緊急を要する通信を行う際には,

安定した経路に切り替えることが必要となる.

このような場合に,経路を直接指定する.図 3.2 のように,OpenFlow コントローラか

ら,各 OpenFlowスイッチに対して経路情報を送り,経路の更新を行なう.これにより,一

時的に経路を切り替え安定して通信が行うことができる.

図 3.2 経路を指定する場合の概要図

– 13 –

3.4 動的ルーティング

3.4 動的ルーティング

3.4.1 プログラム概要

ネットワークに障害が発生した際には,障害したスイッチを経由する通信がすべてできな

くなる.このような状況を避けるために,動的ルーティングを行う必要がある.

このような場合に,動的ルーティングプログラムを使用する.このプログラムでは図 3.3

のように,ネットワークを監視して障害が発生しトポロジーに変化が起こった際に,コント

ローラで経路を計算し,各スイッチに経路情報を送ることで再度ルーティングを行い,障害

が発生した地点を迂回して通信を行えるようにすることが可能である.

図 3.3 動的ルーティングの概要図

– 14 –

3.4 動的ルーティング

3.4.2 トポロジー解析処理

トポロジー解析処理は,動的ルーティングを行う際に必要になる,トポロジーの情報を

各スイッチから取得する.以下のように情報の取得には RESTを利用し,取得した情報は

JSON形式で返される.

各スイッチの接続状況を取得� �response = requests.get(

     ’http://192.168.0.2(※コントローラの IPアドレス):8080

      /v1.0/topology/links/0000000000000001(※スイッチ ID))� �上記でスイッチがどのように接続されているかが JSON形式で返され,responseに格納さ

れる.

各スイッチの設定情報を取得� �response = requests.get(

      ’http://192.168.0.2(※コントローラの IPアドレス):8080

      /router/0000000000000001(※スイッチ ID))� �上記でスイッチの IPアドレスなどの設定情報を取得でき,同様に情報は responseに格納さ

れる.この時に,取得できるスイッチの IPアドレスなどはそのスイッチに設定されている

ものすべてが取得される.

– 15 –

3.4 動的ルーティング

3.4.3 経路計算処理

取得した情報をもと経路を計算する.経路を計算する方法は,ダイクストラ法を用いて各

スイッチの最短経路を求めることで経路を決定する.また,スイッチ間の重みはすべて同じ

ものとしている.ダイクストラ法により経路を求めるため,スタート地点となるスイッチか

ら順番に接続しているスイッチの距離を求めて,最も距離が短いものを記憶する.

ダイクストラ法� �for m in range(1,N):

       #Nはスイッチ総数

f[s] = 1

       #sは現在のスタート地点のスイッチ ID

        #fは経路が決定したスイッチには1が入っている

for j in range(N):

if e[s][j] != 1:

          #eにはsとjのスイッチ間の重み

continue

if u[s] + e[s][j] < u[j]:

u[j] = u[s] + e[s][j]

           #uはスタートからスイッチまでの距離

prev[j] = s

          #prevには経路が記録される� �上記のプログラムにより一つのスイッチの経路が計算できる.これをすべてのスイッチに対

して行うことでネットワークすべての経路を求めることができる.

– 16 –

3.4 動的ルーティング

3.4.4 ルート設定処理

ダイクストラ法によって求められた経路を各スイッチに設定するために RESTを用いて

設定を行う.各スイッチに RESTを用いて設定を行う際には以下の様にすることで行える.

各スイッチへ経路の設定� �def set_routing(router_id, gw_id, dst_ip):

#dst_ipは宛先の IPアドレス(ネットワーク)

#dst_gwはゲートウェイとなる IPアドレス

#router_idは設定を行うスイッチの ID

response1r = requests.post(

’http://192.168.0.2(※コントローラの IPアドレス):8080

     /router/’+router_id,

json.dumps({’destination’: dst_ip, ’gateway’: gw_id}))� �上記からわかるように,経路を設定するためには,宛先となる IPアドレスとゲートウェ

イ,設定を行うスイッチの IDが必要となる.しかし,RESTでの情報取得だけでは,ゲー

トウェイを求めることができない.そのため,それらを求めるため設定を行うスイッチと宛

先となっているスイッチの IPアドレスを比較することで求める.

 まず,設定を行うスイッチと宛先となっているスイッチの IPアドレスを RESTを使用し

て取得する.

  RESTで取得した場合,スイッチに設定されているすべての IPアドレスが取得されるた

め,どの IPアドレスがゲートウェイとなるのかわからない.そのため,ipaddressモジュー

ルを使用して,以下の様にして二つのスイッチに設定されている IPアドレスをすべて比較

を行い,同一のネットワークに存在している IPアドレスをを調べる.

– 17 –

3.4 動的ルーティング

IPaddressの比較(1/2)� �for i in range(0, a):

for j in range(0, b):

try:

#ip_src設定を行うスイッチの IPアドレス

#ip_dst宛先となっているスイッチの IPアドレス

mask_a = ip_src[i].find(’.’)

mask_b = ip_src[i].find(’.’, mask_a + 1)

mask_c = ip_src[i].find(’.’, mask_b + 1)

mask_d = ip_src[i].find(’.’, mask_c + 1)

mask_ad = ip_dst[j].find(’.’)

mask_bd = ip_dst[j].find(’.’, mask_ad + 1)

mask_cd = ip_dst[j].find(’.’, mask_bd + 1)

mask_dd = ip_dst[j].find(’.’, mask_cd + 1)

if ip_src[i][0:mask_a] == ip_dst[j][0:mask_ad]:

ip_ans[0] = ip_dst[j]

if ip_src[i][mask_a + 1:mask_b] ==

                 ip_dst[j][mask_ad + 1:mask_bd]:

ip_ans[1] = ip_dst[j]

if ip_src[i][mask_b + 1:mask_c] ==

                   ip_dst[j][mask_bd + 1:mask_cd]:

ip_ans[2] = ip_dst[j]

if ip_src[i][mask_c + 1:mask_d] ==

                     ip_dst[j][mask_cd + 1:mask_dd]:

ip_ans[3] = ip_dst[j]

except:� �– 18 –

3.4 動的ルーティング

IPaddressの比較(2/2)� �if ip_ans[3] != 0:

mask = ip_ans[3].find(’/’)

return ip_ans[3][0:mask ]

elif ip_ans[2] != 0:

mask = ip_ans[2].find(’/’)

return ip_ans[2][0:mask ]

elif ip_ans[1] != 0:

mask = ip_ans[1].find(’/’)

return ip_ans[1][0:mask ]

else:

mask = ip_ans[0].find(’/’)

return ip_ans[0][0:mask ]� � 上記をすべての IPアドレスを比較できるようにループさせる.この方法を用いてゲート

ウェイを求める.これにより,ゲートウェイを求めることができたので,RESTを用いて各

スイッチに設定を行う.

– 19 –

3.5 Ryuアプリケーション

3.5 Ryuアプリケーション

経路制御機能は,Ryuに同梱されている RESTアプリケーションを利用して行う.以下

に使用する RESTアプリケーションをまとめる.また,それぞれの機能を説明する.

• rest router.py

• rest topology.py

rest router.py は,OpenFlow スイッチに対してルータの機能を与えるアプリケーショ

ンである.これは,基本的なルータの機能以外にも VLAN などの設定も可能となる.

rest topology.pyは,各 OpenFlowスイッチから情報を情報を取得し接続情報や,スイッチ

に接続しているホストの情報などを得ることができる.

– 20 –

第 4章

評価

4.1 評価項目

評価は以下の項目に沿って行う.

• Raspberry Piを利用した際のルータとしての性能評価

• 経路制御機能の動作確認

• 一つの経路を設定するのに掛かる時間と動的ルーティングに掛かる時間の評価

まず,一般的な PC に比べ性能の劣る Raspberry Pi で実現する OpenFlow スイッチに

ルーターとしての実用性を検証する.そのため,Raspberry Piを利用した際のオーバーヘッ

ド計測と評価を行う.

次に実装した経路制御機能プログラムの動作確認のために,経路を切り替え前から切り替

え後の両方で設定した通りの経路を通り通信を行っているのか確認をを行う.

最後に,経路制御機能について評価を行うため,一つの経路を設定するのにかかる時間

と,動的ルーティングプログラムを使用して三大のスイッチに対してルーティングを行った

際に掛かる時間が情報の送受信にどの程度影響を与えているのかを検証する.

– 21 –

4.2 Raspberry Piを利用した際の性能評価

4.2 Raspberry Piを利用した際の性能評価

4.2.1 評価内容

Raspberry Pi のスループットをトラフィック観測ツールである Iperf を使用して計測す

る.Iperfクライアント,Iperfサーバでそれぞれ実行するコマンドを以下に示す.

Iperfクライアント側でのコマンド� �iperf -c 192.168.0.2 -u -b 1G -t 20 -i 0.5� �Iperfサーバ側でのコマンド� �iperf -s -u� �サーバからクライアントへ,UDPを使用して 1Gbpsのトラフィックを 20秒間送信した.

4.2.2 評価環境

この評価に使用するネットワーク環境のみ図 4.1のネットワーク環境を使用し評価を行う.

図 4.1 帯域幅計測のネットワーク環境

Ryu アプリケーションはルーターの機能を実現する rest routerpy を使用する.また

OpenFlowスイッチには Raspberry Pi 3 model Bを利用して測定を行う

– 22 –

4.2 Raspberry Piを利用した際の性能評価

4.2.3 結果

結果を表 4.1に示す.

表 4.1 帯域計測結果

通信帯域幅(Mbps) 標準偏差

Raspberry Pi 3 model B 95.7Mbps 0.08

4.2.4 考察

結果より,通信帯域幅において平均して 95.7Mbps出ている事が分かった.そのため,音

声や動画の送受信に関しては問題ない速度であると考えられる.また,ネットワーク機器間

の無線化を検討すると,採用する無線通信の規格によっては,無線通信での限界速度でボト

ルネックが発生する可能性が高い.そのため,末端の Raspberry Piでのスイッチングに求

められる能力としては十分であると考えられる.

– 23 –

4.3 経路制御機能の動作確認

4.3 経路制御機能の動作確認

4.3.1 評価内容

実装した経路制御機能プログラムの動作確認のために,経路を切り替え前から切り替え

後の両方で設定した通りの経路を通り通信を行っているのか確認をを行う.経路の確認には

tracerouteコマンドを使用して行う.

4.3.2 評価環境

評価の際に利用する Ryuアプリケーションを以下に示す.

• rest router.py

• rest topology.py

• 動的ルーティングプログラム

経路制御機能にて設定する経路それぞれ初期設定の経路の図 4.2,経路を切り替えた後の図

4.3に示す.

– 24 –

4.3 経路制御機能の動作確認

図 4.2 初期に設定された経路

図 4.3 切り替えを行った経路

4.3.3 結果

tracerouteコマンドを使用した結果,スイッチを 3台経由して通信を行っていたものが,

動的ルーティングプログラムを使用した後では,スイッチを二台経由して通信を行っていた

ことが分かった.そのため,意図した動作が行われていることが確認できた.

– 25 –

4.4 経路制御機能の評価

4.4 経路制御機能の評価

4.4.1 評価内容

実装した二つの経路制御機能において,経路の切り替えや動的ルーティングにどれほどの

時間が掛かり情報の送受信にどの程度影響を与える検証するため.一つの経路を設定するの

にかかる時間と動的ルーティングに掛かる時間の評価を行う.

一つの経路を設定するのにかかる時間は,OpenFlowコントローラに設定を送り,設定完

了の情報が送られてくるまでを測定する.また,動的ルーティングでは,経路が何も設定し

ていない状態の三台の OpenFlowスイッチに対して動的ルーティングプログラムを使用し,

すべてのスイッチに対してルーティングが行い,プログラムの処理時間を計測することで測

定を行う.

4.4.2 評価環境

評価の際に利用する Ryuアプリケーションを以下に示す.

• rest router.py

• rest topology.py

• 動的ルーティングプログラム

時間測定には Pythonの timeモジュール内の time()を使用する.このメソッドにより現

在の CPU時間を取得し,開始時と終了時の差を算出することで時間を測定する.

4.4.3 結果

10回測定した結果を図 4.4と,図 4.5に示す.また,それぞれの,平均値と標準偏差を表

4.2に示す.

– 26 –

4.4 経路制御機能の評価

図 4.4 一つの経路設定に必要な時間

図 4.5 動的ルーティングに必要な時間

– 27 –

4.4 経路制御機能の評価

表 4.2 経路制御測定結果

計測の種類 10回計測した平均 標準偏差

一つの経路を設定 0.009 0.001

動的ルーティング 0.279 0.025

4.4.4 考察

一つの経路を設定する際に掛かる時間は平均 0.009秒であることが分かった.この速度で

あれば,送受信に影響が少なく済むと考えられる.また,動的ルーティングプログラムに掛

かる時間は平均 0.279秒であることが分かった.スイッチの台数が 3台をルーティングする

のにかかる時間はルーティングプロトコルの OSPF などと比較して時間がやや多くかかっ

てしまっていることが分かる.その為,動的ルーティングを行う場合ネットワークの規模が

限られてしまう.しかし,今回想定している仮設ネットワークの規模を考えると対応するこ

とが可能などではないかと考えられる.

処理時間増加の原因は,ダイクストラ法をすべての OpenFlow スイッチに対して行うこ

とや,スイッチの情報やトポロジーの情報などを取得する回数がプログラムの構成上多く

なってしまっていることだと考えられる.そのため,処理速度の向上を行うためには,プロ

グラムの構造をを見直し,OpenFlowスイッチからの情報取得の回数を減らすことで改善で

きると考えられる.

– 28 –

第 5章

おわりに

本研究では,災害時の救助活動に利用できる仮設ネットワーク環境を検討し,実現し

た.この環境により,Raspberry Pi を利用することでネットワーク機器の小型化,また,

OpenFlowを利用しての経路制御が可能である.経路制御機能に関しては,一つの経路を設

定する方式と動的ルーティングを行う方式の二つを提案し,柔軟な経路制御が可能となった.

今後の課題として,動的ルーティングプログラムの処理速度の向上があげられる.処理時

間を向上させるためには,プログラムの構造をを見直し,OpenFlowスイッチからの情報取

得の回数を減らすことで,向上させることができると考えられる.また,今回はダイクスト

ラ法を用いて経路の計算を行ったが,OSPFなどのルーティングプロトコルを使用すること

でも改善されるのではないかと考えれれる.また,小型であるため可搬性があるという点と

ポータブルバッテリーによる動作が行えるという点で Raspberry Piを使用したが,実際に

ポータブルバッテリーを使用して Raspberry Piを作動させた際には,起動と動作の確認の

みしか行っていないため,ポータブルバッテリーによる稼働時間に実用性があるのか検証を

行う必要がある.

– 29 –

謝辞

本研究を進めるにあたり,ご指導を頂きました指導教員であり主査の横山和俊教授に心よ

り感謝致します.また,本研究の副査をお引き受け頂きました情報学群 吉田真一准教授,植

田和憲講師に心より感謝致します.

大学生活において様々なご助言を頂きました,分散処理 OS研究室の先輩の皆様に心より

感謝致します.また,研究に対しての様々な議論にお付き合い頂きました同期の皆様に心よ

り感謝致します.

最後に,様々な側面から今まで私を支えてくださいました家族に心より感謝致します.

– 30 –

参考文献

[1] NTTファシリティーズ総研,”自身によるライフラインの被害の想定と対策,”2013

[2] 多幡早紀,上田紘平,福井良太郎,嶋津恵子,重野寛,“OpenFlow を用いたWeb ア

プリケーションベースの災害時救命情報収集機構の検討,”マルチマディア通信と分散

処理ワークショップ 2015論文集,p9 - 16,2015.

[3] 関野雄人,柴田義孝,内田法彦,白鳥則郎,“OpenFlowをベースとした災害情報ネッ

トワークにおけるリンク切り替え技法の実現に関する研究,”情報研報,Vol.2013-DPS-

154,No.49,pp.1-6,2013.

[4] 菊池瑶介,柴田義孝,“大規模災害を考慮したモバイルクラウド型災害情報共有システ

ム,”2015-DPS-162(30), p1-7, 2015.

[5] Open vSwitch,https://www.openvswitch.org/ ,閲覧日  2017/2/22.

[6] OpenFlow,https://www.opennetworking.org/sdn-resources/openflow,閲覧

日  2017/2/22.

[7] 別役速斗,”OpenFLowを用いた災害時における仮設ネットワーク環境の実現,”高知

工科大学情報学群学位論文,2016.

[8] Ryu SDN Framework,https://osrg.github.io/ryu/,閲覧日  2017/2/22.

– 31 –