CS 6250: Computer Networks

OMSCS 3 つ目の授業に関する記録

OMSCS 2024 Fall (秋学期) に履修した Computer Networks に関してまとめた。

Overall

この授業は OMSCS で人気のある授業の一つであり、ネットワークに関して深く学べることを期待して受講した。現代社会において、ネットワークは何をするにも必要不可欠であるため、業務においてもこの授業の知識は役立つことが期待された。レビューサイトなどを確認すると授業の難易度としてはそこまで高くないとの情報があったが、コンテンツが単調で冗長というコメントがあった。確かに、基本的にはテキストベースであり、わかりやすい解説動画などはなかったので毎週の負荷は思ったよりも高かった。

CS 6250: Computer Networks

Content

課題が 5 つと、中間テスト、期末テスト、毎週の小テストによって成績が決定した。毎週テーマに分けられたコンテンツを読み進めていくが、その内容に関して都度、授業の内容を問う小テストが課された。授業の内容やテスト勉強に関しては、以下にまとめている。 課題に関しては、基本的に Python を用いてネットワークを利用する上で使われるアルゴリズムの実装やシミュレーションなどを行った。 また、Internet-Wide Events に関する Extra Credit の課題も存在していたが、今回は着手しなかった。

CS 6250 Computer Networks Exam 1

CS 6250 Computer Networks Exam 2

Assigment

HW0 (Optional) Simulating Networks

この課題の結果は評価されないが、今後の課題で利用されるネットワークシミュレーションを行う Mininet の利用方法を学ぶものであった。ネットワークデバイスのエミュレーションには Open vSwitch が利用された。コードで Router や Swtich を定義することで、Linux OS 上に仮想ネットワークを作成し、その動作を再現することができた。課題としては、指定されたネットワークトポロジーを再現することが目標であり、単一端末上にデータセンターを模した構成を実現こともできた。 実際に SDN Firewall、BGP Hijacking などでは、これを利用した上で Firewall を構成したため、やっておいたことでスムーズに取り組むことができた。

Introduction to Mininet

Open vSwitch

HW1 Spanning Tree Protocol for Network Switches

Layer 2 の switch において、ループが発生することを回避するアルゴリズムの Spanning Tree Protocol を実装するものであった。アルゴリズムの実装自体はそこまで時間がかからなかったが、提出時に行われるテストでは、公開されていないネットワークトポロジーに対してテストが行われるが、それをパスするためエッジケースに対する修正に時間を要した。どのようなテストケースで失敗しているか不明であったため、原因がわからず苦労した。

HW2 Distance Vector Routing

同一 AS 内のルーティングを担う Interior Gateway Protocols (IGP) の一種である Routing Information Protocol (RIP) に利用される Distance Vector Routing を実装した。 Bellman Ford Equation を解き、最も短いパスを見つけるアルゴリズムである。Spanning Tree Protocol と同じように分散アルゴリズムであるため、Switch、Node 同士がどのような情報を提供するかが肝であった。そのため、Spanning Tree Protocol 実装の概念としては近いものであった。こちらも同様に非公開のネットワークトポロジーを用いたテストケースをパスすることに時間がかかった。

HW3 SDN Firewall

ここまでのアルゴリズムの実装とは異なり、Software Defined Network (SDN) を理解することが目的の課題であった。OpenFlow が有効な switch を利用して、Firewall を実装した。 OpenFlow に関しては、SDN における data plane と control plane 間に存在する Southbound API として広く利用されている。 Python ベースのオープンソース OpenFlow SDN コントローラーである POX controller を利用し、トラフィックを制御した。 具体的には、OpenFlow コントローラーにトラフィックに対する対処のルールを追加する Flow Modification object を作成した。加えて、具体的な IP アドレスなどを定義した Match object を作成し、Flow Modification object にアタッチした。Match object に入力パケットが一致する場合は、action が実行される流れである。 コードで定義することでネットワーク機器の振舞いを変化されることができたので、SDN の一端を垣間見ることができたと思う。

pox-doc

ミニネットエミュレータを用いたソフトウェア定義ネットワーク(SDN)におけるPOXコントローラとオープンフロー性能評価【JST・京大機械翻訳】

HW4 BGP Hijacking

BGP Hijacking は BGP においてアドバタイズを悪意を持って実施することで、攻撃者の意図したルーティングを行う攻撃方法であるが、手元で BGP プロトコルを実行させることでこの攻撃を再現した。 BGP ルーターの構成には Quagga が利用されており、各 AS では talking BGP として bgpd、Linux kernel のルーティング設定に zebra が利用されている。 以下の Mininet における BGP Hijacking の Demo が題材となった課題である。

BGP Path Hijacking Attack Demo

quaggaでBGPを設定してみる

サンプルのトポロジーにおける BGP Hijacking のサンプルコードは提供されていたため、これを用いて指定されたより複雑なトポロジーにおける BGP Hijacking の実装を行った。サンプルコードの動作を理解してしまえば、実装は自体はそこまで難しくないものであった。

HW5 BGP Measurements (BGPM)

この課題では、BGPStream を利用して、BGP データの分析を行い、BGP プロトコルへの理解を深めることが目的であった。昨今、インターネットの利用が拡大しており、その理解のためには日々生じるデータの分析が有効である。今回は、BGPStream の Python interface である PyBGPStream を利用して分析を行った。 解析対象の BGP データは合計するとかなり大きなデータセットであり、ビッグデータ解析の課題に近しい印象の受けた。 BGP アナウンスメントのデータを扱うことができたため、BGP プロトコルに対する理解は深まったと思う。

BGPStream

なお、BGPStream が提案された論文に関しては以下である。

BGPStream: A Software Framework for Live and Historical BGP Data Analysis

Reflection

現代社会においてネットワークは必要不可欠になっており、ネットワークなしに日常生活を送ることは困難になりつつある。しかしながら、日常的に触れていることが原因なのか、具体的にどのような原理で動いているのか、なかなかイメージが湧いてこなかったのが正直なところである。この講義を通し、よりネットワークに関して深い理解を得ることができため、依然に比べてネットワークがどのように成り立っているのか自分の中の解像度は上がったと思われる。その中でも、Interdomain の話題に関しては今まで触れる機会がなく知識が浅かったが、Mininet のシミュレーションや BGP の演習を通して経験を得ることができた。

負荷の観点では、毎週かなりのページに及ぶ内容の授業であり、単調なテキストベースであった点は苦労した。また、課題に関しては、本質を学ぶことに焦点を当てるため既に動作する状態でプログラムが渡され、一部を実装する形であったので課題自体を終わらすことは比較的容易であったと思う。しかし、どのようにしてシミュレーションを実装しているかなど、何のための課題なのかの意識が薄れこなしている感はあった。そのため、シミュレーションの実装の詳細に関して踏み込んで理解するようにし、上記のまとめはその点を意識した。

Licensed under CC BY-NC-SA 4.0
Hugo で構築されています。
テーマ StackJimmy によって設計されています。