ネットワークコンピューティング実習

1. URL
2. 担当教員
3. TA (ティーチングアシスタント)
4. ネットワークに関する疑問
5. 講義目的: 到達目標
6. 授業方法
7. 成績評価
8. スケジュール
9. 大崎が担当する科目に共通の連絡事項・アドバイス
10. Debian GNU/Linux のインストール
11. UNIX (UNIX とは、ユーザ権限、パッケージ管理)
12. Debian GNU/Linux セットアップ〜パッケージ管理
13. シェル (ファイル操作、リダイレクト、パイプ)
14. X ウィンドウシステム & ウィンドウマネージャ
15. エディタ (Emacs チュートリアル)
16. シミュレータ導入 (インストール、実行、可視化)
17. Python 言語 (1) (名前、変数、式)
18. Python 言語 (2) (文、スコープ、サブルーチン)
19. Python 言語 (3) (オブジェクト指向プログラミング)
20. 最終レポート課題 (実施報告書)
21. シミュレータ解説 (1) (概要、エージェント)
22. シミュレータ解説 (2) (モビリティ、可視化)

シミュレータ導入 (インストール、実行、可視化)

実習の流れ・チーム分けの方針・態度目標

2025/09/24 のものと同じ。

https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1

事前準備

ホスト OS とゲスト OS (Debian GNU/Linux) を行き来すると非常に面倒なので、 ゲスト OS だけですべての作業を行うこと (日本語入力の設定がやや複雑なので、 日本語入力のみ当面はホスト OS で行う)。

Web ブラウザ (qutebrowser)、 PDF ビューア (mupdf) をインストールしておく。

> sudo apt update
> sudo apt install qutebrowser libjs-pdf mupdf uim-skk skk skkdic-cdb

Alt + Ctrl + 3 で qutebrowser が起動できる。 もしくは以下のように起動してもよい。

> qutebrowser &

qutebrowser の最低限のコマンド (vi エディタの操作体系を真似ている)。

ヘルプを表示         :help<RET>
新しいタブを開く      C-t
タブを閉じる          C-w
「キーワード」を検索    oキーワード<RET>
qutebrowser を終了   C-q
入力モードへ          i
入力モードを抜ける     ESC, C-[
ヒントを表示           f, F (新規にタブを開く場合)
quickmarkを保存       m
quickmarkを開く       o
スクロール            h, j, k, l
ページの先頭に移動     gg
ページの末尾に移動     G

日本語の PDF ファイルは文字化けするので、 「Download」でダウンロードし、 mupdf で表示する。

C-SPC (Ctrl + スペースキー) で日本語入力 (uim-skk) の ON/OFF が切り替えられる。 SKK による漢字の入力方法は特殊なので、 しばらくはひらがなの入力に使ってください。

SKK による入力方法をマスターしたい場合は、 Emacs 上で M-x skk-tutorial とすれば SKK のチュートリアルが実行できます。

内容目標

- 「シミュレータ」および「エミュレータ」が何かを他人に説明できるようになる。

- 「エピデミックブロードキャスト」とは何かを他人に説明できるようになる。

- DTN シミュレータ (dtnsim) をインストールできるようになる。

- シミュレーション条件を変えて dtnsim を実行できるようになる。

テキスト

https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/04.pdf

課題

課題 1

「シミュレータ」および「エミュレータ」とは何かを、 それぞれの違いがわかるように説明せよ。

世の中にある○○シミュレータや○○エミュレータについて、 (1) それは本当にシミュレータ/エミュレータか、 (2) もしそうならそれはなぜか、 を考えて議論せよ。

課題 2

「エピデミックブロードキャスト」とは何かを説明せよ。

エピデミックブロードキャストがどういうものかを理解した後、 「エピデミックブロードキャストを使うと何ができそうか? (どんなアプリや用途に使えそうか?)」 を議論せよ。

課題 3

dtnsim をインストールせよ。

課題 4

dtnsim におけるエージェントの移動モデルを「グラフの CRWP」から「グラフ上のランダムウォーク」に変更してシミュレーションを実行せよ。

略解

課題 1

→ テキスト参照

課題 2

→ テキスト参照

課題 3

> sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U dtnsim
> dtnsim | cellx

課題 4

> dtnsim -h
option -h not recognized
usage: dtnsim [-v] [-s #] [-n #] [-r range] [-I id[,id]...] [-m mobility] [-p path] [-a agent] [-M monitor]
  -v            verbose mode
  -s #          seed of random number generator
  -n #          number of agents
  -r range      communication range [m]
  -I id[,id...] initial infected nodes
  -m mobility   name of mobility class (Fixed/FullMixed/LevyWalk/LimitedRandomWaypoint/RandomWalk/RandomWaypoint/graph.Fixed/graph.Sequential/graph.RandomWalk/grpah.CRWP)
  -p path       name of path class (NONE/Line/Grid/Voronoi)
  -a agent      name of agent class (CarryOnly/Random/Epidemic/P_BCAST/SA_BCAST/HP_BCAST/ProPHET)
  -M monitor    name of monitor class (Null/Log/Cell)
> dtnsim -m graph.RandomWalk | cellx

チャレンジ課題

- 「シミュレータ」という名称が付いたシステムやソフトウェアにどのようなものがあるか調べてみよ。それぞれについて、それらが本当にシミュレータの一種であるかを確認せよ。

- 「エミュレータ」という名称が付いたシステムやソフトウェアにどのようなものがあるか調べてみよ。それぞれについて、それらが本当にエミュレータの一種であるかを確認せよ。

- TCP/IP が、本当に通信網の分断に対して耐性がないかを実験で確認せよ。例えば、ISO イメージのような巨大なファイルのダウンロード中に Wi-Fi ルータの電源を ON/OFF してみよ。どのくらいの通信回線断であれば正常にダウンロードできるか調査してみよ。

- epidemic という英単語の意味を英英辞書で調べよ。

- 自身が使っている PC やスマートフォンで、ユニキャスト、マルチキャスト、ブロードキャストのどれが、どの程度使用されているかを調査せよ。

- 「which dtnsim」を実行することにより、dtnsim プログラムがどこにインストールされているかを調査せよ。

- 「sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U dtnsim」によって、ファイルがどこにインストールされたかを調査せよ。

- pip3 コマンドを用いて dtnsim をアンインストールせよ。アンインストールされたことを確認した後、pip3 コマンドを用いて dtnsim を再度インストールせよ。

- エージェントの移動モデルをさまざまに変化させてシミュレーションを実行してみよ。それぞれの移動モデルにおいて、エージェントの移動パターンがどのように変化するかを観察せよ。グラフ上の移動モデルを使用する場合は、-p オプションによって経路もあわせて指定する必要があることに注意せよ。

- エージェントの通信プロトコルをさまざまに変化させてシミュレーションを実行してみよ。それぞれの通信プロトコルにおいて、通信特性がどのように変化するかを観察せよ。

- cellx ではオプションを指定することで、可視化方法をさまざまに変化させられる。以下のオプションを試してみよ。どのような目的の可視化の時に、どのようなオプションを指定すると望ましいかを考察せよ。

> cellx -h
option -h not recognized
usage: /usr/local/bin/cellx [-E] [-c #] [-M class] [-F rate] [-L rate] [-A alpha] [-m #] [file...]
  -E        enable macro expansion with cpp
  -c #      select color scheme
  -M class  monitor class (Null/SDL/SDL_Filter/PostScript) (default: SDL)
  -F rate   the number of frames per animation/fading
  -L rate   limit the frame rate (default: infinity)
  -A alpha  alpha for filtering effect (0 <= alpha <= 255)
  -m #  the number of frames to render (default: infinity)

-c 0〜7: カラースキームの変更
例: カラースキームを 1 番に変更
> dtnsim | cellx -c 1

-M class: モニターモジュールの指定
-A alpha: フィルタ効果の強さ (小さいほど残像が残る)
例: 残像を残すフィルタを有効にする
> dtnsim | cellx -M SDL_Filter -A 40

-L rate: フレームレートの上限
例: フレームレートを 30 フレーム/秒に抑える
> dtnsim | cellx -L 30

例: 上記の組み合せ
> dtnsim | -M SDL_Filter -A40 -L30

レポート課題 2025/11/05

「レポート課題 2025/09/24」と同じ。

https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7

要望

- 講義ありがとうございました。-aオプションで指定できるEpidemic、P_BCAST、ProPHET などの通信プロトコルは、それぞれ具体的にどのようなアルゴリズムで動作しているのか知りたいです。

  P-BCAST、SA-BCAST、HP-BCAST は Gamberini らの論文を、ProPHET は RFC を見てく
  ださい。

  Impact of history on epidemic broadcast in DTNs
  https://ieeexplore.ieee.org/document/4812838

  Probabilistic Routing Protocol for Intermittently Connected Networks
  https://www.rfc-editor.org/rfc/rfc6693


[<15. エディタ (Emacs チュートリアル)] [>17. Python 言語 (1) (名前、変数、式)]