IPアドレスとポート


目次

はじめに
 ・IPアドレス構成図
サブネット・マスク
 ・サブネット構成図
 ・Bクラスのサブネットとアドレスの関係
 ・Cクラスのサブネットとアドレスの関係
ネット・マスク
 ・CIDR(Classless Inter-Domain Routing)
グローバル・アドレスとプライベート・アドレス
特殊な意味を持つIPアドレス
IPアドレスの設定
ポート

一つ前へ


はじめに

 現在一般的に使われているIPアドレスはIPv4(Internet Protocl version 4)と呼ばれるものです。そのなかではIPアドレスは32bitで表されます。イーサネット・アドレスと同様にこのまま表記したのでは人間にとってわかりづらいので、IPアドレスは各オクテットを”.”で区切り、
 10.41.157.120
のように1オクテットを10進数で表現するようになっている。
 上記のようなIPアドレスは、ネットワーク部とホスト部に分けることができる。ネットワーク部はインターネット中に存在する個々のネットワークを識別するのに用いられ、ホスト部はそのネットワーク中に存在するホスト(パソコン)を識別するのに用いられるものである。どのようにネットワーク部とホスト部を識別するかといえば、IPアドレスの上位部分のビット・パターンを利用している。(下図参照)

 図のとおり、MSBが"0"の場合は、クラスAと呼ばれ、1〜7ビットがネットワーク部、残りがホスト部となる。同様に上位2ビットが"10"の場合は、クラスBと呼ばれ、2〜15ビットがネットワーク部、残りがホスト部となる。また、上位3ビットが"110"の場合は、クラスCと呼ばれ、3〜23ビットがネットワーク部、残りがホスト部となる。
 クラスA、B、Cの違いは、図を見ればわかるとおり、ホスト部のビット長が長ければ、それだけ同一ネットワークに多くのホストを接続できるが、IPアドレスはビット長が固定されているので相対的にネットワーク部が短くなり、多くのネットワークを作ることができなくなる。たとえば、クラスAを使用したネットワークでは、ネットワーク・アドレスとして7ビット使用できるが、実際は0、127は予約されているので、126個が使えることになる。逆に、ホスト部には24ビットが割けるので1677214台のノードを接続できるようになる。これとは正反対にクラスCでは多くのネットワーク・アドレスを持てるが、1つのネットワーク・アドレス内に接続できるノードは少なくなる。
サブネット・マスク
 IPアドレスがネットワーク部とホスト部に分かれていることから、異なるセグメント(ネットワーク)には異なるネットワーク・アドレスを用いなければならない。IPアドレスは有限資源である、数台のコンピュータが接続されただけのネットワークにもきちんとネットワーク・アドレスを与えなければならないため、あっとゆうまにIPアドレスが足りなくなってしまう。そこで登場するのが、サブネッティングという技術である。
 サブネット
 ネットワーク・アドレスを細分化するためにネットワーク部を削るわけにはいかないので、ホスト部を削り、その部分を利用してネットワーク・アドレスとして利用していけば、無駄なアドレスを消費せずにすむ。
 たとえば、クラスBを1つ取得していた場合、1つのネットワーク部に65534ノードが接続できるが、実際に1つのネットワークに65534の端末を接続するようなネットワークは考えにくい、実際に使用するにはいくつかのネットワークに分割する。そこで、
 138.243.1
 138.243.2
 138.243.3
  ・
  ・
  ・
 138.243.254
のように、ネットワーク判別識別として上位3オクテットを使えば、254個のネットワークアドレスが持て、1つのネットワークにそれぞれ254個のノードが接続できることになる。
 上記の例でネットワーク部の拡張として用いた3オクテット目
 138.243.254
 (ここの254の部分)
をサブネットと呼ぶ。サブネットは上記の例のように固定的に8ビットを用いる必要はなく、ホスト部の何ビットを用いてもよい。たとえば、138.243というクラスBを下図のようにホスト部上位4ビットをサブネットとして使うこともでき、サブネット部とサブネット・アドレスの関係は下表のようになる。


クラスB(例:138.243)におけるサブネットとサブネット・アドレスの関係
マスク数サブネット・マスクサブネット部ビット長サブネット・アドレス
(NW・アドレス)
アドレス範囲アドレス個数
ネットワーク部ホスト部
0255.255.0.0-1616138.243.0.0138.243.0.1〜254.25465536
1255.255.128.0-1715--32768
2255.255.192.0011814138.243.64.0138.243.64.1〜127.25416384
10138.243.128.0138.243.128.1〜191.254
3255.255.224.00011913138.243.32.0138.243.32.1〜63.2548192
010138.243.64.0138.243.64.1〜95.254
011138.243.96.0138.243.96.1〜127.254
100138.243.128.0138.243.128.1〜159.254
101138.243.160.0138.243.160.1〜191.254
110138.243.192.0138.243.192.1〜223.254
4255.255.240.000012012138.243.16.0138.243.16.1〜31.2544096
0010138.243.32.0138.243.32.1〜47.254
0011138.243.48.0138.243.48.1〜63.254
0100138.243.64.0138.243.64.1〜79.254


   ・
   ・
1110138.243.224.0138.243.224.1〜239.254
5255.255.248.0000012111138.243.8.0138.243.8.1〜15.2542048
00010138.243.16.0138.243.16.1〜23.254
00011138.243.24.0138.243.24.1〜31.254
00100138.243.32.0138.243.32.1〜39.254


   ・
   ・
11110138.243.240.0138.243.240.1〜247.254
6255.255.252.00000012210138.243.4.0138.243.4.1〜7.2541024
000010138.243.8.0138.243.8.1〜11.254
000011138.243.12.0138.243.12.1〜15.254
000100138.243.16.0138.243.16.1〜19.254


   ・
   ・
111110138.243.248.0138.243.248.1〜251.254
7255.255.254.00000001239138.243.2.0138.243.2.1〜3.254512
0000010138.243.4.0138.243.4.1〜5.254
0000011138.243.6.0138.243.6.1〜7.254
0000100138.243.8.0138.243.8.1〜9.254


   ・
   ・
1111110138.243.252.0138.243.252.1〜253.254
8255.255.255.000000001248138.243.1.0138.243.1.1〜1.254256
00000010138.243.2.0138.243.2.1〜2.254
00000011138.243.3.0138.243.3.1〜3.254
00000100138.243.4.0138.243.4.1〜4.254


   ・
   ・
11111110138.243.254.0138.243.254.1〜254.254
9255.255.255.128000000001257138.243.0.128138.243.0.129〜0.254128
000000010138.243.1.0138.243.1.1〜1.126
000000011138.243.1.128138.243.1.129〜1.254
000000100138.243.2.0138.243.2.1〜2.126


   ・
   ・
111111110138.243.255.0138.243.255.1〜255.126


クラスC(例:192.168.10)におけるサブネットとサブネット・アドレスの関係
マスク数サブネット・マスクサブネット部ビット長サブネット・アドレス
(NW・アドレス)
アドレス範囲アドレス個数
ネットワーク部ホスト部
0255.255.255.0-248192.168.10.0192.168.10.1〜10.254256
1255.255.255.128-257--128
2255.255.255.19201266192.168.10.64192.168.10.65〜10.12664
10192.168.10.128192.168.10.129〜10.190
3255.255.255.224001275192.168.10.32192.168.10.33〜10.6232
010192.168.10.64192.168.10.65〜10.94
011192.168.10.96192.168.10.97〜10.126
100192.168.10.128192.168.10.129〜10.158
101192.168.10.160192.168.10.161〜10.190
110192.168.10.192192.168.10.193〜10.222
4255.255.255.2400001284192.168.10.16192.168.10.17〜10.3016
0010192.168.10.32192.168.10.33〜10.46
0011192.168.10.48192.168.10.49〜10.62
0100192.168.10.64192.168.10.65〜10.78


   ・
   ・
1110192.168.10.224192.168.10.225〜10.238
5255.255.255.24800001293192.168.10.8192.168.10.9〜10.148
00010192.168.10.16192.168.10.17〜10.22
00011192.168.10.24192.168.10.25〜10.30
00100192.168.10.32192.168.10.33〜10.38


   ・
   ・
11110192.168.10.240192.168.10.241〜10.246
6255.255.255.252000001302192.168.10.4192.168.10.5〜10.64
000010192.168.10.8192.168.10.9〜10.10
000011192.168.10.12192.168.10.13〜10.14
000100192.168.10.16192.168.10.17〜10.18


   ・
   ・
111110192.168.10.248192.168.10.249〜10.250
 上記の表で注意しなければならないのは、サブネット部が all"0" と all"1"が載っていない。その理由は実際に値を当てはめてみるとよくわかる。例えばBクラスの4ビットマスクで、サブネット部"0000"を用いてネットワーク・アドレスを表示した場合、ネットワーク・アドレスはホスト部を全て"0"で埋めたものであるから
 138.243.0.0 となる。これは138.243というクラスBネットワーク全体を表しているものとダブルため使用できない。同様にサブネット"1111"の場合は、ホスト部を全て1で埋めたブロードキャストを考えると
 138.243.255.255となる。これは138.243全体に向けたブロードキャスト・アドレスと重なるので使用しないようになっている。

◆サブネット構成時のルール

 サブネットに関する誤解で最も多いのは、”いったんアドレス空間を分割したら、サブネット番号は好きなように割当てができる”というものである。これは厳密には正しくない。伝統的なサブネットの構成における第1のルールは、”同一ネットワーク上のサブネットは隣接していなければならない”である。別の言い方をすると、”ネットワーク内の各サブネットは、同一ネットワークの他のサブネットのすくなくとも1つと直接接続している必要がある” となる。図1はこの構成を満たした構成である。

 これに対し図2の構成はどうだろうか。サブネット 133.170.31.0 は、ネットワーク 133.170.0.0 上にあるどのサブネットとも直接接続していない。パケットをネットワーク 133.170.0.0 の他のネットワークに送るためには、192.5.100.0 というネットワークを経由するしかない。これはルールから外れており、不適切な設計である。次に、図3のような構成を考えてみよう。サブネット 133.170.31.0 は、ネットワーク 133.170.0.0 のサブネットを経由してサブネット 133.170.1.0 に接続されているのでルールに則している。この設計ならうまく機能するだろう。
 しかし、なぜこのようなルールが必要なのだろうか? サブネットによる経路制御は、伝統的なIPネットワークの下位に1つの階層構造をもたらした。このため、単純だった2層構造がいくぶん複雑な3層構造に変化したのである。ネットワークの外部にあるルータは、ネットワークがサブネットに分割されているかどうかを認識していない。パケットがネットワークに到達するための経路の選択は、サブネットを使わない場合と同様、アドレスのネットワーク部にもとづいて単純におこなわれる。サブネットマスクが経路制御に影響を与えるのは、パケットがそのネットワークに接続しているルータに到達してからのことである。
 ここで、図2のHというホストに注目してみよう。このホストはネットワーク 133.170.0.0 のサブネットに直接接続していない。ホストHから送出される 133.179.2.1 宛のパケットは、明らかにルータBに送られるべきである。一方、133.170.31.1 宛のパケットはルータCに送られるべきである。IPにおける経路制御アルゴリズムによれば、同一のリモート・ネットワークを目的地とするパケットは、基本的にすべて同じ経路を使って送るという前提になっている。したがって、ホストHは 133.170.0.0/16 のネットワーク全体に対する経路を1つしかもたない。そのためサブネットを区別できず、問題が発生してしまう。さらにこの場合は、ホストHに対する正しいデフォルトルータを選ぶことさえ不可能である。以上が、サブネットが隣接していなければならない理由である。ホストルートを使えばむりやりこの構成で運用することもできるが、そのような設定を維持しようとしてもすぐに手に負えなくなるだろう。
 それでは、図3のホストHはどうだろうか。この場合、ホストHは 133.170.0.0/16 に対する単一の経路を経路テーブルに設定できるので、経路制御はうまく機能してパケットが目的地に届く。経路がすべてのサブネットに対して最適であるとはいえないが、動作することは確かである。ホストHは 133.170.0.0/16 のサブネットの分割にたついては認識していないので、ネットワークのすべてのサブネットに対して最適な経路を用意するのは不可能である。これは、ネットワークを3層構造で設計したために発生する問題である。クラスレスな経路制御を行えばこれらの問題は解消されすが、これについては後述する。


 
ネットマスク

 1つのネットワーク・アドレスをサブネット化して使用する場合、どこからどこまでかホスト部でどこからどこまでサブネット部だか分からない。そこで、ネットワーク部を表すビットすべて"1"とし、ホスト部を表すビットをすべて"0"にしたマスク・パターンが用いられる。これがネット・マスクと呼ばれるものだ。
 たとえば、クラスBにおいてサブネット部を4ビット、ホスト部を12ビットとした場合、2進数表記では、
 11111111 11111111 11110000 00000000
となるので10進表記では
255.255.240.0
と表すことができる。

◆ネットマスクの表記法
 ネットマスクには3種類の表記法がある。1番目は、10進数をドットで区切る表記である。値が最大で255になる点を除き、この表記はIPアドレスにかなり類似している。
 2番目は16進数による表記である。0xffffff00 や 0xffffffe0 などのように、ネットマスクは単純な32ビットの16進数として表される。
 最後の表記法は、”ネットマスクは連続する1のビットと、その後に連続する0のビットで構成される”という事実にもとづいている。つまり、2進数で "11110011" のような値はネットマスクとして使うことはできない。サブネット番号とホスト番号は順番が前後したり混在することはないので、その性質を利用したネットマスクの表記法が現れたのである。アドレスのネットワーク部とサブネット部のビット数の合計を10進数で表す。この数は、通常はネットワークやサブネットアドレスのサフィックスとして使われる。たとえば

138.243.0.0/16

のように表現する、これはネットマスクの長さが16ビットであることを意味し、10進数とドットによる表記にすると 255.255.0.0 となる。

◆UNIXにおけるネットマスク
 ネットマスクはネットワーク・インターフェースに割り当てられ、ifconfig コマンドを使って設定する。インターフェースをセットアップするときは、IPアドレスとネットマスクを以下のように設定する。

# ifconfig le0 133.170.1.1 netmask 255.255.255.0

 ただし、経路テーブルをチェックしても、ネットマスクの値は表示されない。あるネットワークに対する経路を経路テーブルに追加するときは、ホストのインターフェースをチェックし、そのネットワークのサブネットのどれかに直接接続されていないかどうかを調べる。直接接続されていれば、対応するインターフェースのネットマスクが経路のネットマスクとして使われる。そうでない場合、そのネットワークは、リモート・ネットワークであると判断され、ネットマスクはアドレスのクラス(クラスA、B、Cのいずれか)に応じた値になる。
 いくつかのシステムでは、/etc/netmasks ファイルを用いてネットマスクを指定することができる。このようなシステムでは、ifconfig パラメータとして "netmask + " を与えると、ネットワークに対応するネットマスクを /etc/netmasks から検索する。ファイルの書式は単純で、シェルで使われるコメントの記述方法に対応している(つまり#で始まる行はコメントとみなされる)。
 ファイルの各行には、10進数とドットで表記した2つの値をスペースで区切って記述する。最初の値はネットワーク番号(アドレスのホスト部は0で指定)で、2番目には指定したネットワークに対するネットマスクを記述する。たとえば、"133.170.0.0 255.255.255.0" という行は、"ネットワーク 133.170.0.0 は24ビットのサブネットマスクを使う" ことを意味する。このファイルはNISデータベースに置くこともできる。
 他のシステムのなかには、/etc/networks ファイルに記述した仮想的なネットワーク名を使ってネットマスクを指定できるものもある。/etc/networks ファイルは、通常はネットワーク・アドレスに対して名前を付けるために利用されている。たとえば、133.170.0.0 に exsample-net という名前を付けることが可能である。ほとんどの ifconfig コマンドは、netmask というパラメータのあとに名前を指定することができる。名前を指定すると、/etc/networks ファイルでネットワークの名前が検索され、名前に対応する値がネットマスクとして使われる。たとえば、ifconfig コマンドに "netmask exsample-net" と指定すると、/etc/networks にある対応するエントリ "exsample-mask 255.255.255.0" が使われるはずだ。

CIDR(Classless Inter-Domain Routing)
 IPアドレスは使用するネットワーク構成に応じてクラスA、B、Cと選択できればいいのですが、実情はそうなっていません。以前は、クラスCで十分なサイトも、将来の拡張性を考慮して65536個のアドレスが利用できるクラスBを申請する傾向がありましたが、IPアドレスは4オクテットで表される有限な資源なため、クラスBが枯渇しています。そこで現在、NICではクラスBの割当てを事実上中止し、スーパー・ネッティング、あるいはCIDRと呼ばれる技術(RFC1519)を活用して、クラスCを複数個割り当てられる方式に切り替えています。
 CIDRは、アドレスにおけるクラスの概念をはずしネットワーク・アドレス部とホスト・アドレス部を任意のビット数で区切ることによって区別しています。CIDRによるアドレスの割当ては、従来のクラスC領域で行われています。クラスC1つで足りない組織に対しては、クラスBを割当てるのではなく、CIDRによって複数のクラスCを割り当てるような形で運用しています。

 CIDRはIPアドレスの管理方法を変えることになる。ARINなどのインターネット登録機関は、クラスCのアドレスをランダムに発行するのではなく、大手ISPにブロック単位で割り当てるようになった。ISPはさらにそれを中小のISPや顧客に卸していく。たとえば、ある組織がネットワーク・アドレスを必要としているとしよう。その組織は、通常は登録機関ではなくISPにアドレス割当てを申請する。ISPは、ネットワークの規模やその組織の拡張計画に従い、1つのクラスCアドレスのほか、4個や8個といった2の累乗の数の連続したクラスCアドレスを割当てることができる。経路制御時には、これらのアドレスはスーパーネット化された1つのアドレスにまとめられる。

一般的なCIDRプレフィックス
CIDRプレフィックスホストアドレスの数対応するクラスCの数
/2981/32
/28161/16
/27321/8
/26641/4
/251281/2
/242561
/235122
/221,0244
/212,0488
/204,09616
/198,19232
/1816,38464
/1732,768128
/1665,536256
/15131,072512
/14262,1441,024
/13524,2882,048

 ISPはクラスCを分割して顧客に割り当てることもできる。たとえばOCNエコノミーでは、小規模ネットワークの顧客用に8ホストまたは16ホストの単位で分割割当てをおこなっている。


◆クラスレスな経路制御
 CIDRがもたらすクラスレスな経路制御では、IPアドレスのクラスは意味をもたない。IPアドレスにおけるネットワーク部とホスト部の境界は、暗に決まるものではなくなり、つねに明示的に定めるものとなった。最近IANAでは、特定のクラスのネットワークを割り当てる代わりに、複数のアドレスブロックとネットマスクの組み合わせを割り当てている。経路の告知(advertisenment)と経路テーブルには、ネットワークとネットマスクの両方が含まれるようになっている。さらに経路制御アルゴリズムは、インターフェースの設定からではなく、経路テーブルからネットマスクを得るようになった。したがって、ローカルなサブネットと同様、ホストはリモートのサブネットに対する経路を保持して検索することが可能である。これは、サブネット(またはサブネットの集合)がもはや連続している必要がなく、サブネットへの経路が最適となるように告知できることを意味する。さらに、CIDRによってスーパーネットの構築(ネットワーク番号が連続している複数のネットワークをまとめて扱うことを指す)も可能になっている。
 従来のRIP(Routing Information Protocol)は、クラスレスな経路制御をサポートしていない。クラスレスな経路制御をサポートするたため、RIPのバージョン2では経路を告知する際に特別な情報を扱えるようになっている。OSPF(Open Shortest Path First)においても同様の拡張が施されている。
 CIDRは、1993年に標準となったにもかかわらず、UNIXやルータのベンダーの大部分は、最近になってようやく自社製品にこの経路機能を統合しつつある。クラスレスな経路制御に頼ったネットワークを設計する前に、使っているすべてのホストとルータがCIDRをサポートできるかどうかを確認する必要がある。ネットワークに従来の(CIDRに対応していない)システムがあるあいだは、旧い設計ルールを守り続けるのが最善の策である。CIDRに対応しているシステムには、AIX4.2 や HP−UX 10.20、Solaris2.6 のほか、Linuxのいくつかのバージョンなどがある。

グローバル・アドレスとプライベート・アドレス

 インターネットに接続する場合、公に認められたIPアドレス(JPNICに申請して割り当てられたアドレス:グローバルアドレス)を割り振らなければなりません。しかし逆にいえば、独自に閉じたネットワーク内であれば自由に任意のIPアドレスを使っても問題はない。そこで考え出されたのが、閉じたネットワーク内で自由に使用できるIPアドレス(プライベート・アドレス)である。これはRFC1597により定義されていて、

プライベート・アドレス
クラスアドレス範囲
クラスA10.0.0.0   〜 10.255.255.255
クラスB172.16.0.0  〜 172.31.255.255
クラスC192.168.0.0  〜 192.168.255.255

の3つがあります。これらはすべて連続したアドレスとなっています。
 このプライベートアドレスは、JPNICなどに申請しなくても閉じたネットワーク内であれば、自由に使用できます。したがって、家庭などの小規模なLAN上にあるマシンには、このIPアドレスを利用していけばよいことになります。
 OCNで利用する場合、契約内容によってグローバル・アドレスをJPNICに代行して割当てを行います。割当てられるアドレスはグローバル・アドレスです。
 割り当てられたグローバル・アドレスをルータ、proxyに割り振り。LAN上はプライベート・アドレスを割り振って使います。こうすれば、OCNで割り当てられた以上の数の端末が接続できます。

特殊な意味を持つIPアドレス

 IPアドレスの概要について説明してきましたが、実は特別な意味を持つIPアドレスが予約されています。主なものは以下のとおりです。

 ホスト部すべてが0
 ネットワーク自身を表すために用いられるもので、実際の通信には使用されない。例えばクラスBのIPアドレス 138.243.13.11 を持つマシンは、138.243.0.0 というネットワークに属しているなどと使用する。

 ホスト部すべてが1
ネットワーク上に存在するすべてのホストを表すために用いられる。例えば、 138.243.0.0に存在するすべてのマシンを表すには 138.243.255.255 と指定すればよい。これはIPネットワークにおいてブロードキャストするために用いられる。

 第一オクテットが127(127.0.0.0)
 127.0.0.0 はループ・バックと呼ばれる同一ホスト上の通信に用いられるものです。ループ・バックを用いることにより、ソフトウェアからは実際にネットワークにアクセスしているように見せるもので、通常はホスト部を表す1を付加して 127.0.0.1 が使用されます。

 このほかにも、ネットワーク部すべてが0のものや 0.0.0.0 がシステム起動時だけに用いられる。また、ネットワーク上のすべてのホストを表す 255.255.255.255 というのも存在します。

IPアドレスの設定

 ネットワーク・インタフェースに対しIPアドレス等を設定するコマンドは、多くのOSで ifconfig が使われています。例えばBSD系OSの場合、/etc/rc* ファイルの中に何らかの形でifconfigを発行している部分があります。
 ifconfigを用いて各種設定を行うためにはルート権限が必要だが、一般ユーザでもオプションなしでifconfigを発行すると、現在のネットワーク・インタフェースの設定が表示されるようになっています。

 % ifconfig le0
 le0:flags=63<UP,BROADCAST,NOTRAILERS,RUNNING>
   inet 138.243.13.11 netmask ffffff00 broadcast 138.243.13.255

この例は、SunOSでifconfigを発行したものですが、le0というネットワーク・インタフェースは、IPアドレス138.243.13.11、ネットマスクffffff00(255.255.255.0)、ブロードキャスト・アドレス 138.243.13.255を持っていることが確認できます。

ポート
 ポートはアプリケーションが使う通信の受け口、あるいは発信口です。このポートは船が着くポート「港」と同じようなものです。そのポート(港)には番号が付与されています。
 番号は0〜65535の範囲です。UNIXの場合 /etc/services ファイルで、どのサービスがどのポートを使うかを定義しています。
    0〜 1023:Well Known Ports
 1024〜49151:Registered Ports
49152〜65535:dynamic/private Ports
何番のポート番号が何の目的で使われるかをまとめる役割は、IANA(Internet Assiged Numbers Authority)という組織が行っています。

主なポート番号
ポート番号ポートの名称用途
20ftp-dataftpのdown
21ftpftpのアクセス
23telnettelnet
25smtpmail
80httpWWW
109pop2メール受信
110pop3メール受信
119nntpnews
2049nfsSUN-nfs

一つ前へ