規模に応じた柔軟なネットワークを構築する鍵は可変長のネットマスクにあり。さまざまなブロードキャスト・アドレスについても解説。
IPアドレスは32bitの数値であり、それぞれの値がユニークでありさえすれば、管理者が自由に好きな数値を選択して、各ホストに付けることができると思うかもしれない。だが、IPアドレスの付け方には幾つかの基本的なルールがあるので、ここではそれについてまとめておこう。
まず重要な概念として、IPアドレスの「アドレス・クラス(address class)」という分類方法がある。最近はサブネットやCIDR(後述)などにより、その重要性が薄れてきているが、それでもネットワークの設計などを行うときには、必ず考慮しなければならない重要な概念であるので(デフォルトのアドレス・クラスというものが存在するから)、ぜひ理解しておいていただきたい。具体的には、このデフォルトのアドレス・クラスを元にして、さらにサブネット化やCIDRへと、IPアドレスの意味付けが少しずつ変わってきている。
アドレス・クラスとは、IPアドレスの値によって、IPアドレスを幾つかのカテゴリに分類したものである。次の図に示すように、IPアドレスの最上位部分のビット・パターン(図中の赤い部分)の値によって、「クラスA」から「クラスE」までの5つに分類されている。
全部で5つあるクラスのうち、ネットワーク上の各ノードにはクラスA~CのうちのどれかのIPアドレスを付ける必要がある(実際には後述するように、ブロードキャスト用のIPアドレスなどのために、幾つか利用できないIPアドレスがある)。
アドレス・クラスの違いは、デフォルトのネットマスクの違いとなって現れる。前回述べたように(「第7回 IPアドレスとネットマスク―1.IPアドレスとは」)、IPアドレスは「ネットワーク・アドレス部」と「ホスト・アドレス部」の2つから構成されている。ネットワーク・アドレス部を長くするとホスト・アドレス部が短くなり、逆にネットワーク・アドレス部を短くすると、ホスト・アドレス部が長くなる。ネットワーク・アドレス部が長くなるということは、表現できる(識別できる)ネットワークの数が多くなるが、その分、1つのネットワークに接続できるホストの総数が少なくなるということである。逆にネットワーク部を短くすると、表現できるネットワークの総数は少なくなるが、1つのネットワーク内に接続できるホストの総数は多くなる。
クラスAからクラスCまでのアドレス・クラスでは、それぞれ以下のようなデフォルトのネットマスクの値(=ネットワーク・アドレスとホスト・アドレスを分けるためのマスク値)が決まっている。
■クラスの使い分け
以上のように、クラスが変わると、表現できるネットワークの数もその中に収容できる最大ホスト数も変わることになる。そのため、実際にネットワーク・アドレスやホスト・アドレスをどのように割り振るかは、使用するネットワークの規模に応じて決めることになる。一般的には、イーサネットの1セグメントを1つのネットワーク・アドレスに対応させるのが普通なので(それぞれのセグメントをルータで接続して、全体的なネットワークを構築する)、それぞれのイーサネット・セグメントに何台のホストを接続するかによって、どのクラスを使用するかを選択するとよい。
例えば、1つのイーサネット・セグメントに接続するホストの数が最大でも200台程度ならば、クラスCのIPアドレスを使ってネットワークを構築すればよいだろう。つまり、各ネットワーク(=イーサネット・セグメント)には192.168.0~239.255.255のいずれかを割り当て、それぞれのネットワーク内のホストには、1byteのホスト・アドレスを割り当てればよい。
1セグメントに接続するホストの数がもっと多い場合や、もしくは、管理の都合などでもっと大まかにホスト・アドレスを割り当てるのならば(例:ネットワーク機器のアドレスは10~99、サーバ系は100~199、クライアント系200~などというように、識別しやすいように割り当てたいのならば)、クラスBを使うという方法もあるだろう。
以上のようなクラスA/B/CというIPアドレスの分類は、ネットワークの規模に応じてIPアドレスを使い分けるために決められたものである。だがIPアドレスの値による固定的なネットワーク・マスクでは、あまり柔軟にネットワークを構築することができないという問題点がある。例えば、複数あるネットワーク・セグメントのうち、そのほとんどは総ホスト数が250台以下だが、そうでないネットワーク・セグメントも幾つかあるとする。このような場合は、クラスCで全ネットワークを構成することはできず、幾つかはクラスBにしなければならない。管理する都合からいえば、すべてを同じクラスにして、系統立てて管理したいところだ。
そこで、ユーザー自身が自由にネットワーク・アドレスとホスト・アドレスを決定できるようにするために、TCP/IPでは「サブネット分割」という手段が用意されている。これは、クラスごとのデフォルトのネットワークをさらに細かく分割して、より小さな「サブネット」として取り扱うという手法である。いままではIPアドレスを「ネットワーク・アドレス」と「ホスト・アドレス」の2つに分けていたが、サブネット対応のTCP/IPネットワークでは、新たに「サブネット・アドレス」部を設けている。つまりIPアドレスを「ネットワーク・アドレス」と「サブネット・アドレス」「ホスト・アドレス」の3つに分けるのである。
新たに用意される「サブネット・アドレス」は、もともとは「ホスト・アドレス」として使われていた部分である。ホスト・アドレスの上位何bitかをサブネットの番号として扱う(サブネット・アドレスは、ネットワーク・アドレスに隣接するように分ける)。元のネットワークをいくつのサブネットに分けるかはネットワークの構成に応じて自由に決めてよい。バイト単位で分けておくと、IPアドレスを10進数のドット区切り形式で表現した場合に分かりやすいというメリットがあるが、実際にはビット単位で任意に決めることができる。
サブネット分割した場合のネットマスク値は、「ネットワーク・アドレス」と「サブネット・アドレス」の両方の部分を含むような形のマスクになる。例えばクラスBのデフォルトのネットマスクは「255.255.0.0」であるが、このネットワークをさらに256個のサブネットに分割するならば、最終的なネットマスクは「255.255.255.0」となる。
ネットマスク(2進数表記) | ドット区切り表記 |
---|---|
11111111 11111111 00000000 00000000 | 255.255.0.0 |
11111111 11111111 10000000 00000000 | 255.255.128.0 |
11111111 11111111 11000000 00000000 | 255.255.192.0 |
11111111 11111111 11100000 00000000 | 255.255.224.0 |
11111111 11111111 11110000 00000000 | 255.255.240.0 |
11111111 11111111 11111000 00000000 | 255.255.248.0 |
11111111 11111111 11111100 00000000 | 255.255.252.0 |
11111111 11111111 11111110 00000000 | 255.255.254.0 |
11111111 11111111 11111111 00000000 | 255.255.255.0 |
11111111 11111111 11111111 10000000 | 255.255.255.128 |
11111111 11111111 11111111 11000000 | 255.255.255.192 |
11111111 11111111 11111111 11100000 | 255.255.255.224 |
11111111 11111111 11111111 11110000 | 255.255.255.240 |
11111111 11111111 11111111 11111000 | 255.255.255.248 |
11111111 11111111 11111111 11111100 | 255.255.255.252 |
ネットマスクの例 クラスBのデフォルト・ネットマスク(255.255.0.0)を1bitずつ増加させた場合のネットマスクの値。クラスBのデフォルト・ネットマスクは16bitであるが、ホストの総数などに応じた小さなサブネットに分割することにより、IPアドレス空間を効率よく利用することができる。なお、表の右端の10進数表記における128や192、224、……という数値は、ネットマスクの表記時によく出てくる数値なので、そのマスク・パターン(ビット・パターン)とともによく覚えておいていただきたい。 |
グローバルIPアドレスのサブネット分割
現在では、組織内のホストにプライベートIPアドレス(後述)を割り当ててネットワークを構築するのが普通である。管理者は適当なクラスのプライベートIPアドレスを使って、ネットワーク全体を自由に構築すればよい。例えばクラスCのプライベートIPアドレス(192.168.0.0~192.168.255.255/24)を使えば、サブネット分割を使わなくても256個のネットワーク・アドレスを使用することができる。
だがいまから10年ほど前までは、インターネットに接続する場合は、各ホストにグローバルIPアドレスを割り当てて使うのが普通であった。インターネットに接続するホストの数を公式な機関に申請して、クラスBやクラスCのIPアドレスを“組織に対して”割り当ててもらうのである(現在ではプロバイダ経由でしか割り当てられず、プロバイダを変えるとIPアドレスも変わることになる)。そして組織内では、その公式なクラスBやクラスCのIPアドレスをサブネット分割して、各ネットワークやホストなどに割り当てていた。
クラスごとのデフォルトのネットマスクではなく、ユーザー自身が決めた自由なネットマスク(正確には、デフォルトの「ネットマスク」と、サブネット・アドレスのための「サブネット・マスク」を合成したもの)を使うことにより、ネットワークの規模などに応じて、柔軟にネットワークを構築できるようになった。ホスト数の多いネットワークには大きなサブネットを割り当て、ホスト数の少ないネットワークには小さなサブネットを割り当てればよいからだ。
ただし、TCP/IPの設定や管理を行う場合には、ネットマスクについても常に意識しておく必要がある。クラスのデフォルト・ネットマスクは、IPアドレスごとに固有なので間違うことはないが、サブネットを使ったネットワークでは、正しいネットマスクは環境ごとに異なるからだ。ネットマスクの値を間違えると、ブロードキャストやルーティングなどが正しく行えなくなる可能性がある。TCP/IPの設定やトラブルシューティングでは、IPアドレスだけでなく、必ずネットマスク(やデフォルト・ゲートウェイ、DNSサーバなど)についても確認する必要がある。
サブネットを使うことによりネットワーク構成の柔軟性が増したが、「ネットワーク・アドレス」と「サブネット・アドレス」および「ホスト・アドレス」の3つを意識しなければならない。これに対して現在では、より汎用性の高い、「CIDR(Classless Inter-Domain Routing、サイダー)」というIPアドレスの管理方法が一般的になっている。
CIDRは、もともとはネットワークを集約して(サブネットを集めてより大きなネットワークに変換すること)、ルーティング情報(ルーティング・テーブル)の圧縮を図るために考えられた機能である(詳細については次回のルーティングの項で解説)。すでに説明したように、現在のTCP/IPの仕様では、ネットマスクの値は最上位ビットから何ビット連続して1がセットされているかで表すことができる。例えばIPアドレスが172.16.0.1でネットマスクが255.255.240.0ならば、172.16.0.1/20と表現することができる。このようにCIDRでは、IPアドレスのうち、最上位の方から何bitをネットワーク・アドレス部に使うかという方法で管理している。サブネット分割の場合と違って、IPアドレスの「クラス」や「サブネット・アドレス部」というものを意識せずに(任意のIPアドレスと任意のネットマスク長を組み合わせることができる)、すべてのIPアドレスを「IPアドレス」と「ネットマスク(のビット数)」だけで統一的に管理している。
このようにしてネットワーク・アドレスを扱うことにより、自由にルートの集約や分割が可能になる。例えば172.16.0.0/20と172.16.16.0/20という2つのネットワークがあった場合、これをまとめて172.16.0.0/19と表現することもできる(上位から19bitが同じため)。このようにして、ルーティング・テーブルのエントリ数を節約することにより、ルータの負担を減らすことができるなどの効果がある(詳細は次回)。インターネットの世界では、このCIDRにより、世界的なルーティング情報の集約や管理などを行っている。またネットワークの規模に応じた適切なアドレス割り当てができるというメリットもある(例:ホスト数が1000台程度ならば、ホスト部が10bitのネットワーク・アドレスを割り当てればよい。従来ならばクラスBが必要だった)。
IPアドレスは単なる32bitの数値であり、IPアドレスによって各ホストはお互いを識別している。ほとんどのIPアドレスは、各ホスト・アドレスやネットワーク・アドレスとして使用しても構わないが、幾つか特別なIPアドレスがあり、ブロードキャストやルーティングなどの特殊な用途で使用されることがある。当然これらのIPアドレスは、ユーザーがホストのIPアドレスとして使用することはできない。ここでは、そのような特別な意味を持ついくつかのIPアドレスについて解説しておく。
※ “{n,h}”という表記は、ネットワーク・アドレス部が“n”で、ホスト・アドレス部が“h”であるようなIPアドレスという意味であり、“-1”は、すべてのビットが1であるような数値、という意味である(数値の -1 は、コンピュータ内部ではすべてのビットが 1 のデータとして扱われているので)。この表記方法は、RFCに準じている。
■{0,0} ― オール0
これは、すべてのbitが0(オール0)のIPアドレスであり、一般的には有効なIPアドレスとしては利用することができない。つまり、あるホストのIPアドレスとして使用することはできないし、このIPアドレスをあて先としてパケットを送信してもいけない。BOOTPやDHCPプロトコルなどを使って、TCP/IPの設定を行う際に、自分自身を表すためのアドレスとして使用されることがある(IPアドレスが未設定であるということを表すために使われる)。
なお、古いTCP/IPの実装では、これをブロードキャスト・アドレスとして使用している場合があったが(初期のBSD UNIXで実装されていたので、「BSDタイプのブロードキャスト」などと呼ばれることがある)、現在ではこれは使用しないことになっている。
■{-1,-1} ― オール1ブロードキャスト
これは、すべてのbitが1(オール1)であるようなIPアドレスのことを指し、正式には「リミテッド・ブロードキャスト(limited broadcast。限定されたブロードキャスト)」で使用される。(イーサネットなどの)同じネットワーク・セグメント上にいる、すべてのホストを対象とするブロードキャスト通信において、パケットのあて先IPアドレスとして使用される。送信元IPアドレスとして使用されることはないし、ホストに付けるIPアドレスとしては使用できない。
■{ネットワーク・アドレス,-1} ― ディレクティッド・ブロードキャスト
これは、ホスト・アドレス部がすべて1であるようなIPアドレスのことであり、正式には「ディレクティッド・ブロードキャスト(directed broadcast。特定の場所へ向けられたブロードキャスト)」で使用される。ホストに付けるIPアドレスとしては使用できない。
例えば、ネットワーク・アドレスとネットマスクが「172.16.0.0/16」ならば、「172.16.255.255」というIPアドレスに相当する。複数のホストを相手とするブロードキャスト通信で使われるあて先アドレスであり、この場合はネットワーク・アドレスが172.16.0.0となっているすべてのホストが対象となる(※)。先のオール1のブロードキャスト(リミテッド・ブロードキャスト)と比べると、通信先のネットワーク・アドレスを限定している点が異なる。
※注 このブロードキャストは、正確には、特定のネットワーク・アドレスに向けたブロードキャストと、特定のサブネット・アドレスに向けたブロードキャスト、および、特定のネットワーク・アドレスに含まれるすべてのサブネット・アドレスに向けたブロードキャストの3種類があるが、CIDR環境ではこれらの違いはなくなり、単に特定のネットワークに向けたブロードキャストになる。通常は、ネットワーク部はそのままで、ホスト部がすべて1になったIPアドレスへのブロードキャストと考えておけばよい。
タイプ | あて先 | 意味 |
---|---|---|
リミテッド・ブロードキャスト | 同一セグメント | 同じローカルのネットワーク・セグメントに接続されているすべてのホストへのブロードキャスト。ネットワーク・アドレスには関係なく、現在のホストが接続されている(イーサネットなどの)ネットワーク・セグメント上のすべてのホストを対象とする。ルータを介したほかのネットワークへは伝播しない。 |
ディレクティッド・ブロードキャスト | 指定されたネットワーク | 指定された(サブ)ネットワーク上のすべてのホストへのブロードキャスト。指定されたネットワークがローカルのネットワークではなく、ルータを介してつながっている先ならば、そこのネットワークまでルータによってパケットが運ばれてから、さらにルータによってブロードキャストされる。 |
2つのブロードキャスト・タイプの違い |
例えば172.16.0.1/16のホストが255.255.255.255へブロードキャストするのと、172.16.255.255へブロードキャストするのでは、どちらも同じセグメント上へのブロードキャストになるので大きな違いはないが(一般的には、このディレクティッド・ブロードキャスト・パケットの方が多く見られる)、(ルータを介して接続された)異なるネットワークへのブロードキャストを行いたければ、ディレクティッド・ブロードキャストを使わなければならない。
もし1つのイーサネット・セグメント上に複数のネットワーク(例:172.16.0.0/24と192.168.0.0/24)が混在していれば、リミテッド・ブロードキャストではすべてのホストにブロードキャストが届くのに対し、ディレクティッド・ブロードキャストならば、どちらか一方のネットワークにしかブロードキャストは届かない。
■{ネットワーク・アドレス,0} ― ディレクティッド・ブロードキャスト
これは、ネットワーク・アドレス部はあるが、ホスト・アドレス部がすべて0というIPアドレスである。先の{0,0}の項で述べたように、これは古い形式のディレクティッド・ブロードキャストであり、現在では使われないことになっている。ホストに付けるIPアドレスとしては使用できない。
■127.xxx.xxx.xxx(xxxは任意の数値)
先頭の1byteが127であるIPアドレス(例:127.0.0.1)は、正式には「ローカル・ループバック・アドレス(local loopback address)」といい、自分自身を指すIPアドレスとして使われる。ホストに付けるIPアドレスとして、ユーザーが明示的に付けることはできない。通常はTCP/IPのプロトコル・スタックが起動すると、自分自身を指すためのIPアドレスとして内部的にこのアドレスを設定する。例えば「telnet 127.0.0.1」を実行すると、自分自身の上で動作しているtelnetサービスにつながることになる。自ホストのIPアドレスが何であれ、常に自分自身を指すことが保障されたIPアドレスである。
以上で述べたことから分かるように、あるネットワークにおいて使用できるIPアドレスにはいくらか制限がある。例えば、ネットワーク・アドレスが172.16.1.0/24だとすると、ネットワーク・アドレスそのもの(172.16.1.0)やディレクティッド・ブロードキャスト・アドレス(172.16.1.255)などに使用される分は、ホストのIPアドレスとして利用することはできない。
言い換えると、各ネットワーク・アドレスのうち、一番下(ホスト部がオール0)と一番上(ホスト部がオール1)は利用できない。そのため、利用可能なホストの数は2つ少なくなることになる。
ネットワーク・アドレスやブロードキャスト・アドレス以外は、すべてユーザーが自由に利用できることになっているが、インターネットに接続するような場合には、ほかのホストとIPアドレスが衝突しないようにしなければならない。一般的には、インターネットに接続するホストにはグローバルIPアドレスを付け、組織内部のネットワークでは、プライベートIPアドレスを付ける。ここではこれらのIPアドレスについて解説しておく。
■グローバルIPアドレス
インターネットに接続するホストは、それぞれが互いに異なるIPアドレス(グローバルIPアドレス)を持つ必要がある。グローバルIPアドレスは、公的な機関(IANA:Assigned Numbers Authority。およびその依頼を受けた組織)によってたがいが重複しないように調整され、それがプロバイダなどを通じてユーザーに付与される。
■プライベートIPアドレス
プライベートIPアドレスとは、インターネット上に存在しない(どこの組織にも割り当てられていない)ことが保証され、各組織内だけで自由に使うことが許可されたIPアドレスのことである。現在では、組織内部ではこれらのIPアドレスを使ってネットワークを構築し、インターネットへ接続したければNATやNAPT(IPマスカレード)、Proxyサーバなどを利用するというのが一般的である。
具体的には、以下のようなIPアドレスが利用できる。
クラス | 範囲 |
---|---|
クラスA | 10.0.0.0~10.255.255.255/8 |
クラスB | 172.16.0.0~172.31.255.255/12 |
クラスC | 192.168.0.0~192.168.255.255/16 |
プライベートIPアドレス |
10.0.0.0/8ならば、全部で1600万台分ものIPアドレスが利用可能なので、かなり柔軟にネットワークを構築することができるだろう。例えば組織内のすべてのネットワークやホストに「10.n1.n2.h/24」というIPアドレスを付けることにすると、地域や拠点、ビル、営業所などごとにn1を割り当て、ビル内のフロアや部署ごとにn2を割り当て、そのネットワーク内のホストごとにhを割り当てるというふうに利用できる。
■APIPA用のLINKLOCALアドレス
これは、DHCPなどでIPが割り当てられなかった場合に、各ホストが自動的に使用するIPアドレスである。Windows 9xや2000、XPなどでは、DHCPによるIPアドレスの自動取得が失敗した場合には、「169.254.1.0~169.254.254.255/16」のいずれかのIPアドレスを使用する。これをLINKLOCALアドレスという。
【2003/01/17】「IPアドレス・クラス」の図の説明の部分で、当初クラスDのIPアドレスの範囲を「192.0.0.0~239.255.255.255」と記述しておりましたが、正しくは「224.0.0.0~239.255.255.255」です。また、各クラスごとに利用可能なIPアドレスの総数などに間違いが含まれていました。お詫びして訂正させていただきます。
Copyright© Digital Advantage Corp. All Rights Reserved.
Windows Server Insider 記事ランキング