IPアドレスはネットワーク部とホスト部からなっています。
ネットワーク部 | . | ホスト部 |
192.168.0 | . | 1 |
192.168.で始まるプライベートアドレスを使う場合、左の3バイトがネットワークの番号で最後の1バイトがホストの番号です。
ネットワークが異なる場合はネットワーク部に異なる番号を設定します。
LAN内のコンピュータの数が多くなると、複数のネットワーク(セグメント)に分けて管理した方が通信の速度も維持できますし、セキュリティ上も有利になります。
ネットワークを分けるにはルーターを使います。ハブを複数使ってもネットワークを分けたことにはなりません。
左の図はルータRによって2つの部分に分けたものです。
左側のネットワーク部を192.168.0. 右のネットワーク部を192.168.1. とします。 すると左のネットワークの各ホストは、192.168.0.1 とか、192.168.0.2 になるのですが、これを見やすく A.1 とか A.2 と書くことにします。
ネットワーク部 | ここでの省略形 |
---|---|
192.168.0. | A. |
192.168.1. | B. |
A.2 から A.4 への通信
ネットワークA内のホストへの通信は直接行われます。「直接」というのは相手のIPアドレスを叫んで応答したホストのMACアドレスを使って通信することです。この「叫ぶ」やりかたを「ブロードキャスト」といいます。
A.2 から B.4 への通信
ネットワークB内のホストへの通信は直接にできません。ルータRに中継を依頼します。
ルータRはネットワークへの接続口(インターフェース)が2つあります。それをif0,if1とします。if0はネットワークAに接続され、if1がネットワークBに接続されています。それぞれのインターフェースには、それぞれのネットワークのIPアドレスが設定されていますから、両方と直接通信できます。こうして通信は中継されます。
この場合のA.2のコンピュータのルーティングテーブルは次のようなものです。ルーティングテーブルとは宛先のネットワーク部と送信先ホストの一覧表です。送信先が他のネットワークの場合は送信先ホストがルータになります。
宛先ネットワーク | インターフェース | 送信先ホスト (ゲートウェイ) |
---|---|---|
A.0 | if0 | 直接 |
その他 | if0 | A.1 |
A.0 はネットワークAを指します。A部分が共通で、0 が 1,2,3,4,...のどれかであるという意味です。
直接とはルーターを介せず直接通信可能という意味です。
その他のアドレスの場合は、送信先ホストを A.1 にします。A.1 はA以外のネットワークへの出口なのでゲートウェイともいいます。
一般のコンピュータはネットワークインターフェースは一つだけなので、全部if0です。
実はA.2 はルータRに中継してもらっているつもりはないのです。ネットワークA以外のアドレスあての通信は A.1 に送れとテーブルにあるので、その通りにしているだけなのです。
Linuxでは次のようにして調べることができます。
hoge@na2:~$ netstat -rn カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタフェース 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
受信先サイトの0.0.0.0はその他を表し、ゲートウェイ の0.0.0.0は直接を表します。
もう一度同じ図を示します。ルータRも自分のルーティングテーブルを持っていて、それにしたがって通信します。
宛先ネットワーク | インタフェース | ゲートウェイ | 説明 |
---|---|---|---|
A.0 | if0 | 直接 | A宛の通信はif0から直接 |
B.0 | if1 | 直接 | B宛の通信はif1から直接 |
ネットワークが拡大しました。C,D,Eのネットワークをルーターで接続しています。
ルーターは専用機器もありますが、普通のコンピュータをルーターにすることも可能です。図でルータTとルータSは普通のコンピュータにネットワークインターフェースを追加してルーターにしたものです。専用のルータRやルータUと図の形が違うだけだとわかります。
ルータRのルーティングテーブルも大きくなります。
宛先ネットワーク | インタフェース | ゲートウェイ | 説明 |
---|---|---|---|
A.0 | if0 | 直接 | A宛の通信はif0から直接 |
B.0 | if1 | 直接 | B宛の通信はif1から直接 |
C.0 | if1 | B.5 | C宛の通信はif1からB.5(ルータU)に送信 |
D.0 | if0 | A.5 | D宛の通信はif0からA.5(ルータS)に送信 |
E.0 | if0 | A.6 | E宛の通信はif0からA.6(ルータT)に送信 |
ルーターを使う場合、あるネットワークへの経路を複数にすることができます(HUBだけの場合これをしてはいけません)。
次の図ではAとCの間の接続を追加しました。こうするとAからCへ行く経路が2つになります。この場合どちらの経路が有利かを知るためにメトリックという値を使います。メトリックの値の小さいほうが有利ということになっています。メトリックの値の計算方法はいろいろありますが、教科書では1から始まってルーターを越えるたびに1ずつ加算されるという方法を使っています。
宛先ネットワーク | インタフェース | ゲートウェイ | メトリック | 説明 |
---|---|---|---|---|
A.0 | if0 | 直接 | 1 | A宛の通信はif0から直接 |
A.0 | if1 | B.5 | 3 | if1からB.5(ルータU)に送信 (さらにC.1(ルータV)を経由する) |
B.0 | if1 | 直接 | 1 | B宛の通信はif1から直接 |
B.0 | if0 | A.4 | 3 | if0からA.4(ルータV)に送信 (さらにC.6(ルータU)を経由する) |
C.0 | if1 | B.5 | 2 | C宛の通信はif1からB.5(ルータU)に送信 |
C.0 | if0 | A.4 | 2 | C宛の通信はif0からA.4(ルータV)に送信 |
D.0 | if0 | A.5 | 2 | D宛の通信はif0からA.5(ルータS)に送信 |
E.0 | if0 | A.6 | 2 | E宛の通信はif0からA.6(ルータT)に送信 |
背景がこの色が増えた経路です。普段はメトリックの小さい方を使い、トラブルがあったり混雑があったりした時には別の経路を使うといったことが出来ればネットワークの不通を減らしたり、利用効率を上げたりできます。一見無駄に見える複数化ですがこのような効果があります。これを冗長化ということがあります。
このルーティングテーブルは、小規模な場合は手動で設定しますが、大規模になるとルーター同士が通信しあって自動で設定するようにも出来ます。
ここで紹介したテーブルはすべてのネットワークを網羅しています。規模が大きくなるとこれでは無理があります。隣りのネットワークだけ知っていれば良いという方法や、ネットワークをグループ分けしてルーティングするなどいくつかのやり方が使われています。