SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

仮想ネットワークの実装で学ぶTCP/IP

仮想ネットワーク実装でTCP/IPを学ぼう(6)
― セキュリティの基礎と仮想ネットワークの仕様

仮想ネットワーク実装でTCP/IPを学ぼう(6)


  • X ポスト
  • このエントリーをはてなブックマークに追加

仮想ネットワークの概要

 これから作成する仮想ネットワーク「VirtualNetwork」は、今までコンソールアプリケーションでその都度固定的なサンプルプログラムを作って確認していたことを改善するためのものです。

 仮想ネットワークでは、Windowsフォームにより設定を自由に変更できるようにします。また、見やすくするためにWindowsアプリケーションとします。こうすることにより、TCP/IPの動きを理解しやすくなります。

 しかし、今までの復習だけでは面白くありませんので、アプリケーション層のプロトコルを同時に定義することにより、プロトコルについての知識を深めます。この独自プロトコルについては後述するので、この項では仮想ネットワークについての解説を進めます。

 仮想ネットワークは、ローカルネットワーク内の各端末が独自アプリケーション層のプロトコルの送受信を行えるようにします。さらに、独自プロトコルの実行結果、およびデータの送受信の様子を確認できるようにします。

 まず決めなくてはならないのは、各ローカルネットワークをどうするかについてです。今回はSystem.Windows.Forms.Formの派生クラス(LocalNetworkForm)として実現することにします。そして、複数のローカルネットワークを用意する必要があるので、MDI(Multiple Document Interface)アプリケーションとします。

 これで概要が決まったので、詳細な事柄を決定していきます。

IPアドレスの割り振りについての仕様

 ネットワーク構築において、重要なことはIPアドレスの割り振りです。それは、仮想ネットワークでも同じです。そのため、仮想ネットワークではアドレスが重ならないようにします。もし、グローバルアドレスに重複が生じると通信ができなくなるので、絶対に一意のIPアドレスが割り振られるように実装しなくてはなりません。

 割り振り方法は「手動設定」と「自動設定」が考えられますが、実装を簡潔にするために、今回は自動設定とします。一方、プライベートアドレスについては、ローカルネットワーク内で一意にしてください。

 IPアドレスに関する仕様は以上です。次項ではローカルネットワークの仕様について解説します。なお、MACアドレスについても、全体で一意なアドレスを自動的に割り振るものとします。

ローカルネットワークについての仕様

 ローカルネットワークを構成するには、ルータ・ネームサーバ・独自プロトコルのサービスを提供するサーバが必要です。従って、LocalNetworkFormオブジェクトのインスタンスを生成する際には、必ず「Routerオブジェクト」「NameServerオブジェクト」「Serverオブジェクト」のインスタンスが生成されるようにします。

 それに加えて、LANを表すために「LANオブジェクト」のインスタンスと、端末を表す最低1つの「Clientオブジェクト」のインスタンスが必要です。

 以上がローカルネットワークの初期状態です。LocalNetworkFormオブジェクトのインスタンスを生成後についてはこれから述べます。

 端末が1台だけでは面白くないので、自由に追加/削除できるようにします。ただし、最低1台の端末が必要なので、端末の削除機能で0台にはできないようにチェックしてください。

 これで独自プロトコル以外の仮想ネットワークの仕様についての解説は終わりです。次項から独自プロトコルの仕様について解説していきます。

独自プロトコルGraffiti(落書き)の基本仕様

 VirtualNetworkで使用するアプリケーション層のプロトコルについては、よりプロトコルそのものについて知識を深めるために、既存のプロトコルではなく独自に定義します。その名前はGraffiti(落書き)です。

 Graffitiプロトコルは、サーバとクライアントが文字列や図形に関するデータのやり取りを行う、アプリケーションを作るためのプロトコルです。まず、サーバに描画に必要なデータを送り、そのデータを記憶させます。そしてサーバは、クライアントからの要求に対応し、そのデータをクライアントに送ります。データを受信したクライアントは、受信データに基づき自身の画面に描画処理を行います。

 なお、サーバに送るデータは蓄積されるものとします。例えば、文字列と三角形のデータをサーバに送り、そのデータをクライアントが受信した場合、文字列と三角形の両方を描画するものとします。描画する順序は、サーバにデータが到着した順番と同様です。

独自プロトコルGraffitiの詳細仕様

 Graffitiの基本仕様から、クライアントとサーバの画面を確認する必要があります。そこで、フォーム(LocalNetworkFormオブジェクト)には、端末一覧およびサーバの画面を描画する領域が必要です。この領域については、実装がしやすいように描画位置にSystem.Windows.Forms.Panelコントロールを配置することにします。

 また、描画項目を指定するためのコントロールも必要です。それらの画面の仕様については、今回は決定しません。次回で描画方法について解説しますので、配置するコントロールはその際に説明します。

 後はこのプロトコルのフォーマットを決める必要がありますが、そのためにはGDI+プログラミングについての知識が必要なので、GDI+プログラミングを解説した後に決定します。

まとめ

 今回は複数の層にまたがる技術と、総決算として実装する仮想ネットワークの仕様について解説しました。この仮想ネットワークを実装するにはGDI+の知識が必要なので、次回はGDI+プログラミングと独自プロトコルについて解説します。お楽しみに。

参考資料

書籍

ホームページ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
仮想ネットワークの実装で学ぶTCP/IP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5122 2010/05/26 15:58

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング