SHOEISHA iD

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

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

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

仮想ネットワーク実装でTCP/IPを学ぼう(3)
― インターネット層の勘所

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


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

IPアドレスについて

 最初にIPアドレスの表記法を説明します。IPアドレスは32ビットもあるのでそのまま表現すると、非常に桁数が大きい数値となり、取り扱うのが大変です。そこでIPアドレスは8ビットごとに.(ドット)記号で区切って192.168.0.12のように表現します。またIPアドレスはただの数値の羅列ではなく意味や構造を持っています。

 IPアドレスはネットワーク部ホスト部の2つで構成されています。ネットワーク部はネットワークを識別するための番号で、インターネット上で同じ番号のネットワークが存在してはなりません。ホスト部はネットワーク内の機器(端末など)を識別するための番号で、同じ番号のホストが存在してはなりません。

 問題は32ビットのIPアドレスを、ネットワーク部とホスト部に対して何ビットずつ割り振るかです。現在もっとも良く使われているIPバージョン4ではクラスという概念で、ネットワーク部とホスト部の割り振るビット数を定めています。

クラスごとのビット数割り当て(IPバーション4)
クラス名 説明
クラスA ネットワーク部8ビット、ホスト部24ビット。先頭のビットが0から始まります。
クラスB ネットワーク部16ビット、ホスト部16ビット。先頭のビットが10から始まります。
クラスC ネットワーク部24ビット、ホスト部8ビット。先頭のビットが110から始まります。
クラスD マルチキャストアドレスと呼ばれるアドレスです。先頭のビットが1110から始まります。このアドレスは、同時に複数の相手と通信するマルチキャストで使用されます。
クラスE 特別に予約されているアドレスです。先頭のビットが1111から始まります。

 なお、ホスト部が全て0または全て1となるアドレスはホストに割り当てられませんので注意してください。

 文章ばかりでは面白くありませんので、このクラス形式のアドレスを目で確認するためにClassAddressTestサンプルプロジェクトを用意しました(記事添付のサンプルファイルの「InternetTest」ディレクトリ参照)。このプロジェクトを実行して見て下さい。どのようにしてアドレスを指定して通信するのかと言うイメージが掴めると思います。

ClassAddressTest
ClassAddressTest
ClassAddressTestの一部抜粋(C#)
//クラスAのネットワーク
string aStr = "15.158.48.2";
MacAddress macA = new MacAddress ( 10, 1 ); //MACアドレスを設定
ClassAddress aAddress = new ClassAddress ( AddressClass.A ); //ルーターのIPアドレスを決定
aAddress.Address = ClassAddress.Parse ( aStr );
Router aRouter = new Router ( macA, aAddress, AddressFormat.ClassAddress, new Lan ( ), net );
aRouter.LanName = "クラスAのネットワーク";

//----------途中省略----------

//クラスAのネットワークからクラスBのネットワークへデータ送信
ClassAddress destination = new ClassAddress ( AddressClass.B, ClassAddress.Parse ( bStr ) ); //宛て先のアドレスを指定
MacFrame data = new MacFrame ( ); //MACフレームを作る
data.TypeOrLength = ( ushort ) EtherType.IP;
IPv4 userData = new IPv4 ( );
userData.DestinationAddress = destination;
data.UsertData = userData; //IPパケットのデータをMACフレームに格納
aRouter.Send ( destination, data ); //AからBへ送信
ClassAddressTestの一部抜粋(VB.NET)
'クラスAのネットワーク
Dim aStr As String = "15.158.48.2"
Dim macA As MacAddress = New MacAddress(10, 1) 'MACアドレスを設定
Dim aAddress As ClassAddress = New ClassAddress(AddressClass.A) 'ルーターのIPアドレスを決定
aAddress.Address = ClassAddress.Parse(aStr)
Dim aRouter As Router = New Router(macA, aAddress, AddressFormat.ClassAddress, New Lan(), net)
aRouter.LanName = "クラスAのネットワーク"

'----------途中省略----------
'クラスAのネットワークからクラスBのネットワークへデータ送信
Dim destination As ClassAddress = New ClassAddress(AddressClass.B, ClassAddress.Parse(bStr)) '宛て先のアドレスを指定
Dim data As MacFrame = New MacFrame() 'MACフレームを作る
data.TypeOrLength = CUShort(EtherType.IP)
Dim userData As IPv4 = New IPv4()
userData.DestinationAddress = destination
data.UsertData = userData 'IPパケットのデータをMACフレームに格納
aRouter.Send(destination, data)    'AからBへ送信

 このアドレス形式でも通信時の不都合はありません。しかし、この方法は8ビット単位の大雑把なものなので無駄が多く、IPアドレスの有効利用ができないという問題があります。例として、300台のネットワークを構築する場合を考えてみます。

 クラスCは8ビットなのでホストを254台接続できます。256台でないことに注意してください。全て0のアドレスと全て1のアドレスは使えないので2を引いた254台となっています。一つ上のクラスBのIPアドレスを取得することになります。しかし、クラスBは16ビットなので65534台もホストを繋げます。つまり、この例では65234個のIPアドレスが使われないままになってしまいます。

 IPアドレスの枯渇問題を耳にしたことがある人も多いと思います。IPアドレスの枯渇問題とは、簡潔に言うと必要な数のIPアドレスがないことです。その原因の一つが、このようにクラスという大雑把な単位で割り振ったことだといわれています。

 それを防ぐために色々な方法が考え出されました。そして、クラスの概念はあまり使用されなくなり、IPバージョン6ではクラスの概念がなくなっています。次節では一番有名なIPアドレスの有効利用法であるサブネットマスクにつてい解説します。

次のページ
サブネットアドレス

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

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

もっと読む

この記事の著者

インドリ(インドリ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング