IPアドレスとは、簡単にいえば、ネットワーク上の各ノードを区別するために付けられた32bitの数値である(IPv6では128bit幅に拡大されているが、この連載では特に断らない限りIPv4の32bit IPアドレスを対象とする)。そのため、お互いにまったく異なる値になってさえいれば、ネットワーク上の各ノードには自由な数値を割り当てておいてもよいと思うかもしれない。だがTCP/IPネットワークには、大きなネットワークを分割して管理するという機能/目的もあるので、各ノードに対してまったくランダムにIPアドレスを割り当てることはできず、いくつかの守らなければならない規則が存在する。
前回述べたように(連載第6回「1.TCP/IPとは何か?」参照)、TCP/IPでは、ネットワーク全体をフラットな1つのネットワークとして扱うのではなく、いくつかの小さなネットワークの集合体として扱うことになっている。これにより、さまざまなメリットが生まれる。例えば、同一ネットワーク内に存在するノードの数を限定できるので、1つ1つのネットワークの規模が小さくなり、管理しやすくなる。また、各ノード間のトラフィックをそれぞれのネットワーク内だけに限定、局所化できるので、ネットワーク全体の帯域を有効に使用できる。(基本的には)ある2つのノードが通信を行っているとすると、同一ネットワーク上に存在するほかのノードは通信できなくなるが、ネットワーク上のノード数が多くなると、それだけほかの通信の影響を受け、通信できる機会が減ってしまうからだ。
TCP/IPでは、このような分割されたネットワーク(の集合体)を実現するために、32bitのIPアドレスを次のように2つのパート(部分)に分割して解釈することになっている。
ここでは例として、「192.168.1.128」というIPアドレスを取り上げている。なおIPアドレスは、実際には単なる32bitの数値なので、10進数でそのまま「3232235904」と表現してもよさそうなものだが、これでは非常に分かりにくいので、通常は1オクテットずつ区切って上位(左側)から順番に10進数で表現し、間に「.(ピリオド)」を入れることになっている。このような表記方法を「ドット区切り表記方法(dotted notation)」という(ドット付き表記ともいう)。
IPアドレスはこのように「ネットワーク・アドレス」と「ホスト・アドレス」という2つの部分から構成され、2つ合わせて1つのIPアドレスとなることを理解しておいていただきたい。図では上位3オクテット「192.168.1」の部分が「ネットワーク・アドレス部」、最下位の1オクテット「128」の部分を「ホスト・アドレス部」としている。実際にはIPアドレス中のどの部分がネットワーク・アドレスで、どの部分がホスト・アドレスであるかはネットワークの構成によって変わるのだが(この構成は、オクテット単位ではなく、ビット単位で自由に分けることができる)、それについては次回詳しく触れることにする。
IPアドレスは「ネットワーク・アドレス」と「ホスト・アドレス」という2つの部分から構成されているが、それが実際にどのような意味を持つかということについて説明しておこう。次の図を見ていただきたい。これは、ルータで相互に接続された3つのネットワークからなるTCP/IPネットワークの例である。
3つのネットワークには、それぞれ「ネットワーク・アドレス N1」、「ネットワーク・アドレス N2」、「ネットワーク・アドレス N3」という番号が付けられ、さらに各ネットワーク内には「ホスト・アドレス H1」、「ホスト・アドレス H2」、……、という番号を持つノード(TCP/IPでは「ホスト」と呼ぶ)が存在している。
これから分かるように、ネットワーク・アドレスとは、各ネットワークを区別するための識別番号であり、ホスト・アドレスとは、そのネットワーク内における各ホストを区別するための識別番号である。人間に例えれば、名字と名前(姓と名)のような関係といえばよいだろうか。
このように、TCP/IPでは、IPアドレスを「ネットワーク・アドレス」と「ホスト・アドレス」という2つの部分に分けて取り扱うことになっている。ただし場合によってはネットワークをさらにいくつかに分割した「サブネットワーク」として取り扱うこともあり(もしくは複数のネットワークをまとめて1つのより大きなネットワークと見なすこともある。詳細は次回)、ネットワーク・アドレスとホスト・アドレスの間に、「サブネット・アドレス(サブネットワーク・アドレス)」と呼ばれる中間的なパートを想定することがある。そういう意味では、「IPアドレスは2つの部分から成り立っている」というよりは、「階層的なネットワーク・アドレスと、ホスト・アドレスから成り立っている」と理解するのがよいかもしれない(ほとんどの場合は2階層しかないと考えておけばよいが)。
IPアドレスを複数のネットワークに分けることにより、ネットワーク・トラフィックの局所化や管理の容易化などというメリットがあることはすでに述べた。そして、これを実際に実現するための手段が、IPアドレスを「ネットワーク・アドレス」と「ホスト・アドレス」に分けるというこの方法である。ネットワークの管理者は、論理的に分離したいネットワークごとに異なるネットワーク・アドレス(上の図でいえばN1やN2、N3など)をそれぞれのネットワークに割り当て、さらにそのネットワーク内のホストごとに、異なるホスト・アドレス(H1やH2、H3、H4など)を割り当てる。IPアドレスはネットワーク・アドレスとホスト・アドレスを組み合わせたものであるから、このような割り当てにより、結果的にはすべてのホストに対して異なるIPアドレスが割り当てられることになる(同じネットワーク上のホストはすべて同じネットワーク・アドレス値を持っていなくてはならない)。
ホスト・アドレスの役割はいうまでもなく、同一ネットワーク内における、お互いのホストを識別するための番号である(ネットワークが異なれば、同じホスト番号を持つホストが存在してもよい。32bitのIPアドレス全体として重複しなければよいのである)。例えば図中でネットワークN2におけるH1から、同じN2上のH2と通信をしたければ、TCP/IPの下位ネットワーク(イーサネットなど)を使って、N2をあて先にしたパケットを送信すればよい。これに対して、異なるネットワーク上のホストと通信する場合は、まずはそのネットワークまでパケットを届ける必要がある。これを「ルーティング」といい、ルータが実際にその作業を担当する。
ネットワーク・アドレスは、ネットワークを識別するための手段であるが、TCP/IPにおけるパケットのルーティングにも重要な役割を果たしている。上の図にあるように、TCP/IPでは各ネットワークの間にはルータが配置され、すべてのネットワークがいずれかのルータを介して相互に接続されている。同一ネットワーク上のホスト間で通信する場合は、ルータは何もしないが、異なるネットワーク上に存在する2つのホストが通信を行う場合には、ルータがパケットを中継し、目的のネットワークまでパケットを届けるというふうに動作している。もし隣同士のネットワークでなければ(2つ以上先のネットワークと通信したければ)、ルータによる中継が何段も行われ、パケットが順次転送されていくことになる。例えば上の図でいえば、ネットワークN1からN3のホストへ通信を行おうとすると、N1上のホストから発信されたパケットはまずN2へ中継され、さらにそこからN3へと中継されることになる(途中のネットワークN2は通過するだけであり、その中に存在するホストは通信には関与しない。だがネットワークの両端にあるルータ間でパケットが流れるので、その分だけN2のネットワーク帯域が消費されることになる)。
このようなルーティングによるネットワークの相互接続はTCP/IPの基本機能であるが、このときに重要な役割を果たすのが「ネットワーク・アドレス」である。ルータはIPアドレスに基づいてネットワーク間でパケットを中継するものとされているが、正確には、IPアドレス全体を見るのではなく、ネットワーク・アドレス部に基づいてどこのネットワークへパケットを中継するかを判断している。ホスト・アドレス部はルーティングには使われない。
まとめておくと、IPアドレスはネットワーク・アドレスとホスト・アドレスの2つから構成され、ネットワーク・アドレスは、ネットワーク全体でお互いのネットワークを識別するために使われ、ホスト・アドレスは、同一ネットワーク内でお互いのホストを識別するために使われる、ということである。
Copyright© Digital Advantage Corp. All Rights Reserved.