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

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) (モビリティ、可視化)
23. ソフトウェア設計・実装

シミュレータ解説 (1) (概要、エージェント)

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

2024/09/25 のものと同じ。

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

内容目標

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

- エージェントの 2 つの通信方式 (CarryOnly と Epidemic) の違いを他人に説明できるようになる。

- 実行ファイルや Python のモジュールがどこに格納されているかを確認できるようになる。

- Python モジュールに動作確認のための print を埋め込めるようになる。

テキスト

https://lsnl.jp/~ohsaki/lecture/netcompx/2024/priv/08.pdf

課題

事前準備

Debian のパッケージおよび dtnsim シミュレータ等をアップデートしておく。

> sudo apt update
> sudo apt upgrade
> sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U dtnsim

課題 1

dtnsim を以下の条件で実行せよ。 (1) エージェント数は 10、 (2) 移動モデルは RandomWaypoint、 (3) 経路制約なし、 (4) エージェントは CarryOnly。

メッセージ保有ノードが、 宛先ノードに直接接触した時にメッセージが中継されることを確認せよ。

課題 2

課題 1 において、 エージェントのクラスを Epidemic に変更してシミュレーションを実行せよ。 CarryOnly と Epidemic の違いによって、 メッセージの中継がどのように変化するかを確認せよ。

課題 3

プログラム dtnsim および Agent.CarryOnly クラスを定義している agent/carryonly.py がインストールされている場所を特定し、 それぞれのファイルの中身を確認せよ。

課題 4

課題 1 のシミュレーション実行中に、 各エージェントの情報を標準エラー出力にダンプせよ。

略解

課題 1

> dtnsim -n 10 -m RandomWaypoint -p NONE -a CarryOnly | cellx -L30

末尾の -L30 を変えると描画されるスピードを調整できる (-L30 で 30 フレーム/秒)

課題 2

> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic | cellx -L30

課題 3

> which dtnsim
/usr/local/bin/dtnsim
> python3
Python 3.11.2 (main, Mar 13 2024, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/ohsaki/lib/python', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/usr/local/lib/python3.11/dist-packages', '/usr/lib/python3/dist-packages']
>>> import dtnsim.agent.carryonly
>>> dtnsim.agent.carryonly.__file__
'/usr/local/lib/python3.11/dist-packages/dtnsim/agent/carryonly.py'
>>> (Ctrl-D で終了)
> less /usr/local/bin/dtnsim
> less /usr/local/lib/python3.11/dist-packages/dtnsim/agent/carryonly.py

課題 4

例えば、 /usr/local/lib/python3.11/dist-packages/dtnsim/agent/carryonly.pyに以下のような変更を加えればよい。

--- carryonly.py.orig   2021-11-29 15:25:46.432520640 +0900
+++ carryonly.py        2021-11-29 15:24:30.312284452 +0900
@@ -190,6 +190,8 @@
         self.mobility.move(self.scheduler.delta)
         self.monitor.move_agent(self)
         self.forward()
+        import sys
+        print(self, file=sys.stderr)

     def flush(self):
         """Merge all newly-received messages with existing ones."""

> cd /usr/local/lib/python3.11/dist-packages/dtnsim/agent
> sudo cp carryonly.py carryonly.py.orig ← 元のファイルを別名で保存
> sudo chmod 666 carryonly.py ← 一般ユーザで書き込めるように
> emacs carryonly.py ← ファイルを編集

レポート課題 2024/12/04

「レポート課題 2024/09/25」と同じ。

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

[<20. 最終レポート課題 (実施報告書)] [>22. シミュレータ解説 (2) (モビリティ、可視化)]