top of page
Image by Conny Schneider

CoNeCo|コンピュータネットワーク with Colab

Google Colabで作りながらコンピュータネットワークを学ぶための教材です。

​大学生~大学院生から初級エンジニアを想定し、初学者向けに作られています。

作って学べる

従来の座学では、プロトコルの名前や仕様を覚えるだけになりがちで、退屈で頭に入りにくい面がありました。

自分でコーディングすることで、体感しながらコンピュータネットワークの基本を学べます。

シンプルな設計

既存のネットワークシミュレータは高機能な一方で、技術的あるいはコスト的にハードルが高く初学者向けではありませんでした。

そこで初学者向けにシンプルに設計された学習用のシミュレータを新たに開発しました。

​環境整備が不要

​通信の実験をするには、複数のデバイスが必要になり、またOS等の環境による違いもあり、敷居が高くなりがちでした。

Colabでのシミュレーションにより学習するため、環境整備がほとんど不要です。

CC-BY-SA

シミュレータのコードについては、CC-BY-SAライセンスとします。改変・改良などして利用してくださって構いません。

​あ習用としてのシンプルさを優先した設計のため、実際のプロトコルの挙動とは異なる場合があります。
ある程度のテストは行っていますが、動作保証はできかねます。
また使い方などに関するお問い合わせには答えしきれません。
Image by Shubham Dhage

​第1回

コンピュータネットワークの基本要素

  • 本章ではコンピュータネットワークを構成する基本要素であるノード、リンク、パケットについて学びます。

  • これらの3要素に関する基本的なクラスを実装し、ノード同士をリンクで接続して任意のネットワークを構成します。

  • パケットを定義し、あるノードからリンクを介して接続されたノードに対してパケットを送受信し、構成したネットワークをグラフとして可視化して確認します。

Image by Andrik Langfield

​第2回

ネットワークと時間

  • 本章で時間の概念を導入し、パケットが時間的にどういった順序で処理され、目的地まで到達するのか、をコンピュータ上でトレースします。

  • スループットや遅延、ロス率など、ネットワークサービスの品質を評価するための指標を導入します。

  • 「大きなファイルを送信には時間がかかる」「ネットワークが混雑するとパケ詰まりが発生する」など、日常で体感しているような事象をシミュレーションで確認します。

Image by Jordan Harrison

​第3回

スイッチとMACアドレス

  • 本章ではローカルネットワークの主要な構成要素であるスイッチを作り、学習します。

  • スイッチを用いてノード同士を接続し、多くのノードからなるネットワーク上でパケットを中継転送します。

  • ローカルネットワーク上での標準アドレスとして、MACアドレスの書き方についても学習します。

Image by Nareeta Martin

​第4回

MACアドレス学習とループ回避

  • 本章ではスイッチの主要機能であるMACアドレス学習とブロードキャストを実装しながら学習します。

  • ループ時の有名な問題であるブロードキャストストームについても、実際にシミュレータ上で体感してみます。

  • スイッチ間でメッセージ交換するBPDUを作り、STPによるループ回避の動作も実装して確認します。

Image by NASA

​第5回

IPパケットとフラグメント

  • 本章ではインターネット上でのパケット転送の中核を担うIPアドレスとルータについて学習します。

  • IPアドレスとルーティングテーブルを用いたパケット転送と、大きなデータに対するフラグメントと再組立ての処理を実装します。

  • ネットワークアドレスとサブネットマスクについても学習し、ネットワーク間での通信を模擬しま​す。

Image by Ümit Yıldırım

​第6回

ルーティングプロトコル

  • 本章ではパケットの転送経路を定めるルーティングプロトコルとアルゴリズムについて学習します。

  • 代表的なプロトコルであるOSPFを実装して、ルータ間でのメッセージ交換によりルーティングテーブルを更新できるようにします。

  • ダイクストラ法により、各ルータで最短経路を計算できることを確認します。

Image by Deric

​第7回

レイヤとカプセル化

  • 本章ではスケーラビリティ向上のために必須の機能であるレイヤ(階層構造)とカプセル化について学習します。

  • パケットヘッダとパケットの送受信プロセスを拡張し、MACアドレスとIPアドレスを順番に処理できるようにします。

  • インターネットを介してローカルネットワークを接続するような、大きなネットワークシステムを模擬できるようにします。

Image by Anne Nygård

​第8回

アドレスの問い合わせ

  • 本章では通信に先立ってMACアドレスやIPアドレスを問い合わせる仕組みについて学習します。

  • DNSによるドメイン名とIPアドレスの変換プロセスを実装し、普段使っているインターネットの仕組みについて学びます。

  • MACアドレスを問い合わせるプロトコルであるARPを実装し、日常生活ではMACアドレスを意識しなくて済んでいる理由を確認します。

Image by Susan Q Yin

​第9回

IPアドレスの配布と変換

  • 本章ではIPアドレスを動的に配布したり、インターネット接続時に変換したりする仕組みについて学習します。

  • IPアドレスを割り当てるプロトコルであるDHCPや、セキュリティ上も重要なアドレス変換技術であるNATを実装します。

  • 日常生活の中で、特に自分のデバイスにIPアドレスを設定しなくてもネットワークに接続できている理由を学びます

Image by israel palacio

​第10回

コネクションと信頼性

  • 本章では通信におけるコネクションと信頼性、そしてコネクション型プロトコルであるTCPについて学習します。

  • TCPヘッダを導入し、3ウェイハンドシェイクによるコネクション確立の流れを実装して確認します。

  • コネクションレス型のプロトコルであるUDPと比較により、パケットロスと信頼性について学びます。

Image by Vedrana Filipović

​第11回

確認応答と再送制御

  • 本章ではTCPの信頼性を実現するための確認応答と、パケットロスに対する再送制御の仕組みについて学習します。

  • シーケンス番号を用いたセグメントの特定と、確認応答メッセージであるACKを実装します。

  • 大きなファイルを送信するとき、データがどのように分割され、受信側で組み立てられているかを学びます

Image by Alvaro Reyes

​第12

輻輳とウインドウ制御

  • 本章ではネットワークの混雑を表す輻輳と、それを防ぐためのTCPのウインドウ制御について学習します。

  • Tahoe, Renoなどの古典的な輻輳制御アルゴリズムの実装を通して、ウインドウ制御の考え方を学びます。

  • 混雑による輻輳と遅延増大を確認し、多くの人やサービスが共同で利用するネットワークの性質について学びます。

Image by Mickey O'neil

​第13回

待ち行列と通信品質

  • 本章ではメモリでの転送待ち遅延とスケジューリングと通信品質の関係について学習します。

  • 機器のメモリを表すキューと、適切な順番でパケットを読み出すスケジューラを実装します。

  • 電話やファイル転送などアプリケーションの特性に応じた優先制御や、ユーザ間の公平性を保つ仕組みを学びます

Image by charlesdeluvio

​第14

​アプリケーションとデータ転送

  • 本章ではテキストやファイル、メールなどを転送するアプリケーションプロトコルについて学習します。

  • TCP以下のレイヤが汎用的だったのに対して、アプリケーションごとに最適なプロトコルが開発されていることを学びます。

  • ファイル転送などを題材に、日常的に利用しているアプリケーションの動く仕組みについて学びます。

Image by Sixteen Miles Out

​第15回

暗号化と鍵交換

  • 本章ではインターネットのセキュリティを支える暗号化と鍵交換の仕組みについて学習します。

  • HTTPSにおいて必須となるSSL/TLSの鍵交換を行うハンドシェイクの流れを実装します。

  • ネットワークにおけるセキュリティの重要性と、暗号化の基本的な技術について学びます

Image by Nina

​演習課題の解答

各章の演習課題に対する解答・サンプルコードと解説を以下にまとめてあります。

bottom of page