「ns2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき...

21

Upload: others

Post on 20-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2
Page 2: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

「NS2 による

ネットワークシミュレーション」

サンプルページ

この本の定価・判型などは,以下の URL からご覧いただけます.

http://www.morikita.co.jp/books/mid/084621

※このサンプルページの内容は,初版 1 刷発行当時のものです.

Page 3: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2
Page 4: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

を用いて実験検証が行われている.さらに,ネットワーク関連の教育の補助ツールとして,欧米をはじめ,世界の一部の国の大学,教育研究機構で利用されるようになっている.しかしながら,システムの煩雑さや,使い方に関するドキュメントの少なさで,初心者

Page 5: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.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月著者

Page 6: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 7: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 8: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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の命令をまとめて一つのプログラムに編集しておいて,後

でまとめて実行するモードである.インタラクティブモードに比べ,プログラム単位で実行

Page 9: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 10: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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 に属性付けをする

Page 11: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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層構造になっている.

Page 12: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 13: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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])のメンバ関数の一つに過ぎない.一般によく利用されるメンバ関数を以下のとおり

Page 14: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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) を持っている.マルチキャストノードにはこれらに加え,もう一つ

Page 15: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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 個のパケットのデータを送出することである.

Page 16: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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)これはバックログ存在し,スケジューラが常に稼動していることを前提にしている.

Page 17: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 18: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 19: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 20: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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

Page 21: 「NS2による サンプルページ - 森北出版main : 2006/10/18(12:37): 3校 ii まえがき にとっては,NS2 を完全にマスターすることは大変難しいこととなっている.NS2

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 年 関東学院大学工学部電気電子情報工学科教授  現在に至る