SHOEISHA iD

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

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

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

仮想ネットワーク実装でTCP/IPを学ぼう
― TCP/IPの基礎と勘所

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


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

 いまや業務システムではネットワーク環境が当たり前になっており、開発者であってもネットワークプロトコルの知識を知らないでは済まされません。しかし、巷に出版されている専門書は、ネットワーク管理本やプロトコルを図解したもの、または非常に高度な前提知識を求められるものがほとんどです。そこで本連載では、プログラマが実際に手を動かして身に付けられるような形で、TCP/IPについて学んでいきます。  

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

はじめに

 エンドユーザーの要求は複雑化の一途を辿り、それに伴って開発者にも多くの知識が求められるようになりました。その一例がネットワークプロトコルの知識です。

 昔はネットワーク管理者が知っていればよい知識でしたが、いまや業務システムではネットワーク環境が当たり前なので、知らないでは済まされません。それに加え、業務システムには様々な問題がつきものです。ですからトラブルが起こった時、障害がどこで発生しているのか素早く判断しなければなりません。

 それらのことを考慮すると、広く使われているTCP/IPプロトコル群を知ることは非常に有益です。しかしながら、巷に出版されている専門書は、その多くはネットワーク管理本もしくはプロトコルを図で説明するものです。著書が知っている限り、プロトコルの実装を解説した本はピアソン・エデュケーション社が出版している『詳解TCP/IP』だけですが、この本はFreeBSD 4.4のカーネルの実装に基づく解説しかなされていないので、非常に高度な前提知識を求められてしまいます。おまけに実地で身に付けようとしても非常に困難です。

 こういった諸事情からネットワークプロトコルは、プログラマが習得し辛い知識だと言えると思います。そこで筆者は今回、プログラマの方がネットワークプロトコルの知識を「手を動かしつつ目で見て身に付けられる」記事を書こうと考えました。この連載を通じて、プログラマの方々がネットワークプロトコルの知識を習得するお手伝いができれば幸いです。

対象読者

  • C#もしくはVB.NETで基本的なプログラミングはできる方。 ※ダウンロードページはこちらです。
  • TCP/IPの動きを身に付けたい方。
  • ネットワークの初心者。

必要な環境

 C#もしくはVB.NETのコンパイラが必要です。お持ちでない方は、マイクロソフト社のホームページにて配布していますので、ダウンロードして入手してください。

この連載が取り扱う範囲

 TCP/IPプロトコル群を題材に取り扱うとき問題となるのは膨大な情報量です。TCP/IPを本当に細部まで知ろうとすれば、書籍にすると数千ページは必要となるでしょう。その膨大な情報をそのまま書いてしまうと、この連載は非常に読み辛いものとなってしまいます。

 そこでこの連載では、TCP/IPの歴史、プロトコルのオプション機能、数多くの個別プロトコルの解説はせずに、筆者が実際にシステム構築をする上で重要だと考えた「TCP/IPの根幹となる部分」を習得するコツを解説します。あらかじめご了承下さい。なお、省略した部分については資料として記事の最後に書きます。

プロトコルとネットワークアーキテクチャ

 TCP/IPプロトコル群はネットワークアーキテクチャと呼ばれるものの一種です。ですからTCP/IPを知るには、ネットワークアーキテクチャとは何かを知らなければなりません。そこでこの項では、簡潔にネットワークアーキテクチャの概要を解説します。

 PC同士が通信するとき何が問題となるでしょうか? それはバイナリデータ(0と1で表現される数値)の取り扱いです。以前の連載でも解説しましたが、PCの頭脳と呼べるCPU(Control Processor Unit)は0と1しか理解できません。ですから、PC同士が通信する時には、あらかじめ一定の形式を定義しておかねばなりません。

 分かりにくいと思いますので少し具体的に言うと、次のような疑問が頭に浮かぶでしょう。

  • 0と1が並んでいるということは、どこからどこまでがデータなのでしょうか?
  • インターネット上でどのようにして送信先の端末を識別しますか?
  • 一つの回線に複数の端末がバイナリデータを送信した場合、どうやってバイナリを解釈するのでしょうか?

 この様なデータ通信での数多くの課題を解決するための取り決めを「プロトコル」と呼びます。CPUと同じくあらかじめバイナリに対して厳密に意味を定義し、それに加えて明確な手順を決めておくとこれらの課題が解決できるのです。

 さらに、それらプロトコルを複数統合したものを「ネットワークアーキテクチャ」と呼びます。なぜ複数必要なのかというと、何でもできる一つのプロトコルを決めたり、フラットなプロトコルを無数に開発してしまうと色々な問題が発生するからです。そこで、プロトコルは通常、役割を階層分けした上で明確な役割を持ったプロトコル定義して、それらを柔軟に組み合わせて使います。これは大変重要な概念なので、次項では階層化をする意味について書きます。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
ネットワークアーキテクチャの階層化

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

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

もっと読む

この記事の著者

インドリ(インドリ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3530 2010/04/27 12:06

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング