...

1 ns3 - 森北出版

by user

on
Category: Documents
52

views

Report

Comments

Transcript

1 ns3 - 森北出版
「ns3 によるネットワークシミュレ
ーション」
サンプルページ
この本の定価・判型などは,以下の URL からご覧いただけます.
http://www.morikita.co.jp/books/mid/085201
※このサンプルページの内容は,初版 1 刷発行時のものです.
i
まえがき
拙著「NS2 によるネットワークシミュレーション」が出版されてからすでに 6 年余
りの年月が経ち,その間に,ネットワーキング環境およびそれを支える技術は目覚まし
い進歩を成し遂げている.QoS/QoE,(Quality of Service/Quality of Experience),
IoT (Internet of Things) ,M2M (Machine to Machine),Green Cloud Computing,
スマートグリッドに代表される次世代ネットワーク基盤技術に関する研究は,現在で
も盛んに行われている.ネットワークシミュレーションはこれらの研究活動を支える
要件として,日々その重要性が多くの研究者に認められている.
ネットワークシミュレータ ns2 (Network Simulator 2) は,米国 DARPA の研究プ
ロジェクト VINT(Visual InterNet Testbed) の研究成果として 1989 年に産声を上げ
てから今日に至るまで,ネットワーク技術研究者の間で絶大の支持を得ながら,成長
し続けてきた.技術の新旧交代が目まぐるしく変化し続けてきたネットワーク技術分
野では,一つのパブリックドメインの研究道具としてこれほど長く愛用され,語り続
けられていることは実に珍しい.
ns2 では,ネットワークシミュレーションを行う基幹部とシナリオ設定部とは完全
に独立した二つソフトウェアとして,前者には計算速度を追求するために C++,後
者には柔軟性の高いスクリプト言語 OTCL を使い分けてきた.それが原因で,大規
模ネットワークシミュレーションや,新しいモジュールを開発する場合,デバッグし
難い問題を最初から抱えていた.さらに,ns2 は有線系ネットワークシミュレーショ
ン用のモジュールを豊富に有するのに対して,無線系ネットワークへのサポートは
相対的に少ない.近年,無線系ネットワーク技術に関する研究は主流となっているた
め,ns2 のこういう弱みが露呈し始めた.もちろん,ns2 に無線系ネットワーク用の
モジュールを自前で開発すればよいが,データリンク層と物理層のモジュール構成を
精通するだけなく,シナリオスクリプトと ns2 コア部のインタフェースである TCL
記述部を理解しなければならない.これは一般のユーザにとっては大変困難ことであ
る.そのうえ,モジュール構成に関するドキュメントはほとんどなく,ソースコード
の記述も Doxygen などのドキュメント生成ツールには対応していないので,オブジェ
クトの依存関係を解析するにはある程度できるが,モジュールの詳細構成を知るには,
ii
まえがき
ユーザは粘り強くソースコードを読んで解析することを強いられる.
そこで,ns2 の後継として現れたのが ns3 である.ns3 は ns2 と同様,主にネット
ワーク研究と教育に利用される離散イベント駆動型ネットワークシミュレータであり,
GNU GPLv2 のライセンスの下で,2006 年から,ns2 の開発に携わっている主要メ
ンバーにより,オープンソースベースで開発されている. ns3 は ns2 での問題を解消
し,新しいプロトコルの実装および,大規模シミュレーション評価をより簡単にする
ために,開発言語とシナリオ記述言語を C++に統一し,並列分散環境の下で大規模
な実験も行えるようになっている.
現在,ns2 における新しいモジュールの実装にともなうバージョンアップが公式的
に停止され,2011 年 11 月にリリースした ns-2.35 が最後の安定バージョンとなって
いる.このような状況の下で,ns3 が脚光を浴び始め,ネットワーク技術の研究者,
特に無線系ネットワーク技術の研究者の間でひそかに人気を集めてきている.
本書は最初に研究室の内部研究資料として学生達の教材として使われてきたが,拙
著「NS2 によるネットワークシミュレーション」出版後の多数の問い合わせが後押し
となり,これからネットワークの研究を本格的に着手しようとする研究者,並びに ns2
に不満を感じながら日々苦戦している方々にささやかな手助けになれるならと思い,
書籍という形にまとめたものである.
本書は以下のように構成されている.
第 1 章は ns3 の開発背景,および,開発環境の整備について紹介する.
第 2 章は ns3 シナリオプログラミングの基本概念を紹介し,ログ機能やトレース
機能,およびコマンドライン処理機能を紹介する.これらの内容を通じて,シナリオ
スクリプトの基本構成を理解し,プログラムの実行方法,基本動作の観測方法を理解
する.
第 3 章では,ns3 でネットワークシミュレーションを行うための基本要件を紹介し,
実環境との対応関係をネットワーク参照モデル用いて,各階層ごとの説明を行う.
第 4 章では,TCP/IP ネットワーキングの基本概念を紹介し,第 5 章から始まる
ネットワーキング実験のための基礎づくりを行う.
第 5 章では,計 10 個の有線系実験課題を用意して,TCP/IP ソケット通信の基本
特性の観測から,TCP 輻輳制御機構の基本原理,ネットワークの測定・評価方法を理
解してもらう.さらに,実験を通じて,TCP/IP ネットワークの固有問題である大域
同期現象問題とロングファットパイプ問題の本質を理解してもらう.
第 6 章では,ワイヤレスネットワーキングの基本概念を紹介して,ns3 で無線系ネッ
トワークシミュレーションを行う際の基本要素について勉強をする.
第 7 章では,第 6 章の内容を踏まえたうえで,ワイヤレスネットワーク関連の基礎
まえがき
iii
実験を行った後,MANET 用ルーティングプロトコルや,無線 LAN メッシュネット
ワーク (802.11s),WiMAX ネットワーク (802.16) 関連の基礎実験を行う.
第 8 章では ns3 上で新しいモジュールを開発するための基本手順を紹介して,具体
的な開発例を用いて説明する.
付録部には,基本的な解析ツールや,ネットワークシミュレーション関連の TIPS
集等を収録している.
本書に使われているすべてのソースコードと実験結果を解析するツールを森北出版
社の Web サイトに公開する.そのパッケージ構成については付録 A を参照されたい.
本書は,インターネットワーキングの基本的な技術要素,および,TCP/IP の基本
概念を理解し,ならびに,UNIX の基本操作,C/C++プログラミングの基本スキル
を有する,ネットワーク技術を勉強する大学 3 年生以上の学部生や,新しいプロト
コルの研究開発に従事する大学院生や,研究者などを対象にしている.また,本書は
「ネットワーク概論」
,
「ネットワーク構成論」など,ネットワーク工学関連授業の副教
材としても利用できる.
ネットワークシミュレーションは,主にデータリンク層からトランスポート層を
ターゲットにしているため,関連する技術が多く, 1 冊の書籍ですべてを完結するこ
とはほぼ不可能である.そのため,本書を真の役に立つ道具にするためには,他の関
連書籍,学術論文,技術資料などを積極的に参考していただく必要がある.
最後に,本書の執筆にあたり,さまざまな実験検証を手伝ってくれた関東学院大学
理工学部大規模並列分散システム研究室の大学院生の皆様,ならびに,本書の出版・
編集にあたり,多大なご尽力をいただいた森北出版株式会社の皆様に厚く御礼申し上
げる.
2013 年 12 月
著 者
iv
目 次
第1章
ns3 の開発環境
1
1.2
ns3 の生い立ち .............................................................................. 1
ns3 と ns2 の比較 ........................................................................... 2
1.3
ns3 開発環境のインストール ............................................................ 4
1.1
第2章
2.1
2.2
2.3
2.4
3.2
コマンドライン処理 ...................................................................... 30
トレース機能 ............................................................................... 34
4.2
4.3
5.2
5.3
5.4
5.5
5.6
38
TCP/IP ネットワーキングの基本
50
TCP/IP の基本概念 ..................................................................... 50
UDP の基本概念 .......................................................................... 62
ネットワーク層の基本概念 ............................................................. 64
第5章
5.1
ns3 ネットワークシミュレーションの基本要件
ネットワークトポロジーの生成 ....................................................... 38
インターネット層の設定 ................................................................ 47
第4章
4.1
18
最初の実験 .................................................................................. 20
ns3 のログ機能 ............................................................................ 25
第3章
3.1
ns3 シナリオプログラミングの基本
TCP/IP ネットワーキング実験
74
実験 1・TCP ソケット通信の基本特性の観測 .................................... 74
実験 2・TCP 輻輳制御メカニズムの観測 .......................................... 82
実験 3・ネットワークスループットの観測方法 .................................. 94
実験 4・フローモニターを利用したセッション別評価 ........................ 102
実験 5・エラーモデルの使い方に関する実験 .................................... 113
実験 6・TCP 大域同期問題に関する検証実験 ................................... 121
目 次
v
5.9
実験 7・キュー管理方式に関する比較実験 ....................................... 133
実験 8・TCP 輻輳回避アルゴリズムとその LFP 問題 ........................ 145
実験 9・IPv6 関連基礎実験 ........................................................... 155
5.10
実験 10・スイッチングネットワーク ............................................. 164
5.7
5.8
第6章
6.1
6.2
7.2
7.3
7.4
7.5
7.6
7.7
176
ワイヤレスネットワーキングの基本 ................................................ 176
ns3 でのワイヤレスネットワークシミュレーションの基本 .................. 184
第7章
7.1
ns3 ワイヤレスネットワーキングの基礎
ワイヤレスネットワーキング実験
196
実験 1・隠れ端末とさらし端末問題の検証 ....................................... 196
実験 2・モバイル端末との通信実験 ................................................ 203
実験 3・モバイル環境の下での TCP の動特性 .................................. 211
実験 4・エネルギー消費モデル関連の基礎実験 ................................. 218
実験 5・MANET 用ルーティングプロトコル ................................... 225
実験 6・無線 LAN メッシュネットワーク関連の基礎実験 ................... 233
実験 7・WiMAX 関連の基礎実験 ................................................... 251
第8章
ns3 でのモジュール開発の概要
272
8.2
ns3 のモジュール構成 .................................................................. 272
開発事例 1・メッシュデバイスの電力消費モデル .............................. 274
8.3
開発事例 2・Round-Robin キューの実装 ......................................... 280
8.1
参考文献
293
付録 A
添付ソースコードについて
295
付録 B
bake で ns3 をインストールする
296
付録 C
ns3 の属性値の型記述子
297
付録 D
フローモニタの XML 形式のトレースファイルの解析
300
付録 E TIPS 集
E.1
E.2
E.3
302
IPv4 ルーティングテーブルを表示する ........................................... 302
デフォルトゲートウェイを設定する ............................................... 303
TCP のバージョンを指定する ....................................................... 304
vi
目 次
E.6
同じトポロジー上で複数の TCP を同時にシミュレーションする ......... 304
Socket より受信したパケットから IP アドレスを表示する ................. 305
受信ノードで受信したトータルバイト数を表示する .......................... 306
E.7
あて先の IP アドレスを指定してフローを生成する ........................... 307
E.4
E.5
さくいん
309
1
CHAPTER
ns3 の開発環境
この章では,ns3 の開発背景を紹介して,ns2 との関係および機能面での
比較を行った後,ns3 の開発環境の整備方法を説明する.
ns3 の開発環境を整備するには,waf を利用する方法と bake を利用する
方法がある.ここでは waf を利用した方法を中心にして,インストールの前
準備から,インストール後の微調整まで紹介する.
bake を利用した方法については,付録 B を参照されたい.
1
1.1
ns3 の生い立ち
Network Simulator 2 (ns2)1) は米国 DARPA の研究プロジェクト (VINT) の研究
成果であり,ローレンスバークレイ研究所 (LBL),Xerox PARC,カリフォルニア大
学バークレイ分校 (UCB),南カリフォルニア大学情報科学研究所 (USC/ISI) などで
開発された.ns2 では,プロトコル等のコアモジュールの実装は C++言語,トポロ
ジー・端末設定など,シミュレーションシナリオを記述する言語として,OTCL スク
リプト言語を利用している.シナリオファイルを ns2 本体に読み込ませると,シミュ
レーションの結果が得られるようになっている.
今まで,ns2 は暗黙の標準テストベッドとしてネットワーク研究者の間で広く利用
されてきた.今日までに,さまざまのモデルの追加により,ns2 自体はますます肥大化
してきているが,次世代ネットワークを研究する道具として利用するにはいくつかの
問題が露呈し始めている.とくに,従来,有線系ネットワークのプロトコルの開発評
価を行うために開発されてきたものなので,無線系ネットワークプロトコルモデルの
少なさ,実装のしにくさ等の面から改善が期待されてきた.しかし,現在,ns2 にお
ける新しいモジュールの実装にともなうバージョンアップが公式的に停止され,2011
年 11 月にリリースした ns 2.35 が最後の安定バージョンとなっている.
1)
ns2 と ns3 の名称については,とくに決まりはないが,近年,国際学会誌などでは,小文字の方
が多いようである.ただ,書籍名や HP のタイトルの場合,大文字も見られる.本書では,遺伝子
名の NS3(human/rat 遺伝子) とは区別するために,意図的に小文字の方を利用する.
2
第 1 章 ns3 の開発環境
Network Simulator 3 (ns3) は ns2 と同じ,離散イベント駆動型ネットワークシミュ
レータとして,2006 年から,ns2 の開発に携わっている主要メンバーにより,オープ
ンソースベースで開発されてきている.ns3 の開発管理チームには,Tom Henderson
主任研究員を筆頭に,副主任研究員として,Sumit Roy (ワシントン大学),George
Riley (ジョージア工科大学),Sally Floyd (カリフォルニア大学バークレイ分校 ISCI
センター) など,インターネットの研究分野において著名な研究者達が名を連ねる.
ns3 では,ns2 のメンテナンスに費やされる莫大な負担を避けるために,ns2 への下
位互換性を放棄し,新しく開発する道を選択した. ns3 の開発は 2006 年 6 月 1 日から
スタートされ,コアコードの大半は Mathieu Lacage の Yans (Yet Another Network
Simulator) ,George Riley の GTNetS (Georgia Tech Network Simulator),と ns2
から移植してきた.Python バインディングと WAF を利用したパッケージ管理部の
開発は Gustavo Carneiro (ポルト大学) より行われてきた.ns3 の最初のリリースは
2008 年 6 月,以降年間 3 リリースのペースで,今日の 3.18 までたどりついたわけで
ある.
ns3 は現在 GSoC (Google Summer of Code)1) 2013 に採録され,現時点で次世代
インターネットにおけるホットな話題を背景にし,興味深いさまざまな研究プロジェ
クトに関するアイディアを募集している.その詳細については,以下のサイトを参照
されたい.
https://www.nsnam.org/wiki/index.php/GSOC2013Projects
1.2
ns3 と ns2 の比較
ns3 は ns2 の問題点を解消し,新しいプロトコルの実装および,大規模シミュレー
ション評価をより簡単にするために,開発言語とシナリオ記述言語を C++に統一し
て,並列分散環境の下で大規模な実験も行えるようにしている.
特筆すべき点は ns3 は新しいネットワークシミュレータであり,単に ns2 の拡張版
「離散イベント駆動型」という概念
ではないことである.ns3 のコア部は ns2 と同じ,
設計を利用しているが,イベントのデータ構造,処理機構などを C++のデザインパ
ターンを適用しているので,まったく別物になってしまった.これにより, ns2 のコ
ア部の API が ns3 では利用できなくなった.
ns2 では,シナリオを記述しやすくするために,OTCL を採用してきたが,コア部
と OTCL 間のインタフェースはモジュール開発の要となっていた.ns3 では C++に
1)
Google が主催するイベントで,Google が指定したフリーソフトウェアやオープンソースのプロ
ジェクトでその夏の間に課題をクリアした数百人の学生に賞金を支払う制度である.
1.2 ns3 と ns2 の比較
3
統一されたため,シナリオとコア部の結合が簡潔明快となり,OTCL 関連のインタ
フェースが削除され,その代わりにヘルパーという概念を取り入れた.
以上の理由で,ns3 では ns2 の API をサポートしなくなっている.ただし,コア部
以外のモジュールを移植する場合,今まで ns2 の特殊な API を利用した部分を ns3 の
方に合わせれば,移植作業は比較的に簡単に行える.
現在,ns2 のモジュールの一部はすでに ns3 に移植されている.今後,VINT プロ
ジェクトでは,ns3 を開発しながら,引き続き ns2 のメンテンスを行い,ns2 から ns3
への統合を検討している.
ns3 は主に以下の五つの分野に焦点を合わせて,研究開発を進めている.
開発分野
新しい特徴
コア
スケーラビリティの強化,モジュール化,リアリズムと抽象化の
クラス設計
集約
外部組み込みソフトウエアの利用,エミュレーション機能,可視
化
ワイヤレス
Wi-Fi モジュール,セルラーモジュール,小型モバイルデバイス
モジュールへの対応
教育
アニメーション機能,教育用スクリプト,コースウェアと教育プ
ロジェクトの統合
保守
機能検証,ドキュメント作成,パッケージ配布,プロジェクトの
維持管理
ネットワークシミュレータとしてサポートする機能について,現時点での ns3 と
ns2 との比較を以下の表に示す.
新しいプラットフォームへの対応については,n3 は 32 ビット,64 ビットマシン
(OS) に対応している.ns2 は 64 ビットマシンに対応していないことが,すでに多く
のユーザの不満を募っている.現時点では有線系において, ns2 の方ではサポートし
ている機能が豊富で,さまざまな技術が成熟しているが,それらの大半も近い将来に
ns3 に移植されるであろう.
近年,ns3 への認知度は年々上がっている.学術文献については, IEEE と ACM
のディジタルライブリを検索してみると, ns3 を利用した研究論文が 400 通以上すで
に収録されている.一方,ネットワーク教育の現場では, ns3 の実世界のデバイスと
の親和性が評価され,世界中にある多数の大学により,補助教材として利用されてい
る.研究道具,および,教育道具として, ns3 は ns2 に完全に取って代わる日もそう
遠くないと思われる.
第 1 章 ns3 の開発環境
4
レイヤ
ns2 の現存機能
ns3 の新機能
Application
ping, vat, telnet, FTP, multicast
FTP, HTTP, トレース駆動型トラ
フィックジェネレータ, webcache
ネイティブ Socket API(既存のアプ
リケーションを ns へ移植し易くな
る),P2P(BitTorrent など)
Transport
TCP(さ ま ざ ま な バ ー ジ ョ ン),
UDP, SCTP, XCP, TFRC, RAP,
RTP, Multicast:PGM, SRM,
RLM, PLM
TCP ス タ ッ ク エ ミ ュ レ ー シ ョ ン
(Linux, BSD), DCCP, HighSpeed
TCP
Netwrok
Unicast: IP, MobileIP, ディスタ
ン ス ベ ク タ ー, リ ン ク ス テ ー ト
型 ル ー テ ィ ン グ プ ロ ト コ ル, IPinIP, ソースルーティング,NixVector, Multicast:SRM, 集 中 型 ル ー
ティング, MANET:AODV, DSR,
DSDV, TORA, IMEP
IPv4, IPv6 完 全 サ ポ ー ト, NAT,
XORP/Click ルーティング:BGP,
OSPF, RIP, IS-IS, PIM-SM,
IGMP/MLD
Data Link
ARP, HDLC, GAF, MPLS, LDP,
Diffserv, Queueing: DropTail,
RED, RIO, WFQ, SRR, SPQ,
REM, PQ, VQ, MACs: CSMA,
802.11b,
802.15.4(WPAN),
Aloha(衛星)
新 802.11 モデル, 各種 802.11 モデ
ル (mesh,QoS), 802.16(WiMAX),
LTE, TDMA, CDMA, GPRS
Physical
2 波 モ デ ル, Shadowing, OmniAntennas, エネルギーモデル, 衛星
リピータ
IEEE 802 物 理 層 デ バ イ ス,
Rayleigh/Rician フェージングチャ
ネル, GSM
1.3
ns3 開発環境のインストール
ns3 パッケージはソースコードの形で提供され, UNIX プラットフォーム上に生成
することができる.Windows ユーザは VMware Player や VirtualBox などの仮想環
境上で Linux をインストールすれば,ns3 の開発環境を構築することができる.また,
ns3 は Cygwin 環境をもサポートしているが,パッケージの構築,およびその後の運
用を考えれば,Linux の方が圧倒的に安定している.
今後,ますます巨大化していくパッケージの管理をしやすくするために,ns3 では,
クロスプラットフォームの分散型バージョン管理システム Mercurial(マーキュリア
ル) を導入し,ユーザサイドと開発サイド間で ns3 の最新バージョンの同期を実現し
ている.
ns3 のシナリオスクリプトは C++言語で記述することができるが, ns-3.2 から
Python 言語への API も提供し始めている.ns3 を使いこなすには,C++言語プロ
176
CHAPTER
ns3 ワイヤレスネットワーキングの基礎
6
6.1
現在では IEEE 802.11 諸規格が整備されており,その技術規格に準拠した
機器で構成されるネットワークのことを一般的にワイヤレスネットワークと
呼ぶ.IEEE 802.11 は時代に合わせて規格の追加や修正が行われており,近
年では主に高速化が進められている.
2013 年夏現在,新世代の IEEE802.11ac 規格 (規格上,最大 3.6 Gbps) は,
1997 年登場の第 1 世代「802.11」(最大 2 Mbps),1999 年の「802.11b」(最大
11 Mbps),2002 年末の「802.11a/g」(最大 54 Mbps),2007 年の「802.11n」
(最大 600 Mbps) より数えて第 5 世代にあたり,業界では 802.11ac を「5G
Wi-Fi(第 5 世代 Wi-Fi)」という呼称を用いてコンシューマー向け機器の開発,
普及推進を図っている.
この章では,ワイヤレスネットワーキングの基本概念を紹介した後, ns3
でワイヤレスネットワークシミュレーションを行う際の基本要件を説明する.
ワイヤレスネットワーキングの基本
ワイヤレスネットワークはその接続形態により以下の二つの通信方式に分類される.
• アドホックモード (Ad hoc mode) IBSS(Independent Basic Service Set) とも呼
ばれ,アクセスポイント (AP,Access Point) を介さずに無線端末 (STA, STAtion)
どうしが直接通信を行う.
• インフラストラクチャモード (Infrastructure mode) AP を使用して STA どうし
が通信を行う.キャンパスネットワークにおいては,インフラストラクチャ
モードによる無線 LAN 通信が一般的である.
ワイヤレスネットワークのインフラストラクチャモードで,一つの AP とその AP
の電波内にいる配下の STA で構成されるネットワークを BSS(Basic Service Set) と
いい,それを識別するための ID を BSSID という.複数の BSS で構成される無線
LAN のネットワークを ESS (Extended Service Set) といい,それを識別するための
ID を ESSID という.各 ID は最大 32 文字までの英数字で設定できる.ESSID はワ
イヤレスネットワークを構成するすべての機器 (AP や STA) に設定する必要がある.
ワイヤレスネットワークでは ESSID が同じものどうしが通信することができる.
ワイヤレスネットワークにおいて通信できる範囲は,AP からの電波が届くところ
までである.この範囲のことをセルと呼ぶ.一つのセルでカバーできる範囲を超えた
広いエリアでの通信を実現するには,セル間のすき間がなくなるように複数の AP を
6.1 ワイヤレスネットワーキングの基本
177
設置する必要がある.複数の AP が同じ周波数の電波を利用すると,互いに干渉して
通信状態が劣化する.複数の AP を近距離に設置するには,干渉を防ぐためにそれぞ
れ異なる周波数を利用するチャネルを設定する必要がある.チャネルとは,情報をや
り取りするための帯域のことである.複数のチャネルを周波数が重ならないように決
めておけば,同時に通信しても異なるチャネルの電波は互いに混信しない.通常は一
つの AP に一つのチャネルが割り当てられる.
6.1.1
ワイヤレスネットワークのアクセス制御機能
ワイヤレスネットワークでは,一つの AP は原則として一つの無線チャネルを使う.
AP が STA と接続するときはそのチャネルを占有するため,同時に接続できる STA
は 1 台だけとなる.しかし,常に 1 台だけとしか接続できないと不便なので,時間に
応じて異なる STA を接続する仕組みを標準で規定している.この仕組みをアクセス
制御機能と呼ぶ.
最も代表的なアクセス制御機能は,CSMA/CA と呼ぶ方式である.CSMA/CA は
Carrier Sense Multiple Access with Collision Avoidance (搬送波感知多重アクセス/
衝突回避方式) の略であり,無線 LAN の通信規格の IEEE802.11a,802.11b,802.11g
の通信手順として採用されているものである.CSMA/CA は CSMA/CD と同様に,
通信開始前に伝送媒体上 (無線 LAN では電波) に,現在通信をしているホストがい
ないかどうかを確認する Carrier Sence(CS),複数のホストが同じ伝送媒体を共有し
て,現在他のホストが通信していない場合は通信を開始する Multiple Access (MA)
制御機構を利用する.そして,Carrier Sence によって通信できる状態と判明しても,
CSMA/CA の場合,衝突を回避するために,さらにランダムな時間だけ待機してか
らデータを送信する.ここが,有線 LAN で使用されている CSMA/CD (搬送波感知
多重アクセス/衝突検出方式) と異なる点である.
CSMA/CD の場合,伝送媒体 (有線) に送信した信号が,他の信号と衝突すると信
号レベルの重ね合わせが発生するので,データの衝突を検出することができる.しか
し,ワイヤレスネットワークでは,送信される信号が非常に弱いので,衝突の検出を
行うことが困難である.衝突を検出する手段がないので,データ送信の衝突確率を小
さくする為に,ランダムな待ち時間 (バックオフ時間,backoff time) を各ホストが待
機してからデータを送信することにより,衝突を回避 (Collision Avoidance) しよう
とするわけである.
178
6.1.2
第 6 章 ns3 ワイヤレスネットワーキングの基礎
IEEE 802.11 規格の基本
ワイヤレスネットワークでは,複数の通信デバイスが無線メディアを共有して通信
を行うため,競合が発生し得る.イーサネットなどのメディア共有する有線ネット
ワークと同様,この場合でも,レイヤ 2 での媒体クセス制御 (MAC: Media Access
Control) プロトコルが必要となる.
ワイヤレスネットワークの性質から,非同期型 MAC プロトコルが望ましい.これ
は,すべてのモバイルデバイスは時間的同期が取れるような集中管理の仕組みは,ワ
イヤレスネットワーク内に存在しないからである.その代わりに,通信チャネルをア
クセスする際に,衝突検出,つまり競合に基づいた分散型制御手法が採用されている.
1990 年に設立された,米国の IEEE (Institute of Electrical and Electronics Engineers) の 802 委員会配下にあるワーキンググループ 11 [8] が,これまでの 7 年間の研
究の成果として,IEEE802.11 という無線 LAN の標準化規格を定めた.
IEEE802.11 規格の対象となるのは,データリンク層の分散制御や集中制御などの
プロトコルに関する MAC レイヤと,データ伝送速度や無線周波数帯域などに関する
物理レイヤである.また各層の管理機能も規定されている (図 6.1).
図 6.1 IEEE802.11 規格の階層構造
MAC レイヤの技術としては,イーサネットで用いられる自律分散制御方法を踏襲
した CSMA/CA と,オプション規定としてのポーリング方式 1) が採用されている.
IEEE802.11 標準規格では,狭い範囲での無線端末どうしが直接通信を行えるアド
ホックモードと,アドホックモードで通信を行う複数のアドホックネットワークをア
クセスポイント,または基地局を介してつなぎ合わせるインフラストラクチャモード
1)
ポーリング方式とは,競合を回避したり,送受信の準備状況を判断したり,通信処理を同期した
りするために,複数の端末に対して順番に定期的に問い合わせを行い,一定の条件を満たした場合
に送受信処理を行う通信方式のことである.
6.1 ワイヤレスネットワーキングの基本
179
を規定している.
IEEE802.11 方式の基本アクセス手順は DCF(Distributed Coordination Function,
自律分散制御機能) と呼ばれており,媒体アクセス方式に CSMA/CA 方式が用いら
れ,アクセスポイントも無線端末も同じ手順でデータ転送を行う.
CSMA/CA 方式の基本動作は,信号送信を試みる SAT と他の STA が送信してい
る信号と衝突させないように,事前に無線チャネルの使用状況を確認 (キャリアセン
ス) し,使用中 (ビジー) であれば待機中 (アイドル) になるまで送信を延期することで
ある.チャネルがアイドル状態かどうかを判定するために,IEEE802.11 ではフレー
ム間隔 (IFS: Inter Frame Space) を規定し,規定された時間以上にわたりチャネルに
信号が検出されない場合にアイドルであると判定する. IFS は固定長で規定されてい
るが,長さを複数定義することで,送信局間の優先権を制御することができる.一方,
ビジー状態であった場合には,チャネルがアイドルになるまで待ち,その後に衝突回
避のためのバックオフ処理を行う.
AP および STA で,送信が待たされる時間のことをバックオフタイムと呼び,
IEEE802.11 では,最小値 CWmin から最大値 CWmax の間で計算された数値を採用
している.ビジー状態が検出され初めての衝突が発生したときに,バックオフタイ
ムを最小値 CWmin を採用する.その後,再送回数が増えるにつれて 2 倍に増加し,
CWmax に達した後は一定値となる.このような IEEE802.11 のバックオフ処理アル
ゴリズムは 2 進指数バックオフアルゴリズムと呼ばれている.
IEEE802.11 を採用したワイヤレスネットワークでは,データを正常に受信した AP
または STA は,受信完了後に SIFS (Short IFS) 時間を待った後に送信元へ ACK
(Acknowledgement) 信号を返す.SIFS は IFS の中でも最も短くなっているため,
ACK 信号は最優先で送信されていることになる.送信元は,データの送信完了後,規
定時間内に ACK 信号が返ってこない場合には,送信に失敗したと判断し,データを
再送する.
6.1.3
ワイヤレスネットワークの隠れ端末問題
STA はデータを送る前に,セル範囲内の他の端末や AP が通信中かどうか調べる.
通信中ならば送信を控えて待機し,通信中の STA がなければ送信を開始する.しかし
設置場所などのせいで STA どうしの電波が届かない状態だと,他の STA が通信中か
どうかを検知できない場合がある.その結果,フレームの衝突が起こる頻度が増えて
スループットが大きく低下してしまう.こうした問題を隠れ端末問題 (HNP,Hidden
Node Problem) と呼ぶ.
この問題は基本的に CSMA/CA が互いに無線信号を検知できることを前提とした
180
第 6 章 ns3 ワイヤレスネットワーキングの基礎
図 6.2 CSMA/CA の隠れ端末問題
制御方式であることに起因する.
図 6.2 に隠れ端末問題の事例を示す.
送信者 A と B の間に障害物があり (または,距離が離れている),A と C,および,
B と C は通信できるが,A と B とは電波が到達せず,通信できない状態にあるとす
る.この場合,A から C へのデータ送信中に,A の存在を検知できない B が通信に
割り込んでくることがありうるので,C においてパケット衝突を起こしてしまう問題
が生じる.この場合,A と B は互いに,相手にとっては隠れ端末となる.
隠れ端末問題を解消するためには,CSMA/CA with RTS/CTS と呼ばれる方式が
CSMA/CA のアルゴリズムに導入されている (図 6.3).
RTS/CTS を使うことでフレームが衝突する頻度を下げられる.隠れ端末となって
いる STA には,他の STA の電波は届かなくても AP の電波は届くことを利用する仕
組みである.前述の例では,A, B どうしでは電波を感知できなくても,C からの電波
は必ず届くことを利用することは,CSMA/CA with RTS/CTS 方式の狙いである.
C と端末 A がデータ送信前にやり取りする制御信号をセル内の他の端末 B が傍受
することで,B からの電波送信を待機させることができる.具体的には,以下の手順
で通信制御を行う.
・ 送信するデータがある A は,まずデータ送信の許可を求める RTS (Request To
Send) と呼ぶ信号を C 宛てに送る.
・ RTS 信号を受信した C は,別の STA と接続していなければデータ送信を許可
する CTS (Clear To Send) と呼ぶ信号を A に返信する.
・ A は,CTS 信号を受信したらデータの送信を開始する. C は,データを正常に
6.1 ワイヤレスネットワーキングの基本
181
図 6.3 CSMA/CA のアルゴリズム
受信できたら ACK 信号を返信する.
・ A の電波が届かない B は,A が C に送った RTS 信号は検知できないが,C が
発信した CTS 信号は検知できる.検知後は,電波の送信を控える「待機期間」
に入る.待機期間の長さは,一般的に CTS 信号で指定される.
・ A の電波が届く範囲に別の STA があった場合,その STA は RTS 信号を受信
した時点で待機期間に入る.その待機期間の長さは RTS 信号から読み取る.A
が連続でデータを送る場合は,C が送る ACK で待機期間の延長を他の STA に
知らせる.
明らかに,従来の CSMA/CA を利用した場合に比べてスループットは低下する.
前述の例では,C と A は本来送受信するデータ以外に,RTS 信号と CTS 信号をやり
取りするための時間が必要になるからである.そのため RTS/CTS は,必要がない限
り利用しないオプションとなっている.
6.1.4
ワイヤレスネットワークのさらし端末問題
端末どうしが互いの信号の到達範囲内にある場合は,それらの端末はさらし状態に
あると表現する.隠れ端末問題では,受信端末における受信データ信号の衝突が問題
であった.一方,さらし端末問題 (ETP, Exposed Terminal Problem) では,ある端
末が隣接する端末のデータ通信を傍受してしまうため,他の端末への送信が抑制さ
れ,結果的にスループットが低下してしまい,通信品質が大きく劣化することが問題
182
第 6 章 ns3 ワイヤレスネットワーキングの基礎
図 6.4 CSMA/CA のさらし端末問題
となる.
図 6.4 にはさらし端末問題の一例を示している.四つの端末 A,B,C,D があり,
B から A,C から D へデータ伝送をしようとしているが,端末 B,C は共用する通信
範囲内にあるため,同時にデータ伝送ができない.B がデータ伝送している間に,C
の伝送開始は CSMA/CA により抑制される.逆も同様である.大規模ワイヤレスセ
ンサネットワークや,メッシュネットワークにおいては,トポロジーの構成上,この
ような問題はさらに深刻となる.
6.1.5
ワイヤレスネットワークにおける TCP の問題
第 5 章の実験 8 で確認したように,帯域遅延積の大きいネットワークにおいて,
TCP は期待される性能が引き出せない.この問題はワイヤレスネットワークにおい
てさらに顕著な問題となる.
ワイヤレスネットワークの場合,有線系ネットワークに比べ RTT が大きくなるの
が一般的である.そして,ワイヤレスネットワークの電波特性,通信距離への依存性
などの固有性質により,パケットの損失は有線系に比べ発生しやすい. TCP でウィ
ンドウ制御をするときに,通信環境の劣化などにより,データパケットの損失だけで
なく,確認応答 (ACK) が失われてしまった場合, データは届いているにもかかわら
ず,送信元から再送することがある.いずれの場合でも,スループットに影響を与え
るウィンドウサイズの下方修正が避けらない.
一般的に,TCP の性能に影響を及ぼすパケットの平均送信率 X(p) は,損失率 p の
√
関数として下記に示す p の法則 (Inverse square-root p law) より表される [24] .
1
3
X(p) =
(6.1)
RT T 2p
ワイヤレスネットワークにおいて,RTT と損失率 p の増大により,RTT の計測頻
度が落ちるので,計測精度が悪くなりがちである.特に,モバイル系ワイヤレスネッ
トワークの場合,RTT が不安定になりやすい.これらのいずれも TCP の輻輳窓サイ
6.1 ワイヤレスネットワーキングの基本
183
ズの調節不足の原因となり,帯域を有効的に利用できない問題を誘発してしまう.
6.1.6
アドホックネットワーク用ルーティングプロトコル
モバイルアドホックネットワーク (MANET: Mobile Ad-hoc NETwork) でのルー
ティングプロトコルは大きく分けて,階層構造ルーティングプロトコル,平面構造
ルーティングプロトコル,地理位置情報利用型ルーティングプロトコルの 3 種類に分
けられる (図 6.5).
平面構造ルーティングプロトコルはさらに,ルーティングテーブルの管理方式によ
り,プロアクティブ型,リアクティブ型,混合型の 3 種類に分類される.
図 6.5 MANET ルーティングプロトコル
プロアクティブ型ルーティング
各ノードがデータ通信する前にルーティングテー
ブルを作成しておく方式である.常に周囲のノードとの間でルーティング可能
か否かの確認を行い,ルーティングテーブルの維持管理を行うので,データ通
信要求時に即時に通信を開始できるのが特徴的である.常時に経路を維持して
いるので,通信タイムアウトや送信データの損失が少ない利点がある反面,隣
接ノードとの確認を行うなどのために,電波発射を頻繁に行うせいで,無線端
末のバッテリーが消耗されやすい問題点がある.データ通信頻度の高いネット
ワークに向いている.
ns3 の中では,DSDV と OLSR が実装されている.
リアクティブ型ルーティング
データ送信する時点で経路を決定する方式である.
必要なときだけ経路を構築するので,ノードへの処理負荷のオーバーヘッドが
少なく,バッテリー消費の面でも有利であるが,マルチホップネットワークに
302
付 録E
TIPS 集
E.1
IPv4 ルーティングテーブルを表示する
IPv4 ルーティングテーブルを表示するには,二つの方法がある.
■アニメーションのメタデータを利用する方法
以下のように,アニメーションインタフェースの EnableIpv4RouteTracking メソッド利
用すれば,ルーティングテーブルを表示することができる.
EnableIpv4RouteTracking の書式:
void ns3::AnimationInterface::EnableIpv4RouteTracking (
std::string fileName, // ルーティングテーブルを保存するファイル名.
Time startTime,
// ルーティングテーブルを記録する開始時刻 .
Time stopTime,
// ルーティングテーブルを記録する終了時刻 .
Time pollInterval
// ルーティングテーブルを記録する時間間隔 .
)
使用例を以下に示す.
#include "ns3/netanim-module.h"
...
AnimationInterface anim (fname1); // Mandatory
anim.EnableIpv4RouteTracking ("routing-table.xml",
Seconds(0), Seconds(5), Seconds(0.25)); //Optional
...
出力例を以下に示す.
<anim ver="netanim-3.103">
<rt t="0" id="0" info="Node: 0 Time: 0s Ipv4ListRouting table
Priority: 0 Protocol: ns3::Ipv4StaticRouting
Destination Gateway
Genmask
Flags Metric Ref Use Iface
127.0.0.0
0.0.0.0
255.0.0.0
U
0
- 0
172.17.1.0 0.0.0.0
255.255.255.0 U
0
- 1
172.16.1.0 0.0.0.0
255.255.255.0 U
0
- 2
172.16.2.0 0.0.0.0
255.255.255.0 U
0
- 3
172.16.3.0 0.0.0.0
255.255.255.0 U
0
- 4
Priority: -10 Protocol: ns3::Ipv4GlobalRouting
Destination Gateway
Genmask
Flags Metric Ref Use Iface
172.17.1.2 172.17.1.2 255.255.255.255 UH - 1
E.2 デフォルトゲートウェイを設定する
172.18.1.2
...
172.17.1.2 255.255.255.255 UH -
-
-
303
1
■ノードオブジェクトから取得する方法
ノードオブジェクトからルーティングテーブルを取得する関数を以下に示す.
1
2
3
4
5
6
7
PrintRoutingTable 関数
void
PrintRoutingTable (Ptr<Node>& n) {
Ptr<Ipv4StaticRouting> routing = 0;
Ipv4StaticRoutingHelper routingHelper;
Ptr<Ipv4>
ipv4 = n->GetObject<Ipv4> ();
uint32_t
nbRoutes = 0;
Ipv4RoutingTableEntry route;
8
routing = routingHelper.GetStaticRouting (ipv4);
nbRoutes = routing->GetNRoutes ();
9
10
11
NS_LOG_UNCOND ("----------------------------");
NS_LOG_UNCOND ("Destination\t" << "Network mask\t" << "Gateway \t" <<
"I/F");
12
13
14
for (uint32_t i = 0; i < nbRoutes; i++) {
route = routing->GetRoute (i);
std::cout << route.GetDestNetwork () << "\t"
<< route.GetDestNetworkMask () << "\t"
<< route.GetGateway () << "\t\t "
<< route.GetInterface () << std::endl;
}
15
16
17
18
19
20
21
22
}
この関数の使用例を以下に示す.
Ptr<Node> router = CreateObject<Node> ();
...
PrintRoutingTable (router);
...
E.2
デフォルトゲートウェイを設定する
たとえば,ノード n のデフォルトゲートウェイを 10.10.1.1 に設定するには,以下のよう
にする.
// n ----- (10.10.1.1) m (10.10.2.1) ----- ...
Ipv4Address gateway ("10.10.1.1");
Ptr<Ipv4StaticRouting> static;
static = staticRouting.GetStaticRouting (n->GetObject<Ipv4> ());
static->SetDefaultRoute(gateway, 1);
SetDefaultRoute の書式を以下に示す.
304
付録 E TIPS 集
SetDefaultRoute の書式:
void ns3::Ipv4StaticRouting::SetDefaultRoute(
Ipv4Address nextHop, // デフォルトゲートウェイのIP アドレス.
uint32_t interface, // 出力インタフェース.
uint32_t metric = 0 // デフォルトゲートウェイまでのメトリック.
)
なお,SetDefaultRoute の第 3 引数 metric については,あるあて先へのパスが複数存在
している場合,それぞれに対するメトリックを指定することができるが,省略することもで
きる.省略した場合,メトリック値は 0 となる.
E.3
TCP のバージョンを指定する
TCP のバージョンについては,デフォルトで TCP NewReno を利用する.変更したい場
合,第 5 章の実験 2 で示したとおり,以下の命令で指定する.ただし,この命令を TCP ソ
ケットが生成される前に指定する必要がある.
Config::SetDefault (
"ns3::TcpL4Protocol::SocketType",
StringValue ("ns3::TcpTahoe")); # ここにTCP のバージョンを指定する
なお,この指定は,すべての TCP フローに反映されることに注意されたい.
E.4
同じトポロジー上で複数の TCP を同時にシミュレーションする
たとえば,第 5 章の実験 7 のトポロジーにおいて,TcpTahoe,TcpReno,TcpNewReno を
同時に実行して,比較検証したい場合,どうすればいいのか?
一般の場合,初期化する段階で以下のメソッドにより, TCP のバージョンを指定すると,
トポロジー上のすべてのノードに同じプロトコルが指定されてしまう.
Config::SetDefault ("ns3::TcpL4Protocol::SocketType",
StringValue ("ns3::TcpNewReno"))
個別ノードに別々の TCP のバージョンを指定したい場合,そのノード上にソケットを生
成する前に以下の方法で指定する必要がある.
TypeId tid = TypeId::LookupByName("ns3::TcpTahoe");
Config::Set("/NodeList/0/$ns3::TcpL4Protocol/SocketType",
TypeIdValue(tid));
ここで,“NodeList/” の後の番号は該当バージョンの TCP を装着するノードの ID で,
ノードが生成された時点で使える番号となる.
MyApp など個別アプリケーションを利用する際,上記設定をした後で,以下のようにソ
ケットを生成すればよい.
Ptr<Socket> socket = Socket::CreateSocket (
n, TcpSocketFactory::GetTypeId ());
E.5 Socket より受信したパケットから IP アドレスを表示する
305
ただし,BulkSendApplication や OnOffApplication などを利用する場合,ソケットは
これらのアプリケーションのヘルパーより隠蔽されてしまっているため,これだけではうま
くいかない.
幸い,BulkSendApplication と OnOffApplication オブジェクトには “Protocol” とい
う属性変数が用意されているので,それを利用すればよい.たとえば,ソースノード (node)
に OnOff 型 TCP Tahoe フローを生成する場合,以下のようにすればよい.
TypeId tid = TypeId::LookupByName("ns3::TcpTahoe");
nid << node->GetId(); #ノードインデックスの取得
std::string nodelist = "/NodeList/" + nid.str()
+ "/$ns3::TcpL4Protocol/SocketType";
Config::Set(nodelist, TypeIdValue(tid));
OnOffHelper tcp ("ns3::TcpSocketFactory", Address ());
tcp.SetAttribute ("Protocol", TypeIdValue(TcpSocketFactory::GetTypeId()));
...
ApplicationContainer source;
source.Add (tcp.Install (node));
source.Start (Seconds (start_time));
source.Stop (Seconds (SIM_STOP));
...
ここで,node のノードインデックスを GetId メソッドで取得している.
後は,通常どおりに cwnd などをこれらのアプリケーションのオブジェクトよりトレース
することができる.
E.5
Socket より受信したパケットから IP アドレスを表示する
Socket はトランスポート層の API であり,通常の場合,デカプセル化処理された後なの
で,Socket より受信したパケットからはその下位層にある IP アドレスの情報を取得するこ
とができない.
そこで,シミュレーションをする際に,Socket より受信したパケットからパケットの送信
側の IP アドレスを表示するには,以下に示す迂回策を講じることができる.
• 受信パケットより送信側の IP アドレスを取得する
Socket のメソッド RecvFrom で送信側のピア情報を取得して,InetSocketAddress クラ
スの ConvertFrom で変換する方法が利用できる.
第 7 章の実験 2 の NetSim クラスの ReceivePacket メソッドにはこの方法の使用例を示
している.
void NetSim::ReceivePacket (Ptr<Socket> socket)
{
Ptr<Packet> packet;
Address from;
while ((packet = socket->RecvFrom (from))) {
if (packet->GetSize () > 0) {
著 者 略 歴
銭 飛(せん・ひ)
1991 年
2000 年
2004 年
2013 年
千葉大学大学院自然科学研究科生産工学専攻 博士課程修了(Ph.D)
広島国際学院大学工学部教授
関東学院大学工学部教授
関東学院大学理工学部教授
現在に至る
関連著書
NS2 によるネットワークシミュレーション,森北出版(2006 年)
編集担当 塚田真弓(森北出版)
編集責任 富井 晃(森北出版)
組 版 アベリー
印 刷 ワコープラネット
製 本 協栄製本
ns3 によるネットワークシミュレーション
2014 年 1 月 30 日 第 1 版第 1 刷発行
© 銭 飛 2014
【本書の無断転載を禁ず】
著 者 銭 飛
発 行 者 森北博巳
発 行 所 森北出版株式会社
東京都千代田区富士見 1-4-11(〒 102-0071)
電話 03-3265-8341 / FAX 03-3264-8709
http://www.morikita.co.jp/
日本書籍出版協会・自然科学書協会 会員
<(社)出版者著作権管理機構 委託出版物>
落丁・乱丁本はお取替えいたします.
Printed in Japan / ISBN978-4-627-85201-3
Fly UP