「ns2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき...
TRANSCRIPT
「NS2 による
ネットワークシミュレーション」
サンプルページ
この本の定価・判型などは,以下の URL からご覧いただけます.
http://www.morikita.co.jp/books/mid/084621
※このサンプルページの内容は,初版 1 刷発行当時のものです.
main : 2006/10/18(12:37): 3校
i
まえがき
ネットワークシミュレーション (Network Simulation)はネットワーク技術を研究する基本的な方法の一つである.新しいプロトコルの開発,評価を行う際に,シミュレーションを行うことは欠かせない.現在,次世代インターネット向けに,数多くの新しいネットワークプロトコル,制御方式が提案されている.次世代インターネットのキーテクノロジーの一つとされている QoS (Quality of Service)制御の分野において,TCPの輻輳制御方式の改善や,高速ネットワークリンク用の新しいセッション制御方式の開発,QoSルーティング方式の開発,特に,ユビキタスコンピューティングの基盤である無線ネットワークでの QoS
制御方式の開発など,研究活動は世界範囲で活発に行われている.ネットワークシミュレーションはこれらの研究活動を支える要件として,日々その重要性が多くの研究者に認められている.ネットワークシミュレーションを行う場合,ネットワークのレイヤー構成に従い自前で
特殊なシミュレータを構築する方法と,既成の汎用シミュレータを利用する方法が選択できる.明らかに,後者の方は開発周期を短縮することができ,共通した評価基準を持つ意味で有望である.ネットワークシミュレータもさまざまなものがあるが,現在,その中で最も有名なのは,
恐らく OPNETと NSであろう.OPNETはMITにより開発されたもので,簡易な GUI
によりあらゆるネットワークの評価を高精度に実現するシミュレーションソフトとして名が知られている一方,大変高価なソフトとしても一般に知られている.これは製品開発に裕福な資金力をもつ大企業ならまったく問題視されないが,一般の研究者,または,ネットワーク技術を学ぼうとする学生諸君にとっては,まさに高嶺の花である.一方,NS (Network Simulator) は米国 DARPA の研究プロジェクト VINT (Visual
InterNet Testbed) の研究成果の一つであり,ネットワーク研究者に統一したシミュレーション環境を提供し,インターネットの新しい技術の研究開発を促進する目的で開発された完全無料のパブリックドメインの産物である.現在,NSはバージョン 2で開発が進められ,NS2と呼ばれるようになり,そのソースコードなどがネットワーク上ですべて公開されている.機能面では,OPNET のようにネットワークの階層モデルを忠実に再現することを放棄することにより,ネットワーク層,トランスポート層,および無線系ネットワークのシミュレーションが比較的簡単にできるようになっている.現在,NS2はネットワーク技術を研究するための基本ツールとして,世界中に多くの研究
者に認知されている.TCPの輻輳制御方式,QoS制御方式,無線通信ネットワーク,センサーネットワーク,マルチエージェントシステムなどに関連する研究論文のほとんどはNS2
を用いて実験検証が行われている.さらに,ネットワーク関連の教育の補助ツールとして,欧米をはじめ,世界の一部の国の大学,教育研究機構で利用されるようになっている.しかしながら,システムの煩雑さや,使い方に関するドキュメントの少なさで,初心者
main : 2006/10/18(12:37): 3校
ii まえがき
にとっては,NS2を完全にマスターすることは大変難しいこととなっている.NS2にはマニュアルらしきものは付いているが,内容は陳腐で新しいバージョンを反映しておらず,構成も非常に粗末である.NS2に関する紹介はネットワーク関連の英文書籍からも片鱗しか見えない.著者も以前は OPNETのお世話になってきたが,研究予算上の理由で,リッチな生活を
放棄せざるを得なくなり,自由奔放なプアな環境を求め始めていた.また,学生にネットワーク関連の講義を行う際に,いつも,インターネットの中身をある程度直感的に示せる手っ取り早いツールがあればと痛感していた.学生のために実験指導書を書いたことが,本書を著すきっかけとなった.本書の構成は以下のとおりである.第 1章は NS2でシミュレーションシナリオを記述するために利用される Tcl/OTcl の基
本概念,シミュレーションスクリプトの基本スタイル,および NS2でネットワークシミュレーションを行うときの基本操作を紹介している.第 2章では計 10項目の実験を交えて,TCP輻輳制御,キューマネジメント方式,公平性指標などの基本概念を紹介して,シミュレーションの基本を理解することを目的としている.そして,これらの実験をクリアすることにより,TCP輻輳制御の詳細を学び,その問題点を理解する.第 3章では,NS2上で独自のモジュールを実装するために,NS2の内部構成,モジュール開発の基本手法を紹介している.主に,新しいキューの作成や,トランスポート層とアプリケーション層の連携に重点を置き,開発実験を行う.第 4章では,QoSトラフィック制御の基本概念を紹介して,サービスレートの管理とスケジューリングの基本実験,トラフィック調整の実験,Diffsev/Intserv
関連の実験を行う.これにより,QoS制御の内部構造まで覗き,理解してもらう.第 5章ではルーティング関連の実験と新しいルーティングアルゴリズムの開発方法を紹介している.本書に使われているすべてのソースコードと実験結果を解析するツールを森北出版社の
Webサイト (http://www.morikita.co.jp/soft/84621/)に公開する.本書は,大学 3年生以上,TCP/IPの基本概念を理解して,C/C++プログラミングの基
本スキルを有するネットワーク層以上のプロトコルを勉強する学生や,新しいプロトコルの研究開発に従事する大学院生や研究者などを対象にしている.また,本書はネットワーク関連授業の副教材としても利用できる.最後に,本書の作成に当たり様々な助言をいただいた広島国際学院大学の鵜根弘行先生,
様々な実験検証を手伝ってくれた研究室の大学院生の棟方雅之氏,ならびに,本書の出版・編集に当たり,多大なご尽力をいただいた森北出版の皆様に厚く御礼申し上げる.
2006年 9月著者
main : 2006/10/11(15:52): 3校
iii
目 次
第 1章 シミュレーション記述言語とその基本スタイル 1
1.1 Tcl/OTclプログラミングの基本 . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 NS2シミュレーションの基本 . . . . . . . . . . . . . . . . . . . . . . . . . 27
第 2章 TCP関連実験 34
2.1 TCP/IPの基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2 実験 1・Simple TCP Simulation . . . . . . . . . . . . . . . . . . . . . . . 46
2.3 実験 2・Queue Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4 実験 3・Slow Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.5 実験 4・Exponential Traffic generators . . . . . . . . . . . . . . . . . . . 61
2.6 実験 5・Noise Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.7 実験 6・Multi-Sources Connection . . . . . . . . . . . . . . . . . . . . . 71
2.8 実験 7・Short TCP Connection . . . . . . . . . . . . . . . . . . . . . . . 76
2.9 実験 8・Global TCP Synchronization . . . . . . . . . . . . . . . . . . . . 85
2.10 実験 9・Random Early Detection . . . . . . . . . . . . . . . . . . . . . . 89
2.11 実験 10・Fairness index . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
第 3章 新しいモジュールの開発 112
3.1 NSの内部世界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2 OTclと C++の連結 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.3 SimpleEcho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
3.4 myfifo・新しいキューの作成 1 . . . . . . . . . . . . . . . . . . . . . . . . 144
3.5 VirtualQueue・新しいキューの作成 2 . . . . . . . . . . . . . . . . . . . . 151
3.6 新しいアプリケーションの作成 . . . . . . . . . . . . . . . . . . . . . . . . 159
第 4章 QoSトラフィック制御 180
4.1 サービスレートの管理とトラフィックスケジューリング . . . . . . . . . . . 180
4.2 トラフィック調整 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
main : 2006/10/11(15:52): 3校
iv 目 次
4.3 RED/RIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
4.4 DiffServ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
4.5 IntServ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
第 5章 ルーティングとルーティングアルゴリズムの開発 253
5.1 NS2でのルーティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
5.2 ルーティングエージェントのフレームワーク . . . . . . . . . . . . . . . . . 262
付録 NS2の環境整備と実験用ソースコード 277
1. NS2のインストールと実験パッケージの設定 . . . . . . . . . . . . . . . . 277
2. 解析用ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
3. SimpleRipの実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
参考文献 294
さくいん 295
main : 2006/10/11(15:52): 3校
1.2 NS2シミュレーションの基本 27
一方,第 9 行~13 行では子クラス Child とそのコンストラクタの定義を与えている.子クラスのコンストラクタ中で,
eval $self next "Hello, $args"
を利用して,親クラスの同名メソッド,つまり,親クラスコンストラクタを引数付で呼び出している.第 15 行では子クラスのオブジェクトを生成している.このスクリプトを vi などのエディターで作成して,以下のように実行する.表示した結果により,子クラスのインストラクタ,親クラスのインストラクタの順で実行されている様子が確認できる.% otclsh classtest.tclChild: my args is "This is a test"Parents: received a greeting message from child
"Hello, This is a test"
OTclではこのように,コンストラクタだけではなく,親クラスの同名メソッドを呼び出
す際に eval $self nextを利用すればよい.
プログラミング課題
上記のプログラムを拡張して,孫クラス Grandchildを追加して,コンストラクタで
のメッセージの受け渡しを確認せよ.
1.2 NS2シミュレーションの基本
ここで,NS2の基本的な使い方を紹介する.各命令の詳細については,後述の各章で解
説する,または付録を参照されたい.
1.2.1 NS2シミュレーションスクリプトの基本スタイル
まず,NS2で Hello World!をしてみよう.NS2には二つの実行モードがあり,それぞれ,
インタラクティブモードとバッチモードと呼ばれている.
インタラクティブモードでは,NSのプロンプトの下で,命令を一つずつ入力しながら実行
していく.インタラクティブモードで Hello World!を以下のように実行することができる.
Host% ns% set ns [ new Simulator ]_o4% $ns at 1 "puts \"Hello NS2’s World!\""1% $ns at 1.5 "exit"2% $ns runHello NS2’s World!Host%
一方,バッチモードとはOTclの命令をまとめて一つのプログラムに編集しておいて,後
でまとめて実行するモードである.インタラクティブモードに比べ,プログラム単位で実行
main : 2006/10/11(15:52): 3校
28 第 1章 シミュレーション記述言語とその基本スタイル
することができるので,大規模シミュレーションを行うときに便利である.バッチモードで
Hello World!を実行するプログラム Hello.tcl は以下のとおりである.
Hello.tcl:set ns [ new Simulator ]$ns at 1 "puts \"Hello NS2’s World!\""$ns at 1.5 "exit"$ns run
このプログラムを以下のように実行する.Host% ns Hello.tclHello NS2’s World!Host%
OTclを用いて NS2でシミュレーションのシナリオスクリプト (これから単にシナリオと
略す)を作成する際に,以下のような基本スタイルが一般的に利用されている.
・ Simulatorクラスのオブジェクトの生成.
・ ネットワークトポロジーの定義.
・ トラフィックエージェントとアプリケーションの定義.
・ トレース内容の定義
・ 後処理部 (finishプロシージャ)の定義.
・ シミュレーションの開始
具体的には,図 1.1のようになる.
図 1.1 NS2シミュレーションプログラムの基本スタイル
1.2.2 ネットワークトポロジーの生成
シナリオを作成するときに,ネットワークのトポロジーを生成しておく必要がある.NS2
ではネットワークのトポロジーがノードとリンクの集合で定義される.
OTclスクリプトでトポロジーをセットアップする前に,以下の命令で新しい Simulator
main : 2006/10/11(15:52): 3校
1.2 NS2シミュレーションの基本 29
のオブジェクトを作っておく必要がある.
set ns [ new Simulator ]
Simulatorはクラスであり,そのメンバ関数を利用すれば,ノードやリンクなどを生成す
ることができる.nsは Simulatorのオブジェクトハンドラ (instance)である.
■ ノードの作成 ネットワークノードのオブジェクトは以下のように作ることができる.
set n0 [$ns node]set n1 [$ns node]
nodeはクラス Simulatorのメンバ関数である.上記の命令は二つのノードを作成し,
各ノードのハンドラをそれぞれ n0, n1にしている.
■ リンクの作成 二つのノード n0,n1間のリンクを以下のように作成する.
$ns duplex-link $n0 $n1 10Mb 10ms DropTail
ここで,duplex-link が全二重リンク (双方向) を意味している.全二重方式の他
に,simplex-linkを指定することにより,半二重リンクの指定もできる.10Mbはリ
ンクの帯域幅,10msはリンク遅延である.DropTailはリンクキューの制御方式で,
この場合,「キューが満杯になったとき,最後に到着したパケットを捨てる」という
方式を指定している.
リンク属性を指定する際に,キューの長さ (Queue),遅延値 (Delay),TTL値の
指定もできる.たとえば,リンクのキューの長さを 20パケットに指定する場合,以
下のようにすればよい.
$ns queue-limit $n0 $n1 20
1.2.3 トラフィックエージェントとアプリケーションの定義
トラフィックエージェントとアプリケーションの定義部では,トラフィックのソース (トラ
フィックの始端),シンク (トラフィックの終端)の属性,たとえばTCP,UDP, FTP, TCPSink
などを指定する.
■ ノード n0からノード n4への TCPトラフィックを指定するときに,以下のように,ま
ず,エージェントタイプ (フロータイプ)を指定してノードに付け加える.次にフロー
エージェントを接続する必要がある.
set tcp [ new Agent/TCP ] ;# TCP オブジェクトの生成$ns attach-agent $n0 $tcp ;# n0 に属性付けをする
main : 2006/10/11(15:52): 3校
112
CHAPTER
3
新しいモジュールの開発 NS2 の既成モジュールを利用して TCP などの基本プロトコルの検証はできるが,NS2のトレース機能で提供していない一部の特別の変数のトレースや,新しいプロトコル,アルゴリズムなどを開発する場合,NS2における独自のモジュールの作成方法を知っておく必要がある.本章からは,NS2の内部へ少し踏み入れ,NS2の基本モデルを勉強した後,独自モジュールの開発実験を行う.
3.1 NSの内部世界
今までの実験でわかってきたように,NS2を利用してネットワークシミュレーションを
行う場合,以下の基本事項を理解しなければならない.次項より順に説明する.
・ NS2のレイヤー構成 (layer structure)
・離散型イベントスケジューラ (discrete event scheduler)
・ネットワークトポロジー (network topology)
・ルーティング (routing)
・トランスポート (transport)
・アプリケーション (application)
・パケットフロー (packet flow)
・パケットフォーマット (packet format)
3.1.1 NS2のレイヤー構成
NS2ではネットワークモデルのレイヤー構成に関する厳密的な定義がないようであるが,
新しいエージェントやアプリケーションを開発するときに,意識する必要がある.
OSI参照モデルと TCPに比較して,NS2のネットワークモデルおおまかな階層分けを
図 3.1に示す.
NS2のネットワークモデルはシナリオスクリプトの書き順に沿って考えればよい.図 3.1
に示すように,NS2の場合,下からノード・リンク層,エージェント層,アプリケーショ
ン層の 3層構造になっている.
main : 2006/10/11(15:52): 3校
3.1 NSの内部世界 113
ノード・リンク層は OSI のデータリンク層以下の 2 層に対応される.OPNET のよう
なプロセスモデルがないため,この層の新しいモジュールを開発するためには,既存のモ
ジュールから継承するか,改めて自分で定義しなければならない.ノードモデルには上位層
を識別するためのポート分類機構,と自分のアドレス (ノード ID)を識別するためのアドレ
ス分類機構を持っている.
エージェント層は OSIのトランスポート層とネットワーク層の機能を果たす.この層の
プロトコルをノードリンク層に関連付けを行う場合,シナリオスクリプトで該当するオブ
ジェクトを下位層のノードオブジェクトに attach-agentで装着する必要がある.
アプリケーション層では,FTP,CBR,Telenet,HTTPなど,さまざまなフロータイ
プを定義しており,利用する際に,該当する下層プロトコルに attach-agentで装着する必
要がある.新しいアプリケーションを開発する場合,アプリケーション層とエージェント層
とのインターフェースを理解する必要がある.
図 3.1 NS2のレイヤー構成
3.1.2 離散型イベントスケジューラ
NS2はイベント駆動型ネットワークシミュレータである.離散型イベントスケジューラ
はシミュレーションを行う際に,特別な実行結果のトレースや,アプリケーションの開始時
間,終了時間を制御するためのもので,その内部構成の一例を図 3.2に示す.
NS2ではリアルタイム型と非リアルタイム型イベントスケジューラを提供している.非
リアルタイム型イベント処理を行うために,論理上で等価する 3種類 (list, heap, calendar)
のスケジューラが用意されている. calendarスケジューラはデフォルトである.リアルタ
イム型イベントスケジューラは現在開発中で,将来,実際のネットワーク状態をエミュレー
ションするために使われる予定である.
イベントスケジューラを選択するには以下のようにする.
…set ns [new Simulator]$ns use-scheduler Heap
…
main : 2006/10/11(15:52): 3校
114 第 3章 新しいモジュールの開発
図 3.2 離散型イベントスケジューラ
NS2のイベントスケジューラの中で最もよく使われているのは,アプリケーションの開
始・終了時刻の管理である.イベントスケジューラのオブジェクトにはスケジューリング関
数を持っている.指定した時刻 timeで,あるイベント”string”を生成したいときに,
footnotesize
at time "string"
のようにすればよい.このように生成されたイベントは AtEventと呼ばれる.AtEventは
Eventの子クラスであり,親から継承したものの他に,与えられた”string”を保持するため
の変数を追加定義している.イベントスケジューラの中でAtEventは標準の Eventクラス
と同じように扱われている.
シミュレーションを開始した後,イベントの生起時刻になると,AtEvent がすべての
AtEventを処理する AtEvent handlerに転送され,イベント”string”により指定された命
令を処理する.以下は実際の使用例である.
使用例…
set ns [new Simulator]$ns use-scheduler Heap$ns at 100.1 "exec_my_proc"
…
proc exec_my_proc { } {
…
}
この例の中で,at 100.1 ”exec my proc”は Simulatorのオブジェクト (set ns [new Sim-
ulator])のメンバ関数の一つに過ぎない.一般によく利用されるメンバ関数を以下のとおり
main : 2006/10/11(15:52): 3校
3.1 NSの内部世界 115
である.Simulator instproc now スケジューラの現在時刻を返すSimulator instproc at args 指定した時刻に指定した命令を実行するSimulator instproc at-now args 指定した命令をすぐ実行するSimulator instproc after n args 指定した命令を n 秒数後に実行開始するSimulator instproc run args スケジューラを開始するSimulator instproc halt スケジューラを停止 (一時停止) する
3.1.3 ネットワークトポロジーの構成要素
ここでは NS2のネットワークトポロジーの主な構成要素を紹介する.
図 3.3には NS2の OTclのコンポーネント木を示している.
図 3.3 NS2のクラスの階層構造
NS2の OTclのコンポーネント木の階層構造は TCLObjectクラスから始まり,ネット
ワークの構成要素のオブジェクトのライブラリで構成されている.TCLObjectクラスの継
承クラスとして,NsObjectは他のすべてのネットワーク基本構成要素 (nodeや linkなど)
の親クラスになる.
NsObjectは出力するデータのパス本数により,二つのサブクラスConnectorとClassifier
に分かれる.Connectorクラスは出力データパスが 1本しかないネットワークの基本オブ
ジェクトの親クラスであり,スイッチオブジェクトのような複数の出力データパスを有する
オブジェクトは Classifierクラスの管轄下におかれている.
■ノード (node) node は複合オブジェクト (compound object) であり,ノードへの
入り口 (node entry)オブジェクトと分類機構 (classifier) を持っている.NS2には 2種類
のノードモデルを持っており,それぞれユニキャスト (unicast) ノードとマルチキャスト
(malticast)ノードと呼ぶ (図 3.4).
ユニキャストノードには一つのアドレス分類機構 (address classifier) と一つのポート分
類機構 (port classifier) を持っている.マルチキャストノードにはこれらに加え,もう一つ
main : 2006/10/11(15:52): 3校
180
CHAPTER
4
QoSトラフィック制御 QoS(Quality of Service,サービス品質)に関する研究は 1980年代初期まで遡る.QoSとは,ネットワーク上で,ある特定のフローのための帯域を予約し,一定の通信速度,またはレスポンスタイムを確実に保証する技術である.本章では,まず,QoSの基本要件であるサービスレート管理とトラフィックスケジューリング,フロー調整,および,バッファーの管理技術を詳解して,関連する実験を行う.次に,QoS技術の代表格であるDiffServと IntServの基本概念を勉強して,内部構造を理解するための基本実験を行う.
4.1 サービスレートの管理とトラフィックスケジューリング
複数の入力フローを 1本の出力リンクで送出するルータ,またはゲートウェイの場合,出
力リンク上で各時刻において 1個のパケットしか処理できないので,入力フローをキュー
に待機させる必要がある.そして,キューから各フローのパケットを一定の順番で取り出
すアルゴリズムが必要である.このアルゴリズムをスケジューリングアルゴリズム (または
キューイングアルゴリズム)と呼ぶ.
QoS制御を考える場合,スケジューリングアルゴリズムは各フローのサービスレートに
合わせて送出パケットを多重化1)して,順次出力リンクに乗せていく必要がある.
インターネット上で利用される代表的なスケジューリングアルゴリズムとして,FIFO
(First In First Out),RR (Round Robin scheduling),PRI (Priority scheduling),CBQ
(Class Based Queuing),WFQ (Weight Fair Queuing)などがある.
キュー内で処理待ちのパケットのことを通常バックログ (backlog)と呼ぶ.
すべての入力フローに十分なバックログが存在する場合に,そのフローに割り当てられ
た出力レートを通常サービスレートと呼ぶ.
本節では,これらのスケジューリングアルゴリズム方式について考える.
1)多重化:送出する複数のパケットを時間的に 1 列のパケット列に整形することである.時間軸を分割して,分割された時間間隔をタイムスロット (Time Slot) と呼ぶ.各タイムスロットで 1 個のパケットのデータを送出することである.
main : 2006/10/11(15:52): 3校
4.1 サービスレートの管理とトラフィックスケジューリング 181
4.1.1 FIFO (First In First Out)
FIFOの場合,フローの到着順に従い出力リンクに出力するので,各フローの出力レート
はその入力レートに比例することになり,サービスレートは入力レートに比例した値のな
る2).到着順に従い送出されるので,先着のサイズの大きいフローに対して優先的にサービ
スする,いわゆるアンフェアネス性を持つ.
NS2では FIFOキューとして,DropTailを提供している.
4.1.2 RR (Round Robin Scheduling)
RRでは,到着フローを順繰りにサービスを割り当て送出する.フォロー数 n,1回で送
出するパケットのサイズが一定長で,sj (j = 1, · · · , n)とした場合,サービスレート ρj は
パケットサイズに比例して,
ρj =sj
n∑j=1
sj
, for j = 1, 2, · · · , n (4.1)
になる.
たとえば,出力の帯域幅 100 Kbps,パケットサイズがそれぞれ 64 byteと 2000 byteの
2種類のフローに対してサービスを行う場合,それぞれのサービスレートは 3.1 Kと 96.9
Kとなる.
一方,パケットサイズが可変長の場合,以下のような不足ラウンドロビン (dRR:dificit
Round Robin)スケジューリングアルゴリズムがある.
dRRでは,各フロー jにそれぞれ不足カウンタ counterj を設け,順繰りで送出する順番
が jに廻ってきたとき,送出できるデータの長さを counterj 以下になるようにする.具体
的には,以下の手順でスケジューリングを行う.
dificit Round Robin Scheduling:
(ⅰ) フロー j (j = 1, 2, · · · , n) に対して,counterj の初期値を counterj(0) = ρjs̄ にする.ここで,s̄は 1ラウンドあたりで送出されるパケット平均サイズである.
(ⅱ) RR法で各フローに対して以下の (ⅲ),(ⅳ)を実行する.(ⅲ) ラウンド tにおいて,フロー jのデータを送出する場合,合計サイズが counterj(t)
以下になるように,できるだけ送出する.sj(t) ≤ ounterj(t)の場合,送出後,
counterj(t) = counterj(t)− sj(t) (4.2)
にする.(ⅳ) 次のラウンドのために,不足カウンタを以下のように修正する.
counterj(t + 1) = counterj(t) + ρjs̄ (4.3)
このアルゴリズムからわかるように,dRRでは,フロー jに対して,各ラウンドにおい
2)これはバックログ存在し,スケジューラが常に稼動していることを前提にしている.
main : 2006/10/11(15:52): 3校
182 第 4章 QoSトラフィック制御
て平均的に ρjs̄分のデータを送出する.実際のパケットサイズが ρj s̄の整数倍でなくても,
不足分 (送り残した分)が次のラウンドに持ち越せるようになっている.
図 4.1に dRRの例を示している.この例では,二つのフローのサービスレートをそれぞ
れ ρ1 = 0.6,ρ2 = 0.4,平均パケットサイズを 200 byte,各フローのパケットサイズをそ
れぞれ s1 = 56 byte,s2 = 128 byteとしている.
t1 t2 t3 t4 t5 t6 t7 t8
Round1 Round2 Round3 Round4
flow1
flow2
120 128 136 144 152
80 160 112 192 144
56byte 128byte ρ1
= 0.6, ρ2
= 0.4, mean pkt size = 200byte
t1 t2 t3 t4 t5 t6 t7 t8
Round1 Round2 Round3 Round4
flow1
flow2
120 128 136 144 152
80 160 112 192 144
t1 t2 t3 t4 t5 t6 t7 t8
Round1 Round2 Round3 Round4
flow1
flow2
120 128 136 144 152
80 160 112 192 144
56byte 128byte ρ1
= 0.6, ρ2
= 0.4, mean pkt size = 200byte56byte 128byte56byte 128byte ρ1
= 0.6, ρ2
= 0.4, mean pkt size = 200byte
図 4.1 不足ラウンドロビンの例図の中の数値はその時刻での各フローの不足カウンタの値である.
NS2では dRRを提供している.dRRを利用する際に以下のパラメータが指定できる.
buckets : キューに通すことを許可されるフローの数 (nのこと).
blimit : キューバッファ全体の最大サイズ (バイト).NS2の dRRではすべてのフロー
が同じバッファーを共有する.
quantum : 各ラウンドで各フローが送信できるバイト数 (s̄ のこと).
mask : 1 に設定した場合,あるフローが同じノード ID を持つパケットだけ (ポート
IDが異なっても構わない)で構成さていることを示す.0に設定した場合,あるフ
ローが同じノード IDとポート IDを持つパケットだけで構成さていることを示す.
dRRの実験シナリオスクリプト例を以下に示す.
ソースコード:simple-dRR.tcl1 # n2(UDP,CBRx3, interval:20ms,4ms,2.5ms)2 # \3 # \10M4 # n0 --------------------------------------- n1(Null:lm0)5 # / (1M, dRR: blimit=25000, quantum=500,buckets 7)6 # / 10M7 # n3(UDP, CBRx3, interval:2.5ms,4ms,20ms)8
9 set ns [new Simulator]10
11 set n0 [$ns node]12 set n1 [$ns node]13 set n2 [$ns node]14 set n3 [$ns node]15
16 set tf [open drr-out.tr w]17 #$ns trace-all $tf18
19 $ns duplex-link $n0 $n1 1.0Mb 0.01ms DRR
main : 2006/10/11(15:52): 3校
295
さくいん
英・数
3 way ハンドシェーク 239
PT CONFIRM 240
PT REPLY 239
PT REQUEST 239
PT TEARDOWN 240
AQM 85
CBQ を利用する 185
bind 187
new CBQClass 185
insert 187
install-queue 186
setparams 185
リンク共有木の構築 185
CBR 47
Classifier 115
DiffServ QoS サービス確実転送型 (AF) 210
急行転送型 (EF) 210
DiffServe QoS サービス 208
DiffServ コードポイント 209
DiffServ ドメイン (DS ドメイン) 209
DSCP 209
dsRED/core キュー 216
dsRED/edge キュー 216
DS 動作集合 210
duplex-intserv-link 244
ECN 94
elephants 78
fairness index 100
fast retransmit 40
getAverage 218
implicit ACK 法 40
InteServ QoS サービス 236
Guaranted Service 236
Controlled Load Services 236
負荷制御型 IntServ 236
保証型 IntServ 236
IntServ のサービス仕様 236
IntServ 拡張リンク 240
IP 44
TOS 45
サービスタイプ 45
識別子 45
生存時間 46
バージョン 44
パケット長 45
ヘッダ長 45
mice 78
PDU 44
PHB 210
PHB コードポイントの定義 217
addPHBEntry 217
printPHBEntry 218
printStats 218
PQM 85
RED 90
RED のパケット破棄 91
RED のパラメータ 93
RED の輻輳検出 91
RED の平均キューサイズ 92
repeated ACK 40
RIO 199
ttach-tagger 206
IN パケット 200
maketbtagger 206
OUT パケット 200
set priority method 200
set-flowrate 207
トークンタガー 206
プライオリティマーキング法 200
RSVP 236
RTT 38, 40
sched-stop 245
SimpleIntServ 244
trace-sig 249
trace-util 249
TCP 35
3 way ハンドシェイク 37
main : 2006/10/11(15:52): 3校
296 さくいん
あて先のポート番号 36
ウィンドウサイズ 37
確認応答番号 36
コネクション 37
シーケンス番号 36
スライディングウィンドウ制御方式39
制御フラグ 36
接続 37
送信元のポート番号 35
ヘッダ構成 35
ヘッダ長 36
tspec 196
TSW (Time sliding Window) 211
UDP 42
あて先ポート番号 43
送信元ポート番号 43
チェックサム 43
データグラムのサイズ 43
和 文
アクティブキューマネジメント,AQM 85
一様分布乱数 72
イベントスケジューラ 113
インタプリタクラス 130
ウィンドウの閾値 41
受付けアルゴリズム 242
ACTO 243
ACTP 242
Hoeffding bounds, HB 242
Measured Sum,MS 242
計測合計アルゴリズム 242
始点受理域接線法 243
ピーク受理域接線法 242
受付制御機構のパラメータ 245
受付制御モジュール 242
エラーモデル 68
エラーモデルのパラメータ 68
エンドツーエンドシグナリング制御機構239
トレースオブジェクト付リンク 116
カプセル化 44
観測効用値 243
キューイングアルゴリズム 180
CBQ 180, 184
dRR 181
FIFO 180
FQ 189
Max-Min 法 189
PRI 180
RR 180
WFQ 192
キュー溢れ問題 86
キューモニターオブジェクト付リンク117
キュー管理方式の定義configQ 220
setMREDMode 220
キューイング方式の指定 221
キューイング方式の指定-PRI 221
キューイング方式の指定-RR 221
キ ュ ー イ ン グ 方 式 の 指 定-WIRR
221
キューイング方式の指定-WRR 221
廃棄方式の指定 220
廃棄方式の指定-DROP 220
廃棄方式の指定-RIO-C 220
廃棄方式の指定-RIO-D 220
廃棄方式の指定-WRED 220
出力キューのスケジューリング方式 221
キューモニター 53
境界ルータ 211
キューマネジメント機構 216
フロー分類機構 211
計測機構 211
整形機構 216
マーキン機構 212
計測アルゴリズム 240
Exponetial Average 241
PointSample 241
Time-Window 241
計測機構のパラメータ 245
公平性,fairness 100
公平性指標,fairness index 100
告知ウィンドウ 41
コンパイラクラス 130
サービスレート 180
指数分布乱数 72
ジッタ 38, 46
実効用値 243
写像オブジェクト 130
推奨コードポイント 211
スケジューリングアルゴリズム 180
ストリーミングサービス 35
スラック 236
スロースタート閾値 41
スロースタートプロセス 41
スロットインデクス 122
main : 2006/10/11(15:52): 3校
さくいん 297
スロット番号 121
正規分布乱数 72
セグメント化 45
セッションの記録 79
セッション終了のチェック 80
接続型サービス 34
全 2 重サービス 35
スロースタート 41
大域同期問題 86
帯域ブローカー 209
タイムスロット 180
定常分布乱数 73
デカプセル化 44
デッドロック問題 86
トークンバケツ 196
トークンバケツ法の実装attach-tbf-agent 198
set bucket 198
set qlen 198
set rate 198
トークンバケツ法の実装 197
トラフィックコンディショニング 216
トラフィックシェーピング 195
トラフィックジェネレータ 62
トレース情報 49
トレースファイル 49
ノードオブジェクト 117
廃棄処理優先度の指定 219
addPolicerEntry 219
パケットフォーマット 126
パーシブキューマネジメント,PQM 85
バックログ 180
パレート分布乱数 72
非接続型サービス 34
複合オブジェクト 115
複数のソース・シンクの扱い方 73
輻輳回避 41
輻輳回避プロセス 42
輻輳制御 39
輻輳通知方式,ECN 94
輻輳窓 39
輻輳窓のサイズ情報 57
輻輳窓の動的制御 41
フロー記録用プロシージャ 64
フロースペックの記述 218
フロー定義用プロシージャ 63
フローモニタ 102
プロトコルデータユニット 44
分類機構 115
アドレス分類機構 115, 122
ハッシュ分類機構 123
複製機構 123
ポート分類機構 115, 122
マルチキャストアドレス分類機構116, 122
マルチパス分類機構 123
ペイロード 44
ポリシーマネジャー 209
マーキン機構TRTCM 214
TSWTCM 212
マーキング機構の定義 219
addPolicyEntry 219
マーキン機構SRTCM 213
乱数ジェネレータ 72
リカバリープロセス 42
リーキバケツ 195
リンクオブジェクト 117
損失モニター 63
NS2 によるネットワークシミュレーション © 銭 飛 2006
2006 年 11 月 15 日 第 1 版第 1 刷発行 【本書の無断転載を禁ず】
著 者 銭 飛発 行 者 森北 肇発 行 所 森北出版株式会社
東京都千代田区富士見 1-4-11(〒 102-0071)電話 03-3265-8341 / FAX 03-3264-8709http://www.morikita.co.jp/日本書籍出版協会・自然科学書協会・工学書協会 会員JCLS 〈(株)日本著作出版権管理システム委託出版物〉
落丁・乱丁本はお取替えいたします 印刷/モリモト印刷・製本/ブックアート
Printed in Japan/ ISBN4-627-84621-5
著 者 略 歴銭 飛(せん・ひ)1987 年 東京工業大学大学院工学研究科情報工学専攻 修士課程修了1991 年 千葉大学大学院自然科学研究科生産工学専攻 博士課程修了1991 年 広島国際学院大学電子工学科講師1995 年 広島国際学院大学情報工学科助教授2000 年 広島国際学院大学情報工学科教授 2004 年 関東学院大学工学部電気電子情報工学科教授 現在に至る