IPアドレス

  1. TCP/IPにおける各計算機の識別

    TCP/IPの世界においては、各計算機(正確には ノード)をMACアドレスではなく IPアドレスで識別します。IPアドレスは、 4バイト(=32ビット)の長さを持っています(*1)。IPアドレスの値は、 ネットワーク管理者が計算機の設置時に決定し、各計算機に対して ソフト的に設定しておきます。(*2)

    (*1)…… これは、現在普及しているIPバージョン4における大きさです。 現在実験中のIPバージョン6においては、IPアドレスは16バイト (=128ビット)に拡張されることが決まっています。

    (*2)…… 自分のIPアドレスを自動設定するしくみもあります。この場合には、 IPアドレスは設定しません。

    IPアドレスは、通常は 12.34.56.78 のように4バイトの10進数を ドット('.')で区切って表されます。各桁は実際は1バイト(8ビット) ですので、各桁の範囲は0〜255となります。このため、単純には、 2の32乗個のノード(0.0.0.0〜255.255.255.255)を識別することが できます。

  2. TCP/IPにおけるパケットの取り込み判定

    ネットワーク上の各パケットには、各パケットの先頭にある イーサネット・ヘッダの次にIPヘッダ と呼ばれる部分があり、ここに送信元と受信先のIPアドレスが 埋め込まれています。ただし、各ノードでは、受信したパケットの 宛先MACアドレス(IPではない)が自分のMACアドレスと一致した場合にのみ、 このパケットを取り込むようになっています。

    ちょっとごちゃごちゃしてきたので、以下に図示してみます。

    パケット構成(*3)
    イーサネット・ヘッダ IPヘッダ実データ部
    宛先MAC
    アドレス
    送信元MAC
    アドレス
    宛先IP
    アドレス
    送信元IP
    アドレス
    任意データ
    (なくてもよい)

    (*3)…… 実際には、もっといろいろな情報を含んでいます。

  3. IPアドレスの階層化

    IPアドレスを使えば、2の32乗個のノード (0.0.0.0〜255.255.255.255)を識別することができるとお話しましたが、 それを単純にそのまま使ってしまうと、前章で述べた

    「宛先のノードがそのLAN上にあるかどうか」

    を判断できません。この判断を行うために、IPプロトコルでは IPアドレスを「LANを識別する番号」と 「LAN上のノードを識別する番号」の2つに分けることにしました。 前者のことを「ネットワーク・アドレス」、 後者を「ホスト・アドレス」と呼びます。

  4. ネットワーク・アドレスとホスト・アドレス

    これらを4バイトの中のどこで分けるのかというと、単純にバイトの 区切りで分けることにします。たとえば、下図のように先頭1バイトを ネットワーク・アドレス、後ろの3バイトをホスト・アドレスとすると、 このアドレス体系を使用すれば、2の8乗(=256)個のネットワークが 定義され、各々のネットワークの中に2の24乗(=16、777、216) 個のホストアドレスを定義できるようになります。

    ネットワーク
    ・アドレス
    ホスト・アドレス
    1バイト目 2バイト目 3バイト目 4バイト目

  5. IPアドレス・クラス

    ただ、これだと無駄が多い(1つのLAN上に1600万台のノード?) し実状に合わない(世界中にネットワークが256では、 いかにも少なすぎる)ので、実際には以下のようなクラスが定義されています。

    IPアドレス・クラス
    クラス 第1バイト
    (*4)
    アドレス範囲 ネットワーク部
    のビット数
    最大ネット
    ワーク数
    最大ホスト
    数(*5)
    0xxxxxxx 0.0.0.0〜127.255.255.255 7(+1) 2^7(128)(*6) 16,777,216
    10xxxxxx 128.0.0.0〜191.255.255.255 14(+2) 2^14(16,384) 65,536
    110xxxxx 192.0.0.0〜223.255.255.255 21(+3) 2^21(2,097,152) 256
    1110xxxx 224.0.0.0〜239.255.255.255 マルチキャスト・アドレス(*7)
    1111xxxx 240.0.0.0〜255.255.255.255 予約

    (*4)……

    第1バイトは、上記に示すようなビット列から成り立っています。 先頭ビットから見て最初に0が現れる場所により、 所属するクラスを判定します。

    (*5)……

    ただし、ホスト・アドレス0は「そのネットワークそのもの」 を示すアドレスとして、使用しているビットがすべて1のアドレス (255, 255.255, 255.255.255)はブロードキャスト (同一ネットワーク上における同報通信)用(後述)のアドレス として定義されているので、実際に使用できる個数は表示 されている個数−2となります。

    (*6)……

    実際には、127.0.0.1 は自分自身(localhost)を表すものとして 予約されています。

    (*7)……

    ビデオ映像・音声配信に代表されるような、複数ネットワーク上に 同時に同じコンテンツを受信している複数の宛先がある (電波放送のような)アプリケーションで使われます。

  6. プライベート・アドレス

    なお、実際に閉じた LAN の中で IP アドレスを割り振る場合は、 プライベート・アドレス を割り振る必要があります。これは、インターネット上に存在しないことが 保証されているアドレス群です。逆に言えば、これらのアドレスを 決してインターネット上に流してはなりません。

    プライベート・アドレス
    アドレスクラス割り当て可能範囲
    10.0.0.0 〜 10.255.255.255
    172.16.0.0 〜 172.31.255.255
    192.168.0.0 〜 192.168.255.255

    プライベート・アドレスにおいても、前述の 「ネットワーク・アドレス」や「ブロードキャスト・アドレス」に 関する決め事はそのまま当てはまります。

  7. 問題の回答

    さて、問題の「宛先のノードがそのLAN上にあるかどうか」 を知る方法ですが、以下の判断により可能となります。

    宛先IPアドレスのネットワーク部分が、送信元
    IPアドレスのネットワーク部分と異なる場合、
    宛先ノードは別のLAN上にあるものとみなす。

  8. このままでは効率が悪い

    ここで、送信元/宛先IPアドレスのうち、どこまでが ネットワーク部かを識別するための情報(ネットワーク部のビット数) が必要となります。前掲の表によれば、

    「第1バイトの先頭ビットから見て最初に0が現れる場所」
    を調べれば所属するアドレス・クラスがわかり、アドレス・クラスが わかれば定義によりネットワーク部のビット数がわかります。

    ところが、たとえばクラスAを考えてみましょう。クラスAでは最大 16,777,216(-2)のホストが存在しうることになりますが、 そのネットワーク上で1パケット送信するたびごとに1600万台に 送信していたのではたまりません。またイーサネットの制約により、 そのような台数のノードを1つのケーブル上に設置することもできません。

  9. 大規模なネットワークを構築するには

    通常は、1つのLAN上に接続して運用できるノード数は 50台〜100台といわれています。では、クラスAにおいて、 1600万台のノードを設置するためにはどうすればいいでしょうか?

    答え:ネットワークを分割する
    (サブネットワーク化する)

    です。

Prev Next Up