家庭でインターネット接続して使っている程度の知識(*1)はあることを前提として説明します。
コンピューターによるネットワークとは、すなわちコンピュータ間でデータの交換をすることです。データの交換をするためには、両者でやり取りするきまり(通信規約=プロトコル)が一致していなくてはなりません。
現在、もっとも普及しているのは、インターネットで使われている IP (Internet Protocol) (*2)です。ネットワークプロトコルは層をなしていますが(後述)、IP 層の一つ上の層のプロトコル(の1つ)と合わせて、インターネットで使われているプロトコルのことを一般に TCP/IP プロトコルと呼んでいます。
IP は、データの小さな塊(=パケット)を基本単位として、そのパケットをコンピューター間で交換するパケット交換プロトコルです。
ネットワークの構成要素としてホストとルーターがあります。
ホストには、普通のパソコンや、Webサーバー、ファイルサーバーなどのほかに、ネットワークに直結するプリンタなどがあり、処理能力によらず論理的には同じものです。ホストは、データ通信の始点と終点になるものです。ホストが互いに接続されてサブネットを形成します。
ルーターは、サブネット間でデータの転送を行う機能を持ちます。ルーターは、特殊なホストと考えることもでき、実際ホストとルーターの外見上の違いはありません。例えば、パソコンに複数のネットワークインターフェースを接続し、設定を行うことによってルーターとして動作させることもできます。
サンプルネットワーク図では、3つのサブネットがルーターで接続されている様子を表しています。
ホスト、ルーターはネットワークインターフェース毎に 32ビット(*3)の IPアドレスとサブネットマスクを持ちます。
IPアドレスは、正確には、ホスト自身ではなく、ネットワークインターフェース(例えば Ethernet)を表します。
サブネットマスクは、IPアドレスのうち、サブネットを表す部分の範囲を表します。例えば、10.1.2.3 というIPアドレスがあった場合・・・
となります。(*4)つまり、ネットワークアドレスは、サブネットによりデータの長さが異なります。
また、IPアドレスのネットワークアドレスをのぞいた部分をホストアドレス部と表現することがあります。
習慣的に IPアドレス/サブネットマスク(例えば 192.168.0.1/255.255.255.0 のように)のように表現することが多くあります(*5)。
IPアドレスとサブネットマスクは
のように設定する必要があります(サンプルネットワーク図参照)。
あるホストが、別のホストにデータを送信したい場合、パケット(IPパケット)という小さなデータの塊に分割してそれぞれのパケットに、送信元(自分)と送信先のIPアドレスを書き込んで次の転送先に送信します。次の転送先とは、
ホストの場合は
ルーターの場合は、
ということが必要になってきます(逆に言うと、ホスト/ルーターは相手先ホストへの「すべての経路を知っている必要はない」ということになります)。
例えば、サンプルネットワーク図で言うと、
| SubnetA のホスト | 同じサブネットのIPアドレス→直接送信 その他のIPアドレス→RouterA へ転送 |
| SubnetB のホスト | 同じサブネットのIPアドレス→直接送信 192.168.2.* →RouterC へ転送 その他のIPアドレス→RouterB へ転送 |
| SubnetC のホスト | 同じサブネットのIPアドレス→直接送信 その他のIPアドレス→RouterC へ転送 |
| RouterA | 雲から 172.31.*.* の IPアドレス→SubnetA
の該当ホストへ転送 SubnetA から 172.31.*.*以外のIPアドレス→雲のどこかのルーターへ |
| RouterB | 雲から 172.16.*.* →該当ホストへ転送 雲から 192.168.2.* →RouterC へ転送 SubnetBから(RouterC含む)RouterBに向けられたパケット→雲のどこかのルーターへ |
| RouterC | SubnetC から 172.16.*.* →Subnet B の該当ホストへ転送 SubnetC から 192.168.2.* →Subnet Cの該当ホストへ転送 |
のようになります。
ポイントは、ホスト/ルータとも終点へどのような経路でデータが転送されるかを知っている必要はなく、次の転送先(ネクスト・ホップ)を知っていれば良いことになります。特に、図中では右上の雲の中で、どのようにパケットが転送されているかは、RouterA RouterBは知らなくても良いことが重要です。
それでは、ルーターやホストは次に転送すべきルーター(ネクスト・ホップ)をどのように知るのでしょうか?ルーターに直接設定したり、経路制御プロトコルにより、経路情報をネットワーク通信により伝播する方法があります。
実際には、経路制御プロトコルを使う場面や、SubnetB のように、IPアドレスの値により異なるルーターに転送する必要がある場面は少ないですが、SubnetA や SubnetC のように、
という設定の場面は、よくあります。
サブネット内に DHCPのサーバーを置き、各パソコンを DHCPクライアントの設定を行うことにより、
を知ることができます。つまり、クライアントパソコンが100台あった場合に、それぞれのパソコンに、「IPアドレスがこれで、サブネットマスクは・・・」と設定しなくても、DHCPサーバーで集中的に設定・管理ができるわけです(*6)。
ネットワークのプロトコルは、層状になっていて、それぞれの層同士が通信をすることにより、データの交換ができるようになっています。ネットワークの層(レイヤー)について語るときには、ISO の OSI参照モデルがよく引き合いに出されますので、それとあわせて以下に示します。
| TCP/IPでの例 | 概要 | OSI参照モデル | レイヤー |
|---|---|---|---|
| アプリケーション層 (HTTP/FTP/Mail) |
各アプリケーション(ウェブやメール)毎のデータのやり取りを定義。 OSI参照モデルでは、3つに分かれているが TCP/IP ではそれらが渾然一体となってプログラムされている。 |
アプリケーション層 | 7 |
| プレゼンテーション層 | 6 | ||
| セッション層 | 5 | ||
| TCP/UDP | IPをベースに、ストリーム/データグラムとして特定のアプリケーション(ポート番号)とデータ交換するための機能を構築。 | トランスポート層 | 4 |
| IP | IPアドレスをベースとしたパケット交換プロトコル。 | ネットワーク層 | 3 |
| MAC(Ethernet) | メディア(伝送媒体)毎に異なるデータ交換の仕様を定義。例えば、Ethernet であれば、機器毎に 48 bit の MACアドレスを持ち、CSMA/CD 方式でパケット転送を行う。 | データリンク層 | 2 |
| Ethernet | 伝送媒体毎の物理的な特性(信号電圧や波形、コネクタ形状)を定義したもの。 | 物理層 | 1 |
ネットワークプロトコルを層状に定義することにより、例えば IP層によるパケット交換を行いながら、下層のデータリンク層、物理層のプロトコルを
といろいろなメディア(媒体)に置き換えることができます。
TCP/IPプロトコルは IPパケットを転送するという簡単なルールの元に、2点間でいろいろなメディアを介して通信することができるわけです。
IPプロトコルにより、ホスト間のパケット交換を行うことはできますが、ホスト内の特定のアプリケーションへのデータ転送には、これだけでは情報が十分ではありません。
Webブラウザが、あるホストの Webサーバーと接続してコンテンツ(ファイル)を取得する場合を考えて見ましょう。
パケット交換は、IP層で行いますが、プログラム間(Webブラウザと Webサーバーやメーラーとメールサーバー、メールサーバー同士等)でデータのやり取りをするためには、上で述べたようにトランスポート層でのデータのやり取りが必要になります。TCP/IP プロトコルでは、トランスポート層に
という要素が入ってきます。
TCP は HTTP や FTP のようにやり取りするデータのサイズが多かったり少なかったりするアプリケーションの場合に使います。UDP は、時刻合わせのためのアプリケーションなどで1回のパケットのやり取りで必要な処理が終了するアプリケーションでよく使われます。細かい違いについて説明すると長くなるので省略しますが、とにかくその2つがあるということを理解してください。
ポート番号は 1~65535 の値で、アプリケーションを識別するために使います。
サーバー、クライアント共にポート番号を使うのですが、クライアント側は通信の度に異なるポート番号を使います。サーバー側は、ある決まったポート番号を使って、クライアントの接続を待ち受けています。
インターネットでよく使用クライアント・サーバー形式のサーバー側のポート番号を以下に示します。
| プロトコル(アプリケーション) | TCP | UDP |
| HTTP(Web) | 80 | - |
| HTTPS(Web) | 443 | - |
| FTP | 20 と 21 | - |
| SMTP(Mail) | 25 | - |
| SNMP | - | 161 |
| DHCP | - | 67 |
| DNS | 53 | 53 |
一つのアプリケーションで TCP と UDPのどちらでも動作するもの(DNS)もありますし、片方のみで動作するものもあります。
一つのアプリケーションで複数のポートを使用するもの(FTP)もあります。
インターネット上のリソースを表すURLは一般に以下のように表現されます。
[プロトコル]://[ホスト名]/[パス名]の形式をとり、上記の例でいえば
という意味になります。
それでは、www.example.com というホストの IPアドレスは、どうやって知ればよいのでしょうか?
それは、「www.example.com というホストのIPアドレスは何ですか?」という問い合わせに「[10.xx.yy.zz]ですよー」と答えてくれるサーバーがいるのです。それを、DNS(Domain Name Service)サーバー(*8)と言います。
ホスト/ルーターのIPアドレスはネットワーク全体で重複しない値でなくてはなりません。世界最大のネットワーク、インターネットに接続する場合は、ISP (Internet Service Provider) からインターネットの世界で重複しないIPアドレスを割り振ってもらう必要があります。
しかし、組織内でネットワークを構成する場合、わざわざ外部の ISP からIPアドレスを割り振ってもらう必要はありません。インターネットでは、
プライベートアドレスに対して、インターネットで割り振られているIPアドレスをグローバルアドレスと呼んでいます。
プライベートアドレスが割り当てられたホストは、グローバルアドレスが割り当てられたホスト(インターネット上のWebサーバー等)と通信を行うことはできないのでしょうか?それを解決するのが NAT (Network Address Translation)とプロキシサーバーです。
どちらも、複数(2つ以上)のネットワークインターフェースを持ち、別々のサブネットに接続されます。
NATは、プライベートアドレスが割り当てられている組織内から見るとルータのように振る舞いながら、IPパケット中に含まれる送信元、送信先のIPアドレスを書き換えて、インターネット上のホストには、あたかもNATがインターネット上のホストと通信しているように見せます。
プロキシ(代理)サーバーは、クライアントの代わりにサーバーへのアクセスを行ってくれるサーバーですが、クライアントによる手助けが必要になります。例えば、Webプロキシサーバーであれば、ブラウザにどのプロキシサーバーを使用するかの設定をし、ブラウザのHTTPリクエストを、その設定したプロキシサーバーに向かうようにする必要があります。プロキシサーバーは、ブラウザからのリクエストを受けて、インターネット上の本当のサーバーにリクエストを送り、そのレスポンスをクライアントに転送します。
NATはネットワーク層(レイヤー3)でデータの中継を行いプロキシサーバーはアプリケーション層(レイヤー5)でデータの中継をしていると言えます。
ブロードバンドルーターといわれているものは、実はルーターでなく NAT であることが多く、DHCP機能を持つブロードバンドルーターはローカルアドレスを割り当てていると思います。(グローバルIPアドレスは、非常に限られた資源であるので ISP は、いくつものグローバルアドレスを安易に割り当ててあげることができません。)
Ethernet は、もともと帯域共有型のメディアであるので、あるホスト/ルーターから別のホスト/ルーターへパケットを転送しようとすると、ハブに接続されているすべてのホスト/ルーターにパケットを転送してしまいます。(受け取ったホスト/ルーターは、パケットの宛先が自分でない場合は、そのパケットを単純に捨てます。)
しかし、それでは特定のホスト間の通信により、他のホストの通信帯域が圧迫されてしまいます。そこで考え出されたのが、パケット送信時に関係ないポートにはパケットを転送しない L2スイッチという製品です。現在は、単純なハブ製品はほとんど存在せず、Ethernet を接続する装置は ほとんど L2スイッチになっています。
L2スイッチは、ハブと比較してデータ通信に関係しないホストからのパケットの覗き見ができないなどの違いもありますが、論理的な意味合いとしてはハブと同じです。
L3 スイッチは、転送速度の速いルーターと説明されることが多いですが、ほとんどの製品は各ポートを任意の組み合わせのサブネットに分割することができ(VLAN機能)それぞれの VLAN 間で任意の構成でルーティングできる・・・つまり L2スイッチとルーターの機能を併せ持つところが、ルーターとの違いと考えるべきでしょう。
L3スイッチを使えば、物理的な配置や配線とはまったく別に論理的なネットワーク構成を構築することができます。
(*1)Ethernet と HUB がどんなものかイメージできる程度を想定します
(*2)現在普及しているのは IP の バージョン 4というプロトコルです。次世代 IP は バージョン6 (IPv6)は、仕様はほぼ固まったものの、現在普及には至っていません。
(*3)細かいことを省略すると4つの 0~255までの数値をドットで区切って表現したものです。0~255の数値をオクテットとかバイトとか標記することもあります。つまり、IP アドレスは 4 オクテットの数値で表されます。
(*4)サブネットマスクの値が 255と 0 以外の値の場合もあるのですが、2進数の説明をしなくてはならないのでここでは省略します。
(*5)例えば 192.168.2.0/24 のような表現の仕方をする場合もありますが、これについて説明するためには2進数の説明をしなくてはならないので、ここでは省略します。
(*6)平たく言うとビットが 0 とは、IPアドレスのホストアドレス部がすべて 0 ビットが 1とはホストアドレス部がすべて 255になるということですが、サブネットマスクが 255と 0 以外の場合はそうはなりません。2進数の説明をしなくてはならないのでここでは省略します。
(*7)「自分のIPアドレスも DHCPサーバーのIPアドレスも知らないで、どうやって通信するんだ?」という疑問が発生しますが、それは、ブロードキャストアドレスという特別なIPアドレスを使うことにより実現可能なのです。
(*8)DNSは 名前→IPアドレスの解決以外にも使われますが、省略します。DNSは「名前」を「何か」に変換するサービスと考えてください。また、DNSは、階層化され分散処理されるところが特徴なのですが、ここでは説明を省略します。