IPアドレスIPアドレスTCP/IPにおける各計算機の識別TCP/IPの世界においては、各計算機(正確にはノード)をMACアドレスではなくIPアドレスで識別します。IPアドレスは、4バイト(=32ビット)の長さを持っています(*1)。IPアドレスの値は、ネットワーク管理者が計算機の設置時に決定し、各計算機に対してソフト的に設定しておきます。(*2)(*1)......これは、現在普及しているIPバージョン4における大きさです。現在実験中のIPバージョン6においては、IPアドレスは16バイト(=128ビット)に拡張されることが決まっています。(*2)......自分のIPアドレスを自動設定するしくみもあります。この場合には、IPアドレスは設定しません。ように4バイトの10進数をドット('.')で区切って表されます。各桁は実際は1バイト(8ビット)ですので、各桁の範囲は0〜255となります。このため、単純には、2の32乗個のノード(0.0.0.0〜255.255.255.255)を識別することができます。TCP/IPにおけるパケットの取り込み判定ネットワーク上の各パケットには、各パケットの先頭にあるイーサネット・ヘッダの次にIPヘッダと呼ばれる部分があり、ここに送信元と受信先のIPアドレスが埋め込まれています。各ノードでは、受信したパケットの宛先MACアドレス(IPではない)が自分のMACアドレスと一致した場合にのみ、このパケットを取り込むようになっています。してきたので、以下に図示してみます。宛先MACアドレス送信元MACアドレス宛先IPアドレス送信元IPアドレス任意データ(なくてもよい)(*3)......実際には、もっといろいろな情報を含んでいます。IPアドレスの階層化IPアドレスを使えば、2の32乗個のノード(0.0.0.0〜255.255.255.255)を識別することができるとお話しましたが、それを単純にそのまま使ってしまうと、前章で述べた「宛先のノードがそのLAN上にあるかどうか」を判断できません。この判断を行うために、IPプロトコルではIPアドレスを「LANを識別する番号」と「LAN上のノードを識別する番号」の2つに分けることにしました。後者を「ホスト・アドレス」と呼びます。ネットワーク・アドレスとホスト・アドレスこれらを4バイトの中のどこで分けるのかというと、単純にバイトの区切りで分けることにします。下図のように先頭1バイトをネットワーク・アドレス、後ろの3バイトをホスト・アドレスとすると、このアドレス体系を使用すれば、2の8乗(=256)個のネットワークが定義され、各々のネットワークの中に2の24乗(=16、777、216)個のホストアドレスを定義できるようになります。ネットワーク・アドレスホスト・アドレス1バイト目2バイト目3バイト目4バイト目IPアドレス・クラスただ、これだと無駄が多い(1つのLAN上に1600万台のノード?)し実状に合わない(世界中にネットワークが256では、いかにも少なすぎる)ので、実際には以下のようなクラスが定義されています。最大ホスト数(*5)A0xxxxxxx0.0.0.0〜127.255.255.2557(+1)2^7(128)(*6)16,777,216B10xxxxxx128.0.0.0〜191.255.255.25514(+2)2^14(16,384)65,536C110xxxxx192.0.0.0〜223.255.255.25521(+3)2^21(2,097,152)256D1110xxxx224.0.0.0〜239.255.255.255マルチキャスト・アドレス(*7)E1111xxxx240.0.0.0〜255.255.255.255予約(*4)......第1バイトは、上記に示すようなビット列から成り立っています。所属するクラスを判定します。255.255.255)はブロードキャスト(同一ネットワーク上における同報通信)用(後述)のアドレスとして定義されているので、実際に使用できる個数は表示されている個数−2となります。自分自身(localhost)を表すものとして予約されています。(*7)......ビデオ映像・音声配信に代表されるような、複数ネットワーク上に同時に同じコンテンツを受信している複数の宛先がある(電波放送のような)アプリケーションで使われます。アドレスを割り振る場合は、プライベート・アドレスを割り振る必要があります。これは、インターネット上に存在しないことが保証されているアドレス群です。逆に言えば、これらのアドレスを決してインターネット上に流してはなりません。192.168.255.255プライベート・アドレスにおいても、前述の「ネットワーク・アドレス」や「ブロードキャスト・アドレス」に関する決め事はそのまま当てはまります。問題の回答さて、問題の「宛先のノードがそのLAN上にあるかどうか」を知る方法ですが、以下の判断により可能となります。宛先ノードは別のLAN上にあるものとみなす。このままでは効率が悪いここで、送信元/宛先IPアドレスのうち、どこまでがネットワーク部かを識別するための情報(ネットワーク部のビット数)が必要となります。「第1バイトの先頭ビットから見て最初に0が現れる場所」を調べれば所属するアドレス・クラスがわかり、アドレス・クラスがわかれば定義によりネットワーク部のビット数がわかります。ところが、たとえばクラスAを考えてみましょう。クラスAでは最大16,777,216(-2)のホストが存在しうることになりますが、そのネットワーク上で1パケット送信するたびごとに1600万台に送信していたのではたまりません。イーサネットの制約により、そのような台数のノードを1つのケーブル上に設置することもできません。大規模なネットワークを構築するには通常は、1つのLAN上に接続して運用できるノード数は50台〜100台といわれています。クラスAにおいて、1600万台のノードを設置するためにはどうすればいいでしょうか?答え:ネットワークを分割する(サブネットワーク化する)です。