Routerは、Network層( Layer-3 )の中継装置であり、Network層のAddress(1)に基いて中継を行う。
以下では、暫くNetwork層のProtocolとしては、IP ( Internet Protocol )しか扱わないので、以下、IP Networkを想定して説明する。
したがって、ここでのAddressはIP Addressを指す。
Routerは他の中継装置(2)と異り、予めRouterに中継のための情報が入っていない限り中継を行わない点が大きく異なる。
Routerは、自分の所に届いたIP Packetの宛先( Destination ) Addressを見、その宛先Addressに対応した中継先が予め判っていれば、それに従って中継を行うが、そうでなければ、そのPacketは捨てられる(3)。
この送信先のIP Address (のGroup )と中継先( Next Hop )の関係を記録した、Router内部の表( Table )をRouting (Forwarding) Table(4)と呼ぶ。
このようにIP Networkでは、何時何処で、どんな理由で、Packetが捨てられるかが解らない。従って、TCP (トランスポート層)の存在が重要になってくる。
ちなみに、Packetは黙って捨てられるわけでなく、捨てたことをそのPacketの送り元( Source ) Addressに特別な形( ICMPを利用する)で通知する。
送り元は、この特別な通知を受け取ることによって、通信ができないことを調ることができる。
IP Addressが表現できるAddressの個数は2^32なので、ざっと、40億位のAddressがあることになる。
もちろん、これらの個々の全てIP Addressに対して、Routerがその行き先を保持することは、現実的でない(5)。
そこで、IP Addressを、block化し、そのblock単位で、宛先を共有する(6)ことを考える。これを経路( Route )の集約( Aggregation )と呼ぶ。
これによって、block内の個々のIP Addressに対しては、別々に中継先を保持する必要がなく(7)なるため、Forwarding Tableを大幅に圧縮(8)できる。
この後述べるように、実際に保持している情報は、通常、数百にも満たない。本当にInternetの真中( Core )にあっても、数万程度である。
しかし、すでに、その数万で、Core Routerは、悲鳴をあげているのが現実であり。また、それが(後に述べるように.. )本当のIPv4 ( IP Version 4 :現行のIPであり、次世代IPであるIPv6 [ Version 6 ]との区別する場合に利用される)が抱える問題点の一つである。
正確には、ある程度、「共有させる」という恣意的な意味合いが強い。
このようなAggregationが行えるように、上手に、Addressをblock化する必要があることが認識され、実施されるようになったのは、最近のことである。
その代わりにといってはなんだが、当然のことながら、そのデメリットとして、そのblockに所属するIP Addressは、同じ中継先に在る必要がでてくる。
また、当然のことながら、与えられたIP Addressが、どのblockに所属するかも判定する必要があることに注意しよう。
Routerでは、「複数のIP Addressをblock単位で扱う」と述べたが実は、このblockは自由に設定できるわけではない。
まずは、IP Addressとblockの所属関係が簡単に判定できる必要があるので、blockの作り方に関しては強い制約(9)が設けられている。
具体的には、次のような制約である。
Block Sizeは2の羃乗にしかできない。ただし2^0 = 1なので、Size 1のBlockは作れる。
更に、Block Sizeが2^Nの時、先頭の32 - N bitが1で、残りのN bitが0であるような特別なIP Addressの表現(10)を(Sub)Net Maskと呼ぶ。
Blockの開始Addressも制約されている。すなわち、Block Sizeが2^Nの時、Blockの開始Addressは、そのAddressの最後のN bitが0であるものしか選べない(11)。
このBlockの開始AddressをNetwork Addressと呼ぶ。
特に重要な点は、このBlockに所属しているIP Addressの先頭の32 - N bitは、全て共通であるという点と、逆に、Blockに所属しないIP Addressの先頭の32 - N bitは、Blockに所属するIP Addressの先頭の32 - N bitと異なるということである。
つまり、先頭の32 - N bitを利用して、Blockに所属しているかどうかが判定できる。
逆に、この(うまい..)制約によって、判定が簡単になっている。
当然、制約によって、(色々な点で..)利用しにくくなっているが、これもトレードオフ(速度と使い安さ.. )と考えるべきだろう。
RouterはForarding Tableに基き、中継( Packet Forwarding )を行う。そのTableは、Block ( Network Address )単位で、中継先( Next Hop )を決定する仕組になっている。
しかし、実際に与えらえるのはIP Addressであり、これから、Network Addressを得、そして、そのNetwork Addressから、( Forwarding Tableを参照して.. )中継先に中継を行うわけである。
では、IP Addressから、どのようにしてNetwork Addressを求めればよいのだろうか?
実は、この答は、Net maskにある。つまりNet maskが判れば、それからIP Addressの先頭の何bitがNetwork Addressと一致しているかが確定するので、それを取り出し、残りのbitをall-0とすれば、Network Addressが確定する(12)。
Network設計を行う場合に考えなければならないのは、どの論理Segment ( Routerで区切られ、Hub, SwitchだけからなるNetwork )に、どのIP Addressを割り振るか?という問題である。
通常、一つの論理Segmentに所属するHostの台数は、ある程度予想ができるので、その台数が入る程度のサイズに决める必要がある。
しかし、所属台数は、変化するので、将来、所属台数が、Networkサイズを超た場合にも、困らない(13)ようにすることも考えておく必要がある。
Routerは、Forwarding Tableを利用して、Packetを中継する。逆の言い方をすれば、Forwarding Tableを設定しないかぎり中継をしてくれない。
では、Forwarding Tableをどうやって設定すればよいか。
その方法は、端的に言えば、次の二種類に分類できる。
要するに、手動で、直接Forward Tableに情報を書き込むやり方であり、一旦設定すると、次に設定するまで、内容が変化しないので静的( static ) Routingと呼ばれる。
Networkの変化に対応できないし、また、全て人の手を経由するので、設定が大変であるという欠点はあるものの、最も細かく設定ができる(14)という利点がある。
Router自身が、Routeを探し出し、その結果をForward Tableに反映する。
Networkの変化に応じてForward Tableが変化するので動的( Dynamic ) Routingと呼ぶ。
手間いらずで便利だが、計算機のやることなので、思いもかけない結果になったり、また、自動化のために、幾つかの制約があり、これがNetwork設計に影響を与えたりする。
Dynamic Routingにも様々な形式があり、それぞれ特徴がある。
RouterがDynamic Routingするためには、隣接のRouterと情報交換を行う必要がある。このようにRoutingするためにRouter間で通信ProtocolをRouting Protocolと呼ぶ。