IPアドレスのアドレッシングとサブネット
TCP/IP と OSI参照モデル
データ通信の構造と機能を説明するのに、ISO(International Standards Organization)が制定したアーキテクチャ・モデルが使用されます。このアーキテクチャ・モデルは、OSI参照モデルとよばれ、ネットワークの機能を定義する7つの層(レイヤ)で構成されています。 この OSI参照モデルなしでは、データ通信を論じるのは不可能というぐらい整理されています。ただし、一般 的には OSIモデルに使用されている。
OSI参照モデル | TCP/IP | プロトコルなど | |
---|---|---|---|
アプリケーション層 | 実際のアプリケーションでのデータの扱い方について決めています。 | アプリケーション層 | SMTP, HTTP, DNS, FTP, TELNETなど |
プレゼンテーション層 | やり取りするデータの表現方法について決めています。コンピュータごとに違うデータ形式(バイトオーダーや、文字コード)など、機種やソフトに依存するものはここで変換を行います。 | ||
セッション層 | 通信の開始から終了までの一連の手順(セッション)を決めています。 | ||
トランスポート層 | 通信を行っている間、どのように高品質で送るかというためのことを決めています。 | トランスポート層 | TCP, UDP,NetBIOS |
ネットワーク層 | データを送る側と受け取る側の間でのデータ転送をどうおこなうかを決めています。 | インターネット層 | IPv4,IPv6, ICMP,IGMP |
データリンク層 | 媒体につながれた2つの間のデータ転送を行う部分。データをある単位に区切って送る方式や、データを送受信するときのデータの扱い方などを決めています。 | ネットワーク アクセス層 |
Ethernet, FDDI, SLIP,PPP |
物理層 | 通信するときにデータを運ぶ物理的な部分、つまりはインターフェース部分のコネクタやケーブルの形状、信号の変調方法などを決めています。 | 物理層 | IEEE 802.3に準ずるLANの配線や RS-232C |
TCP/IPの各プロトコルで、データをどのように扱ってるのかといえば、データを一定の単位に区切っています。その一定の単位に区切ったデータをパケット(packet)と呼びます。データは、ネットワークへ送信されるときにはスタックを上から下へ、ネットワークから受け取る時は下から上へと渡されます。データの配送を確実に行うための制御情報が、各レイヤでデータの先頭に置かれます。この制御情報を「ヘッダ」といいます。実際に送られるデータは以下のようにヘッダが付けられていきます。
アプリケーション層 | データ |
|||
トランスポート層 | ヘッダ |
データ |
||
インターネット層 | ヘッダ |
ヘッダ |
データ |
|
ネットワークアクセス層 | ヘッダ |
ヘッダ |
ヘッダ |
データ |
【物理層】
データ伝送信号を伝えるのに必要なハードウェアの特性を定義。OSがハードウェアを制御するためには、デバイスドライバというものが必要であり、そのデバイスドライバと、そのコンピュータに搭載されたネットワークインタフェースカード(NIC)を含みます。電圧レベルや電気的なビットタイミング、インターフェースのピンの数や位 置などがこのレイヤで定義されます。
【ネットワークアクセス層】
システムはこのレイヤのプロトコルを媒介として、直接接続されているネットワーク上の他のデバイスへデータを配送します。1つ上の層になるIPとは異なり、1対1の通
信用に自分と相手を区別するものです。このとき、識別用に用いるものを MACアドレスといいます。ネットワークカードなどのネットワーク製品は、それぞれ「MACアドレス」(MAC:Media
Access Control)という6バイトの値を持っています。この値はシリアルナンバーのようなもので、ユーザーが自分で設定したりするのではなく、ネットワーク製品を提供するメーカーがあらかじめ設定/登録します。上位
3バイトが IEEEが定めるメーカーコードで、下位3バイトがメーカが使用できるコードになります。
Windowsでは winipcfg.exe コマンドで確認でき、「アダプタアドレス」の欄に記述されている 00-40-05-A8-70-57 が使用しているネットワークカードの MACアドレスです。Windows 2000では ipconfig コマンドで確認できます。MacOS
では、TCP/IP コントロールパネルを起動してファイルメニューの情報を見るで表示されるウィンドウの「ハードウェアアドレス」の欄に記述されている。(どのような形式かを確認するためのものなので、記載されている
MAC アドレスは適当な値を使用しています。)
【インターネット層】
この層の役割は、複数の(異なる)物理的ネットワー クを相互接続する役目を持ち、共通のアドレス空間(IP アドレス)を提供します。「ネットワークに接続しているノードの中から、通信を行う宛先(アドレス)を指定するアドレッシング」や「アドレッシングで決まった宛先のまでパケットを届けるのにどのような経路を使うか決めるルーティング」を行います。
この層には、TCP/IPの心臓部である IPが含まれています。IPは、インターネットにおける基本伝送単位 であるデータグラムやインターネットのアドレス方式を定義します。また、データグラムをリモートホストへ一定の経路で送ったり、データグラムをフラグメント(断片)に分割/再組み立てを行います。現在使われているIPv4のアドレスは、4バイト(32 bits)の数値で、一般的に1バイトずつ10進数に変換し、ドットで区切って表記します。 IPv4 では、アドレスが足りなくなるという問題 からIPv6という16 バイト(128 bits)のものが考えられました。IPv6では、一般的にアドレスを16進で表記するようになります。
また、この層にはもう一つICMP(Internet Control Message Protocol)というプロトコルがあり、ネットワーク上で発生するエラー情報の通知に使用されています。IP接続を検査するpingコマンドはこのプロトコルを利用しています。
【トランスポート層】
この層は、別々のマシンのそれぞれのプロセスの間の通信を保障します。この層には、TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)が含まれています。
TCPは、通信中にエラーが生じた場合にデータの再送をするなど確実なデータの伝送を保障します。しかし、その分コネクションの確立などに手間がかかります。UDPは、パケットの到達/順番は保証しない、パケットの重複があり得るなど信頼性は劣ります。しかし、処理が単純なので高速で効率的なデータの通信を行います。
この2つのプロトコルは、目的によって使い分けられます。TCPは、FTPやSMTP, HTTPなど確実なデータ転送が必要な場合に用いられ、UDPは、上位のアプリケーション層で細かく制御される場合や、多少のデータ欠損は無視できる場合(次々にデータが送られてくる動画など)に用いられます。
【アプリケーション層】
OSIの参照モデルでは、「セッション層」「プレゼンテーション層「」アプリケーション層」の3つに分割されています。セッション層は、上位アプリケーションとネットワークの接続と切断の管理。プレゼンテーション層は、アプリケーションデータをネットワークの共通フォーマットへ変換する作業。アプリケーション層は、実際に利用するアプリケーションとなります。
telnet, ftp, sendmail など、TCP/UDP を使うようなアプリケーションです。
TCPやUDPがプロセスを特定するのに利用する「ポート番号」
TCP/IPでは、各クライアントとホストを識別するのにIPアドレスをりようする。しかし、接続したいマシンを識別するだけでは、それがsendmail に対してなのか、ftp なのか、telnet なのかわかりません。そこで、どのプログラムに向けたものかきちんと識別するための機能が「ポート番号」と呼ばれるものです。
ポート番号には「Well-known Port Number」と呼ばれるものと,ダイナミックに割り当てられるものの2種類があります。前者は、そのサービスには固有のポート番号を利用するというもの。例えば、SMTP(メール送信)に対しては25番、FTP(ファイル送信)は21番、TELNET(リモート端末)は23番といった具合。後者のダイナミックに割り当てられるポート番号は、1024以上の大きな値が指定されます。主にクライアント側のマシンで開くポートで、アクセスするたびに違う番号が割り当てられます。以下の表では、TCP/UDP を区別して代表的なものをあげていますが、場合によっては TCP/UDP 双方を利用する場合があるので注意してください。
よく利用されている Well-known Port | ||
TCP | ||
15 | netstat | Network Information |
20 | ftp-data | File Transfer Protocol (DATA) |
21 | ftp | File Transfer Protocol |
22 | ssh | Secure shell |
23 | telnet | Remote Terminal |
25 | smtp | Simple Mail Transfer Protocol |
43 | whois | Database |
79 | finger | |
80 | http | Hyper Text Transfer Protocol (WWW) |
110 | pop3 | Post Office Protocol |
119 | nntp | Network News Transfer Protocol |
137〜139 |
netbios-ns, dgm, ssn | ファイル共有/プリンタ共有 (Windows) |
143 | imap | Internet Mail Access Protocol |
445 | microsoft-ds | ファイル共有/ユーザー認証 (Windows 2000) |
UDP | ||
53 | domain | Domain Name |
67 | bootps | BOOTP/DHCP Server |
68 | bootpc | BOOTP/DHCP Client |
123 | ntp | Network Time Protocol |
137〜139 | netbios-ns, dgm, ssn | ファイル共有/プリンタ共有 (Windows) |
445 | microsoft-ds | ファイル共有/ユーザー認証 (Windows 2000) |
IPアドレス (IPv4)
インターネットを利用する上で、とても身近なものがIPアドレスです。インターネットを利用している間は、使用しているマシンに固有のIPアドレスが割り当てられています。
ネットワークに接続するホスト(マシン)には、重複しない IPアドレスが必要です。IPv4 は、二つのパーツから成り立つ 32ビットで構成されています。最上位ビット( MSBs: the most significant bits)は特定のネットワークを識別(クラス)し、残っているビットはそのネットワークの上のホストをさします。クラスAでは 1677万台(24ビット)、クラスB では 6万5千台(16ビット)、クラスC では 254台(特殊な用途で用いられる2つのIPアドレスを除く)を接続できます。IPアドレスは、192.168.0.1 のように 8ビットづつ四つに区切り、10進数で表現されます。
クラス 最上位ビット(MSB) Class A 0 Class B 10 Class C 110
クラスA アドレスは、1.0.0.0 〜 126.0.0.0(0.x.x.x と 127.x.x.x は予約されています)の範囲のネットワークを持ちます。ホストアドレスは、ネットワーク毎に16,777,214です。(0.0.0 と255.255.255 は予約されるのでホストアドレスとしては利用できません。)ただし、実際には 1677万台のホストを同一ネットワークに接続する人はいません。そこで、ホストアドレスの部分をサブネットワークとホストアドレスに分けて、部署ごとに(サブ)ネットワークを構築し。そのネットワーク上のホストにアドレスを割り当てるといった利用になります。
Network Host Network Subnet Host +------+ +----------------------+ +------+ +--------------+ +------+ | | | | | | | | | | [0xxxxxxx][xxxxxxxxxxxxxxxxxxxxxxxx] [0xxxxxxx][xxxxxxxxxxxxxxxx][xxxxxxxx]
クラスB アドレスは、128.1.0.0 〜 191.254.0.0 の範囲のネットワークを持ちます。ホストアドレスは、ネットワーク毎に 65,534です。(0.0 と 255.255 は予約されるのでホストアドレスとしては利用できません。)クラスAアドレスと同じように、ホストアドレスをサブネットとホストパーツに分けることができます。
Network Host +--------------+ +--------------+ | | | | [10xxxxxxxxxxxxxx][xxxxxxxxxxxxxxxx]
クラスC アドレスは、192.0.1.0 〜 223.255.254.0 の範囲のネットワークを持ちます。ホストアドレスは、ネットワーク毎に 254です。(0 と 255 は予約されるのでホストアドレスとしては利用できません。)このクラスもホストアドレスをサブネットとホストパーツに分けることができます。
Network Host +----------------------+ +------+ | | | | [110xxxxxxxxxxxxxxxxxxxxx][xxxxxxxx]
この他に、クラスD である 224.0.0.0(マルチキャストのために使われます)、クラスE である 240.0.0.0(実験的な目的のためにだけ使われます)があります。
サブネット
それぞれのクラスでサブネットを構築するには、サブネットマスクと呼ばれるマスクを利用してサブネット部とホスト部を決定します。0,1 を利用して 32ビットのマスクを AND (論理積)をとることでサブネット部を設定できます。
例えば、以下のようなクラスB のアドレスがある場合:
191 70 55 130 1011 1111 1000 0110 0011 0111 1000 0010 IPアドレス 1111 1111 1111 1111 0000 0000 0000 0000 サブネットマスク 1011 1111 1000 0110 0000 0000 0000 0000 結果
ここで 8ビット広いサブネットとホストに分けるマスクを利用することで以下のようになります。
191 70 55 130 1011 1111 1000 0110 0011 0111 1000 0010 IPアドレス 1111 1111 1111 1111 1111 1111 0000 0000 サブネットマスク 1011 1111 1000 0110 0011 0111 0000 0000 結果
このことで、254 (予約された二つを除く)のサブネットと、それぞれ 254 のホストを割り当てることが出来ます。
サブネットマスクは、どのようにマスクされているか10進数で表現される IPアドレスで簡単にわかるようにバイト単位でマスクされることが多いですが、ビットごとに設定することが出来ます。例えば、以下のように 9ビットでマスクすると 512-2 のサブネットと 128-2 のホストを割り当てることが出来ます。
191 70 55 130 1011 1111 1000 0110 0011 0111 1000 0010 IPアドレス 1111 1111 1111 1111 1111 1111 1000 0000 サブネットマスク 1011 1111 1000 0110 0011 0111 1000 0000 結果
サブネットマスクにおけるサブネットとホストの関係を一覧にすると以下のようになります。
クラスB:
マスクビット数 サブネットマスク サブネット数 利用可能ホスト数 2 255.255.192.0 2 16382 3 255.255.224.0 6 8190 4 255.255.240.0 14 4094 5 255.255.248.0 30 2046 6 255.255.252.0 62 1022 7 255.255.254.0 126 510 8 255.255.255.0 254 254 9 255.255.255.128 510 126 10 255.255.255.192 1022 62 11 255.255.255.224 2046 30 12 255.255.255.240 4094 14 13 255.255.255.248 8190 6 14 255.255.255.252 16382 2
クラスC:
マスクビット数 サブネットマスク サブネット数 利用可能ホスト数 2 255.255.255.192 2 62 3 255.255.255.224 6 30 4 255.255.255.240 14 14 5 255.255.255.248 30 6 6 255.255.255.252 62 2
利用できるホストが、必ず二つ引かれているのは、ホストアドレスのビットがすべて「0」の IP アドレスがネットワークアドレス、ホストアドレスのビットがすべて「1」の IP アドレスがブロードキャストアドレスとなるからです。
サブネットマスクの表記方法には、上記のように 10進数で表記する方法と CIDR(Classless Inter-Domain Routing) で表記する方法があります。よく使われるクラスCでの一覧をあげておきます。
CIDR値での表記 | 10進数による表記 | 利用可能ホスト数 |
/24 | 255.255.255.0 | 254 |
/25 | 255.255.255.128 | 126 |
/26 | 255.255.255.192 | 62 |
/27 | 255.255.255.224 | 30 |
/28 | 255.255.255.240 | 14 |
/29 | 255.255.255.248 | 6 |
/30 | 255.255.255.252 | 2 |
IPアドレス (IPv6)
IPv4からIPv6になって、一番大きな変化は使えるIPアドレスの数が飛躍的に増えることです。具体的には、これまで32ビットだったIPアドレスを128ビットに変更することで 2^128個 の IPアドレスを割り振ることができます。これからは携帯電話や車、冷蔵庫などもインターネットにつながるといわれています。こうした機器ひとつひとつにIPアドレスを割り振っても、これだけの数があれば大丈夫であろうといわれています。 また、IPSec (IP Security Protocol) などによりデータを暗号化して送れるので安全性(セキュリティ機能)が高まるなどといったメリットがあります。
規模の拡張: | IPv6は、128ビットのアドレス空間を用いています。 |
セキュリティ: | パケットの暗号化(ESP:Encapsulated Security Payload)とパケット送信者の認証(AH: Authentication Header) |
実時間性の考慮: | ビデオ会議のような実時間性を要するトラフィックをよりよくサポートするために、flowlabelというものが含まれています。flowlabelを使用すると、ルータはあるパケットがどの end-to-endのフローに属しているかを知ることができます。このことで、実時間性を要するトラフィックに属するパケットがどれなのかわかります。 |
自動設定(Plug and play): | IPv6の基本仕様には自動設定が含まれています。このため、初心者でも簡単にマシンをネットワークに接続することができます。 |
仕様の明確化と最適化: | IPv6はIPv4のよいところ は引き継ぎ、よくなかったところや無駄なところ、古くなってしまったところは取り除くように設計されています。 |
IPv4のアドレス方式は、8ビットごとの4つのグループから構成される32ビットの数値によって表現されるのは上記で説明しました。このアドレスは、ネットワークの規模に応じてクラスが A, B, C と分類されています。これに対して、IPv6のアドレス空間は、16ビットごとの8つのグループからなる128ビットの数値で表現されます。IPv6には IPv4のようなアドレスクラスの概念はありません。 そのかわり、フォーマットプレフィックス(FP) と呼ばれる上位ビットでアドレスのタイプを示します。これには大きく分けて、Unicast, Anycast, Multicast と呼ばれる3種類のアドレスタイプがあります。Unicastは1つのインターフェースを識別するために用いられ、Anycast, Multicastはインターフェースのグループを識別します。 Multicastでは、グループのインターフェース全てに配信去れるのに対して、Anycastは、グループのうちの1つのインターフェースに配信されます。
ここで気になるのが、IPv4 と IPv6 の共存です。一斉に全ての人が IPv6 に移行できるわけではありません。そこで、96ビットの 0 のプレフィックスを IPv4アドレスにつけた、IPv4互換アドレス(IPv4-compatible address)が用意されています。表記は、::192.168.0.1 のように連続した 0 は省略できます。このアドレスは、IPv4ネットワーク上で IPv6 のパケットを流すための特別な IPv6アドレスです。そして、80ビットの 0 のプレフィックスと、それに続く 16ビットの f を IPv4アドレスにつけた、IPv4射影アドレス(IPv4-mapped address)が用意されています。表記は、::ffff:203.178.140.4 となります。このアドレスは、IPv4でしか通信できないホストに対して割り振られるIPv6アドレスです。
IPv6 の詳細に関しては WIDE Projectの IPv6 ページ を参考にすると良いでしょう。