[[山内の演習のページ/院演習07]]~
訪問者: &counter();           最終更新: &lastmod();

*自分で実験できる [#pe4b73b5]

**ネットツールを使える [#c965c66a]
***パケット観測装置を使える[#ua71c89a]
パケットダンプを取るプログラムをインストールし、実際にパケットを測定し分析する。(2週間) 
-[[Ethereal(Windows):http://www.ethereal.com]]もしくはTCPdump(UNIX/Linux)を導入してパケットダンプ(パケットモニタリング)を行う。導入方法はそこら辺のHPにも書いてある。
-Etherealを動かしながら、ホームページをアクセスして、どのようなパケットが通過したかのログを取り、そのログを見て何が起こっているかを解釈する。TCPの教科書(講義で使う教科書、「詳解TCP/IP」、Tannenbaumの教科書など)を見て、実際に起こっていることが教科書の説明で解釈つくか、教科書と何か矛盾するところが無いか、確認する。
-ビデオのサイトをアクセスして、パケットのログを取り、上と同じように解釈する(教科書はあまり用意していないが、RFCを見よ)。

***パケット伝播シミュレータを使える [#t20053d9]
NistNetを使ってみるが、その前にLinuxを導入・設定し、それをルータとして使えるようにする。

-Linuxをインストールし、ルータとして設定する。やり方は先輩に聞く。まずはFedoraあたりがよいだろう。
--通信が出来ることを確認する。
--同じように、FreeBSDも導入できるようになるとよい。

次に、NistNetを導入・設定し、使えるようにする。
-NistNet設定
--上記のLinux上に[[NistNet:http://www-x.antd.nist.gov/nistnet/]]を導入する。日本語のサポートは無いが、何人かの人がページを書いているようだ。
--パケットをランダムに落とすように設定し、ホームページアクセスやビデオアクセスを試してみる。
--上記で、Etherealなどでパケットモニタリングをし、TCPがどのようにパケットを再送しているかを見る。

《この項目の別案》 (07/04/15追加)~
-別案として、FreeBSDに標準で(?)ついている[[DummyNet:http://www.freebsd.org/cgi/man.cgi?query=dummynet&sektion=4]]を使う手がある。~
たとえば[[こんな説明:http://www.nal.ics.es.osaka-u.ac.jp/~t-tugawa/note/freebsd/dummynet.html]]や[[こんな説明:http://ino-www.jaist.ac.jp/members/isogaki/fbsd-dummynet.html]]や[[こんな説明:http://info.iet.unipi.it/~luigi/ip_dummynet/]]がある。~
もしかするとこちらの方がNistNetより普及しているのかもしれない。山内は使ったことがない。誰か試すべし。~

-もう1つの別案として、Linux 2.6以降に標準(?)でついている[[netem:http://linux-net.osdl.org/index.php/Netem]]を使う手もありそうだ。~
日本語では[[こんなページ:http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=netem]]ぐらいしか見つからなかった。これでも十分かも。~
これも山内は使ったことがないので、誰か試すべし。~
~
ちなみに、上記のnetemの日本語紹介ページに曰く~
 DummynetはFreeBSDで動作し,実績も高い.NISTnetはLinuxで動作するが,開発が停止している.
 DummynetはFreeBSDで動作し,実績も高い.
 NISTnetはLinuxで動作するが,開発が停止している.
 netemはNISTnetと比較すると機能は少ないが,Qdiscモジュールとして実装されているため負荷が少なく,
 メインストリームカーネルにマージされているので,すぐ使えるという利点がある.

***パケット発生・受信ツールを設置し、NistNet経由でのパケット損失と、たとえばTCPの動きをEthereal等で測定する。 [#o45c0cea]
いずれ発信・受信ツールは自作するのがよいが、さしあたって出来合いのツールを使ってみる。
-サーバ側にホームページサーバー(Apache2などがいいだろう)を、クライアント側にブラウザ(適当なもの)を導入し、ホームページを見られるようにする。その時にパケットダンプを使ってモニタリングし、TCPが遅延によってどういう影響を受けるのかを実測する。
-クライアント側にビデオ受信ソフト(たとえばWindows Media Player)を置き、インターネット上のビデオサーバーからNistNetを経由して受信する。パケットモニタリングして、何が起こっているかを解析する。

**ネットツールを自作できる [#k2f49a43]
様々なツールを自分の手でプログラミングできるようになる。

***パケットの分析ツール [#cb9c2c15]
パケットを取り込む部分は多少面倒なので後からにすることにして、EtherealやTCPdumpなどの既存のツールを使う。これらのツールは、受信結果を受信したとおりにファイルに吐き出す機能を持っている。まずはこの出力を受け取って、パケットの分析をするツールを作る。
-EtherealやTCPdumpの出力ファイルをプログラムで読取る。(バイナリファイルの読み込み)
-それを分析し、それぞれのパケットがどの種類か、どういうパラメタを持っているかなどを書き出すプログラムを作る。
-基本的にはEtherealやTCPdumpと同じ機能だが、もし新しい形式のパケット(Etherealなどがまだ対応できていない新しい形式のパケット)が入っていたら、その解析プログラムは自分で書かなければならない。
-また、EtherealやTCPdumpはヘッダ部分は解析するが、内容(パケットのペイロード部分)は解析しない。それを解析したければ、自分でプログラムを書かなければならない。

***パケット発生・受信ツール[#v9b618ae]
ソケットプログラミング を用いて、パケット発生・受信ツールを作る。
-C言語のソケットプログラミング(UNIXでは標準)は[[昔の実験のメモ:http://pepper.is.sci.toho-u.ac.jp/htdocs_old/classes/jikken03/index.htm]]があるので参照(アクセス制限は研究室Wikiと同じ)。
-Java言語でのソケットプログラミングも出来る。詳細は準備中。

***ビデオサーバーとNistNetの組合せ [#h32c2542]
-上記のEthereal実験でビデオの場合にどのようにパケットが送られているかをよく確認しておく。
-ソケットプログラミングを使って、UDPのパケット送出サーバープログラムを作る。一定時間ごとにUDPパケットを送出する。
-受信プログラムも書く。受信できるようにする。
-NistNetでパケット損失を発生させ、ビデオがどうなるか実験する。

**机上シミュレーションできる [#kafa105b]
汎用のパケット動態シミュレータns2を使ってみよう
***ns2をインストールして、使ってみよう [#zc9b7177]
ns2は最近はLinuxだけでなくWindowsでも動くので、それを使ってみるのもよいかもしれない。ただ、最後には自前のシミュレーションモジュールを作りたくなるが、その時はLinuxまたはFreeBSDなどがコンパイルの都合がよかろう。 [#scd967cb]
-ns2について学ぶ
-ns2をダウンロード・インストールする
-簡単なシミュレーション対象ネットワークを設計する
-パケットの動きをシミュレーションし、グラフィックに表示する。

*おまけ: 自作シェルを作ってみよう [#b7346431]
-OSを理解するためのプロジェクト。OSのAPIを使って、UNIXのシェル(bashなりcshなり)のごくごく簡単版を作ってみる。
-言語はさしあたりCもしくはC++。別に限定する理由は無いので、他の言語(たとえばJavaとか。Perlなども可能か?)でも試してみるとよいかもしれない。
-機能の最低レベルは、次の通り
--コマンドでプログラムを起動できる。stdin/stdoutはどうなるか?
--パイプを作れる。
--ファイルを操作できる。lsコマンド、rmコマンド、mkdirコマンドなど。

*参考資料 [[今までの卒論>過去の卒論・修論]] [#p55664ac]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS