2016/09/09 13:00 python [前回まで] 前期の復習 List/辞書/データ型 データ型 : 値の集合と、その演算(とそれが、満す公理)の対 例 群 : 群の要素の集合と、「積(かけ算)」という演算子の対 線形空間 : 集合と、定数倍と和が定義 # 数学で学ぶ対象は、全て「データ構造」とその性質 現実の対象を、データ型の要素に対応付けする -> (効率良く、正確に) 現実の問題を軽三機で解く事が可能になる プログラム = データ型 + アルゴリズム 問題を解く = 対象を表現 + 適切に処理する # データ型を身に付けるためには、数学(で学んだ事)が重要 Class の作り方 Class : module の一般化 model : k(>=0) 個数データを共有する(m>0) 個の手続の集まり # C 言語のライブラリ関数は、0 個のデータを共有する、1 つの続きである事が多い # !! 引数を経由して、データを共有する事も多い # !! ファイル I/O # !! fopen で入手したファイルポインターを # !! fread で利用する 特定なデータに、複数の関数を組合せる事により (新しい)意味を固定(イディオムを作ってる) # イデオム=慣用句(例:四字熟語) # be going to -> will # May I , Shall we -> 申し出.. module だと、共有するデータが一組しかない 「操作の対象(=データ型の変数)」が一つに固定されてしまう ! データ構造 ! 集合と操作の組 ! そのデータ構造の値を取る変数が一つ その(新しく作った)データ型の値を取る「変数」を複数にする仕組み -> Class ! 変数そのものは、隠されている ! -> 「直接」は操作できない(情報隠蔽) ! -> 「間接的」に操作する ! -> (一方) : 操作のたいしょうが複数の場合 ! -> 区別する必要がある ! -> これまでは「変数(名)」が識別の仕組み ! -> その変数を含んだ識別子が必要 -> オブジェクト 新しいオブジェクトを作る機能があり、 そのオブジェクトが「(あたかも)モジュールと同じように振る舞うよう」にする仕組み 2016/09/09 15:00 alpha [復習] これまでは、Router の Routing Table の情報は、手動で入力していた Static Routing # 手動で設定して、(何もしない限り)変化しないので、 # 静的 (static) <-> 動的 (dynamic) Dynamic Routing Router が、「互いに情報を交換」を行い、その情報に基いて、 Routing Table の内容を「更新(作成)」する仕組み # Table の内容が、(自動的に..)変化するので、動的(dynamic) 情報交換を行う = 通信を行う = プロトコルが必要 (Routing Protocol) プロトコルが違えば、うまく動かない # Ruted Protocol : Routing Protocol 以外の Protocol Routing Protocol の種類 組織内 Routing Protocol Distance Vector を利用する Protocol RIP Link State を利用する Protocol OSPF 組織間 Routing Protocol (Distance Vector を利用する) BGP ネットワークのトポロジーから、Routing Table の情報を作るアルゴリズム アルゴリズム どんな情報(が入力になっていて、それ)からどんな情報を作るか 入力: ネットワークのトポロジー : Graph 情報 (Node, Link) 出力: 最短経路 ( を求め、その最初のノードが、Table の内容) 最短経路 : ダイクストラのアルゴリズム -> OSPF ( Open Shotest Path Fast ) 「Shotest Path」: 最短経路 OSPF では、互いに Link State とよばれる、 「自分が繋っているネットワークのテーブル」 を交換(報せる) -> ネットワーク全体の情報が、全ての Router に届けば、 個々の Router は、それぞれ、Routing Table を作る事ができる ネットワークの更新に対して、再計算が必要 # OSPF が開発された頃は、この計算が大変で、できるものは、高価だった [本日の課題] RIP 自分のもっている Routing 情報に、Distance を付けた物を交換 (部分的な)計算結果を交換している [他人の計算結果を利用している] 結果の計算は、Router が分担している 黒板 R2: Router# config t ^^^^^^^^ Router(config)# router rip ^^^^^^^^^^ Router(config-router)# network 192.168.2.0 ^^^^^^^ ^^^^^^^^^^^ Router(config-router)# network 192.168.3.0 ^^^^^^^ ^^^^^^^^^^^ Router(config-router)# network 10.0.0.0 ^^^^^^^ ^^^^^^^^ いままでの Network 表現 : 範囲(先頭と終、先頭と長さ)を指定する必要がある # Network では、範囲として、先頭(Network Address)とネットマスク 192.168.2.0/24 192.168.2.0 255.255.255.0 Class Full Network を指定するには、Network Address と Netmask が必要 一方、一つの物(Network)を示すのに二つ情報(Address/Mask)を指定するは面倒 -> (Network) Address に「自然な(?)」Netmask を定める事にした IP Address の先頭 bit が 0 (一つ目の byte の数値が 0 〜 127) -> CLass A : /8 10 (一つ目の byte の数値が 128 〜 191) -> Class B: /16 110 (一つ目の byte の数値が 192 〜 223) -> Class C: /24 111 () -> IP の unicast address には使わない # <-> classless : この自然なマスクサイズを無視する場合 [要望 1] ルーティングテーブルのサイズは小きくしたい 複数の経路が一つのテーブルエントリィでまとめ(aggregate)られれば、 テーブルサイズを小くできる -> まとめる -> 「代表表現」が必要 Class を「代表」として扱う(と嬉しいがそのためには、条件といて) 同一のネットワークアドレスを持つ HOST は、 他のネットワークを利用せずに、直接通信できる RIP では 「Classs Full な意味での」Network は、直接接続している -> 異る Network 間では、Network 単位で、アグリゲートされる 「Classs Full な意味での」Network 内の subNetmask は共通 -> 同一ネットワーク内では、Subnet Mask は統一する必要がある # RIP では、Netmask の情報を交換しない [Point] 設定前 1. show ip route として、直接設定されている経路だけがある事を確認 2. 1. にある Network 以外の Network の Address には Ping できない事を確認 設定後 3. show ip route で、Network が増えている事を確認 4. 3. の Network の Address に Ping できる事を確認 [RIP Config] http://www.cisco.com/c/en/us/td/docs/ios/12_2/ip/configuration/guide/fipr_c/1cfrip.html [Enabling RIP] Router(config)# router rip Router(config-router)# network ip-address [Allowing Unicast Updates for RIP] neighbor ip-address == >---+-< >---+---+-< >---+-------+-< >---+---+-< >---+-< | | | | | | | | | | | | | | | | +------ R +------ R R-------+ R ------+ | | | | | | | | >---+-< >---+---+-< >---+---+-< >---+-< | | | | | | | | +------ R R ------+ | | | >---+-------+-< | | | | | R | | | | >---+-----------+----<