[TCP/IP とインターネットの仕組み]に戻る
[TCP/IPの概要] [ルーティング] [プロトコル階層] [ポートの概念]

ルーティング

ルーティングのイメージ

ルーティングとは? IPの説明のところで、このプロトコルはパケット交換であることを説明しました。 ルーティングとはこのパケットを宛先まで届けるための経路を制御することです。 ルータは、目的地までの経路の情報を管理し、それに従ってパケットを届けるのです。
パケット交換は郵便のシステムに似ている この際になされていることは、実際の郵便のシステムに似ています。 最寄りの郵便局で小包を出すと、郵便屋さんが宛先に書いた受け取り主 までそれを届けてくれます。どの郵便局を経由して行くかについては 送り主は意識しませんが、実際は小包はいくつもの郵便局を経由して、 相手に届きます。

例えば、私が北九州市の井堀郵便局という所で、 神奈川県の大和市の友人宛に小包を出したとしましょう。 すると、おそらく、そこの郵便物を集配している北九州市の 西小倉郵便局というところに集められます。そして、関東行きの 便に乗って、関東の大規模な集配局に集まり、そこから大和の 局に行き、そして最後に友人の所に届きます。

郵便を出す人はどの局を経由するか知らなくても、 小包を出すだけで郵便局の方が相手に届けてくれます。 これと同様にパケットを送り出すコンピュータは、 最寄りのルータにパケットを渡すだけで、 経路を知る必要はありません。

ルータはパケットの郵便屋! しかし、ルータは経路を知っていなければなりません。 郵便屋さんは、配達を依頼された郵便が宛先に届くようにするために、 どこに渡せばよいか知っていなければならないのと同じです。 各郵便局は小包が届くために自分がなすべき仕事、つまりどの局にその 小包を渡せばよいかを知っていなければなりません。 ネットワークの世界でパケット集配の仕事を行っているのがルータなのです。

経路を確認するコマンド traceroute

経路を確認してみよう では、あなたが送信するパケットがどのような経路で届いているか、 確認してみることにしましょう。windowsにはtracertという コマンドがあり、これはその名前の通り、経路(route)を追跡(trace) するコマンドです。使い方は簡単です。tracert の後に宛先アドレスを 指定するだけです。以下は実行例です。

c:\> tracert www.yahoo.co.jp
  1     1 ms   <10 ms   <10 ms  192.168.1.3
  2     3 ms     3 ms     4 ms  gw [210.160.116.129]
  3    28 ms    27 ms    28 ms  210.145.231.73
  4  1198 ms  1019 ms  1316 ms  210.145.231.65
  5   753 ms  1035 ms   878 ms  203.139.175.132
  6   102 ms    69 ms    79 ms  210.163.253.6
  7    95 ms    89 ms    82 ms  203.139.175.206
         :
		中略
         :
 15  1154 ms  1533 ms  1582 ms  www.yahoo.co.jp [210.168.19.31]

私のマシンからwww.yahoo.co.jpにパケットを送信すると、 そのパケットは 192.168.1.3に渡され、そこからさらに 210.160.116.129に渡され、次々とパケットが転送されて、 最後に www.yahoo.co.jp[210.168.19.31]に届くのです。 これだけのルータが仕事をしてパケットを届けてくれるのです。 この中には、自分が契約してお金を払っているプロバイダのマシン だけでなく、知らないうちに、いろんなところのマシンを使っている ことになります。インターネットのリソースを大切に使うべきだ との認識が生まれてきましたか。

ルータ

ルータはゲートウェイ ルータはゲートウェイと呼ばれることもありますが、その ゲートウェイという名前の通り、ローカルネットワークから 外にでて行くための出入口となります。
ルータには2つのポートがある ルータには2つのポートがあります。両方がイーサネットのポートである ものもありますし、専用線接続を行うためのルータのように片方のポートはイーサネットで もう一方のポートはNTTの回線などに接続するものもあります。
ルータは2つのIPアドレスを持つ 通常、会社のLANをインターネットプロバイダと接続する場合 会社のLANをルータの片方のポートに接続し、もう片方の ポートはインターネットプロバイダの接続口につなぎます。 (インターネットプロバイダへの接続はNTTの回線などを 経由してつなぎます)

ということは、ルータ2つのネットにつながれて、 それぞれのポートにIPアドレスが割り当てられますから、 ルータには2つアドレスがあることになります。

インターネットとは このようにしてプロバイダと接続するわけですが、そのプロバイダも 他のプロバイダとルータを経由して接続しているのです。

インターネットはこのようにたくさんのネットがルータによって 網目のようにつながれたもので、私達が送出したパケットを このルータがどこに渡せば目的のマシンにパケットを届ける ことができるかを知っていて、そこにパケットを転送して いくのです。

余談ですが、 internet(インターネット)という名前にinter-という接頭語 が付いているのもそのためだと思います。inter-という接頭語 はあるものが集まったという意味を表します。例えば internatinoalは national(国)が集まったもので「国際」 という意味になります。internetもその名の通り net(ネットワーク)が集まったものと考えることができます。

ルータの動作

ルータの仕事 ここではルータはどのように動作するかを説明します。上で説明したように、 ルータは配送を要求されたパケットが目的地に届くように、 自分の果たすべき役割を果たさなければなりません。 自分の役割は、宛先のマシンにパケットを渡すか、そうでなければ宛先のマシンに 一歩近づくために、次のルータにそのパケットを渡すことです。
ルーティング情報 これを行うために、ルータはルーティング情報(経路情報)を持っています。 この情報を格納しているものをルーティングテーブルとも呼びます。 このテーブルには、「どこ行きのパケットはどこに渡す」という情報が 含まれています。
ルーティングテーブルを見る ルーティングを行っているあるUNIXマシンで次のコマンドを実行するとルーティング テーブルを見ることができます以下は例です。

fujiki@shibushi$ netstat -r
Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use     Netif Expire
default            gw                 UGSc       41  2785761      ep0
localhost          localhost          UH          1     6046      lo0
192.168.1          link#3             UC          0        0      ep1
shibushi           0:a0:24:9d:bf:3e   UHLW        0        4      lo0
192.168.1.150      0:20:35:74:e0:6e   UHLW        0    14826      ep1   1083
192.168.1.152      0:0:4c:d5:8d:49    UHLW        0        0      ep1    343
192.168.1.157      0:0:f4:36:9f:14    UHLW        0        0      ep1    375
192.168.1.158      0:40:95:46:60:9d   UHLW        0      510      ep1   1164
192.168.1.159      0:40:95:46:60:50   UHLW        0     4056      ep1   1029
192.168.1.255      ff:ff:ff:ff:ff:ff  UHLWb       0       31      ep1
210.160.116.128    ff:ff:ff:ff:ff:ff  UHLWb       0       62      ep0 =>
210.160.116.128/28 link#2             UC          0        0      ep0
gw                 0:80:bd:e:b:91     UHLW       40       72      ep0    481
hibiki             8:0:20:10:a3:c6    UHLW        1   918630      ep0    722
hiagari            0:10:4b:19:c3:6a   UHLW        2    13256      ep0   1100
doukai             0:0:f4:d3:7:e1     UHLW        0       40      ep0   1152
shibushi           0:60:8:42:8b:d5    UHLW        0        2      lo0

このテーブルを理解するために、このマシンが接続されているネットワークの構成を示します。

ルータとして機能しているのは、shibushi,doukai および gw です。 shibushiとdoukaiはローカルネットワーク192.168.1.0のラインと、 216.160.116.128/24のラインを接続するルータです。gwは210.160.116.128のラインと NTTのOCNのラインをつなぐルータです。

このnetstat -r を実行したマシンshibushiには2つのイーサネットのポートがあり、 それらにep0(210.160.116.136)とep1(192.168.1.3)という名前をつけています。 またlo0というのは自分(local)向けの通信を行うためのポートです。

このテーブルにはDestinationのマシンに到達するためには、Gatewayの ところに示されているマシンに渡せばよいという情報を格納しています。 その際に、Gatewayと通信するためには、Netifの部分で示される ポートを用います。 たとえば192.168.1.150に到達するためには、このマシンのep1のポートから 0:20:35:74:e0:6eというイーサネットアドレス(MACアドレス)にパケットを渡せば よいのです。

次のルータがわからない場合デフォルトルータに渡す では、ここに出ていないIPアドレスのマシン宛のパケットはだれに渡せばよいのでしょうか? その時にはデフォルトゲートウェイに渡すのです。 ルーティングテーブルのdefaultというエントリーには、gwというマシンに渡すように とかかれています。それでshibushiでこのテーブルに指定されていない宛先のパケットは すべてgwに渡すのです。gwは自分で別のルーティングテーブルを持っているので、 さらに、一歩宛先に近づくためにどのルータに渡せばよいか知っているのです。

このマシン(shibushi)のルーティングテーブルは非常に簡単でしたが、 たくさんのルータが接続されているネットワークにつながっている ルータにはたくさんのルーティング情報を持っているはずです。 「xxxx行きは,xxxxへ渡す」という情報が必要だからです。

パソコンもルーティング情報を持っている パソコンもルーティング情報を持っています。windowsだとネットワークの設定で、 デフォルトゲートウェイの指定をするところがあります。これは、自分と直接 つながっていない宛先へのパケットは、そこで指定されたマシンに渡すという ことを意味します。

ルーティング情報の取得および設定

ルーティング情報はどこから手に入れるのか? このようにして、それぞれの経路情報はどのようにして集めるのでしょうか? まずルータの管理者が手動で入力するという方法があります。パソコンの ネットワークの設定もこの方法です。unixでもrouteというコマンドを用いて 設定できます。これをスタティックルーティング (静的な経路制御)といいます。
ダイナミックルーティング しかし、この様に人間がすべて設定するのは手間がかかります。 ネットワークのツリーの末端の方はいいですが、上層の方は非常に大きな ルーティングテーブルを管理しているので、この仕事は大変です。 それで、ダイナミックルーティングが広く使われています。 これは人手によらず、自動的にルーティング情報を提供および取得する方法です。 これは、ripと呼ばれるルーティング情報を交換するプロトコルを 用いて、routed (gatedも用いられる)などがのデーモン(UNIX上で動作する バックグラウンドで動くネットワーク関連のプログラム)が行います。 routedは自分がつながっているネットワークに関して、「xxxxのネットワークに パケットを渡したければ、自分にくれ」と自分とつながっているすべての マシンにブロードキャストします。それを受け取ったルータは自分の ルーティングテーブルにそのエントリーを追加し、さらにその情報を 自分がつながっているマシンに知らせるのです。このようにして、 ルーティング情報が伝播していきどんどん広がっていき、各ルータの ルーティングテーブルに追加されるのです。
集中管理不要のプロトコル TCP/IPプロトコルは中央集中管理方式の必要ないプロトコルとして アメリカの DOD (国防総省) で開発されたものです。 集中管理していると通信の中枢が壊れると、すべて使えなくなるからです。 このような仕組みを考えたのは、ある部分が壊れても、接続さえすれば 自動的に経路情報が広がり、復旧したところだけは使えるようになるという ことを考えたのではないでしょうか。

ダイアルアップルータ

ダイアルアップルータはただのルータではない 最近のダイアルアップルータはたくさんの機能を持ち、 本来のルータとしての機能だけでなく、NATやIPマスカレードの機能を 持っています。 それで、必ずしも本来のルータとしての役割を果たしていない場合も あるのです。家庭で使っているダイアルアップルータは プロキシサーバの機能のみを使っている場合がほとんどです。 この場合には、本来(従来?)の意味でのルータとして動作している わけではありません。 このような多機能なダイアルアップルータについて、 このページでルータと述べているものをはっきりさせ、他の機能と 混同しないためにいくつかの点を説明します。
ダイアルアップルータは2つ以上のポートがある? ダイアルアップルータには複数のイーサネットの ポートをもつ製品もありますが、それは、 片方のポートに単にハブがついていると考えてください。 ここではハブはただ一つのポートに並列つなぎで複数の マシンがつなげるようにしたもののようなイメージを持ってください。 (実際にはそうではありません。高機能のものにはスイッチング を行うものもあります。ただハブはルーティングの機能を持たない ので、ルーティングの機器としてはただ集線しているのと 同じとみなすことができます)
プロキシサーバとして機能 最近のダイアルアップルータはルータとしての機能だけでなく、 NATやIPマスカレードの機能を持っており、 プロキシサーバとして使うことができるようになっています。 OCNエコノミーなどの専用線接続などに利用する時は、 本来の意味でのルータとしての役割を果たします。しかし家庭などで ダイアルアップ接続する場合には、 LAN側のマシンの通信を代理して行うプロキシサーバとして動作しています。 このように利用されているダイアルアップルータは本来のルータの働きを しているわけではないのです。
NATとかIPマスカレードとは では、このプロキシサーバの実現方法にはNATやIPマスカレードがありますが、 これらはなにをしているのでしょうか? これは一つしかないIPアドレスを用いて、複数のマシンが通信を行うことが できるようにする機能です。LAN側から、インターネット側に接続しようとすると、 その途中にあるプロキシサーバが、代わりに外のマシンと接続し、 通信を代理して行うのです。それで外部のマシンから見ると すべてルータ(の外側のポート)から接続されているように見えます。 この時、外側(インターネットプロバイダと接続している側)のポートのIPアドレスは、 インターネットプロバイダから指定されるアドレスになり、 内側(家庭内LANの側)のポートは192.168.*.*などのプライベートIPアドレスとなります。 このプライベートIPのアドレスは外部からは接続できないアドレスです。 実際にみなさんが家庭内のLANで指定した192.168.*.*などのアドレスに 対して外部からtelnetで接続しようとしても接続できません。 プライベートアドレスのルーティングは決してできないからです。 ここで述べたルータとしての本来の機能とNATの機能をを混同しないように 気をつけてください。


[TCP/IPの概要] [ルーティング] [プロトコル階層] [ポートの概念]
「TCP/IP とインターネットの仕組み」へ戻る