物理層の中継装置(1)
は、純粋に、エネルギーの増幅(2)を行うことで、中継機能を実現している。
10Base-2/5 >-------+------------------< | +-------+-------+ | リピータ | +-------+-------+ | >-------+------------------< 10Base-2/5
+---------------+ | Hub | +---+---+-------+ | | | | 10Base-T | |
特徴としては次のようものが揚げられる。
では、Hubとリピータは区別してるが、両方をまとめてリピータ(振舞いの名前)と呼ぶことも多い。
逆に、Hubという言葉は、Star型のネットワークトポロジィの中心におくもの(形状としての名前)という意味なので、逆にSwitchもHub (その場合はSwitching Hubと呼ぶ)と呼ぶことがあるので、注意。
いわゆる、アンプリファイすること。
必ずしも「信号」の増幅を行うわけではない。もし、ケーブル中に「雑音」が入っていれば、それも一緒に増幅する。
論理層の中継装置(4)は、フレームを中継する。
10Base-2/5 >-------+------------------< | +-------+-------+ | ブリッジ | +-------+-------+ | >-------+------------------< 10Base-2/5
+---------------+ | Switch | +---+---+-------+ | | | | 10Base-T | |
特徴としては次のようものが揚げられる。
ブリッジの機能の一つに、トラッフィク空間を分割するという機能がある(5)。
これは、「ブリッジのInterfaceに接続されている個々のセグメントで利用されているMAC Addressを観察することによって、各々のセグメントに所属しているMAC Addressを学習し、もし、同一セグメント内の通信であれば、他のセグメントに中継しない」という機能である。
これを機能によって、パケットの複製をできるだけ少くし、ネットワーク帯域を有効利用できる可能性が生れる。
以下の機能は、最近のブリッジ/Switchでは当然のように塔載されている機能であるが、古いブリッジにはなかったこともある.. (馬鹿ブリッジ..)
その当時は、この機能をもつブリッジをLarnning Bridgeと呼んで区別したが、現在、この区別は意味がない(馬鹿ブリッジがないので.. )。
リピータだけで作られているネットワークは、冗長経路(6)をもつことができない(7)。
原理的には、ブリッジも同様なことが言えるが、最近のブリッジは、ブリッチ間で、情報を交換することにより、冗長経路を検出し、ネットワーク上でのLoopを除去する(8)。
この情報交換を行う規約が、スパンニングツリープロトコルである。
なぜなら、冗長経路があるということは、経路のLoopを意味し、リピータは原則として全てのフレームを経路に中継するので、同一のフレームがLoopした経路をいつまでも回りつづけることになる。
もちろん、その結果は、その「ネットワークの壊滅」を意味する。
具体的には、Loopを検出するとLoopを構成しているブリッジの一つの口を自動的無効に(ないものと.. )することによって、そのLoopを断ち切る。
この結果、ネットワークは、木構造となる(これが、スパンニングツリーという名前の由来)。
もちろん、何らかの障害が生じて、現在利用している経路が失われた場合は、無効にした口を復活させることによって、接続を自動回復する。
Routerは、Network層( Layer-3 )の中継装置であり、Network層のAddress(9)に基いて中継を行う。
以下では、暫くNetwork層のProtocolとしては、IP ( Internet Protocol )しか扱わないので、以下、IP Networkを想定して説明する。
したがって、ここでのAddressはIP Addressを指す。
Routerは他の中継装置(10)と異り、予めRouterに中継のための情報が入っていない限り中継を行わない点が大きく異なる。
Routerは、自分の所に届いたIP Packetの宛先( Destination ) Addressを見、その宛先Addressに対応した中継先が予め判っていれば、それに従って中継を行うが、そうでなければ、そのPacketは捨てられる(11)。
この送信先のIP Address (のGroup )と中継先( Next Hop )の関係を記録した、Router内部の表( Table )をRouting (Forwarding) Table(12)と呼ぶ。
このようにIP Networkでは、何時何処で、どんな理由で、Packetが捨てられるかが解らない。従って、TCP (トランスポート層)の存在が重要になってくる。
ちなみに、Packetは黙って捨てられるわけでなく、捨てたことをそのPacketの送り元( Source ) Addressに特別な形( ICMPを利用する)で通知する。
送り元は、この特別な通知を受け取ることによって、通信ができないことを調ることができる。
IP Addressが表現できるAddressの個数は2^32なので、ざっと、40億位のAddressがあることになる。
もちろん、これらの個々の全てIP Addressに対して、Routerがその行き先を保持することは、現実的でない(13)。
そこで、IP Addressを、block化し、そのblock単位で、宛先を共有する(14)ことを考える。これを経路( Route )の集約( Aggregation )と呼ぶ。
これによって、block内の個々のIP Addressに対しては、別々に中継先を保持する必要がなく(15)なるため、Forwarding Tableを大幅に圧縮(16)できる。
この後述べるように、実際に保持している情報は、通常、数百にも満たない。本当に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の作り方に関しては強い制約(17)が設けられている。
具体的には、次のような制約である。
Block Sizeは2の羃乗にしかできない。ただし2^0 = 1なので、Size 1のBlockは作れる。
更に、Block Sizeが2^Nの時、先頭の32 - N bitが1で、残りのN bitが0であるような特別なIP Addressの表現(18)を(Sub)Net Maskと呼ぶ。
Blockの開始Addressも制約されている。すなわち、Block Sizeが2^Nの時、Blockの開始Addressは、そのAddressの最後のN bitが0であるものしか選べない(19)。
この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が確定する(20)。
Network設計を行う場合に考えなければならないのは、どの論理Segment ( Routerで区切られ、Hub, SwitchだけからなるNetwork )に、どのIP Addressを割り振るか?という問題である。
通常、一つの論理Segmentに所属するHostの台数は、ある程度予想ができるので、その台数が入る程度のサイズに决める必要がある。
しかし、所属台数は、変化するので、将来、所属台数が、Networkサイズを超えた場合にも、困らない(21)ようにすることも考えておく必要がある。
Routerは、Forwarding Tableを利用して、Packetを中継する。逆の言い方をすれば、Forwarding Tableを設定しないかぎり中継をしてくれない。
では、Forwarding Tableをどうやって設定すればよいか。
その方法は、端的に言えば、次の二種類に分類できる。
要するに、手動で、直接Forward Tableに情報を書き込むやり方であり、一旦設定すると、次に設定するまで、内容が変化しないので静的( static ) Routingと呼ばれる。
Networkの変化に対応できないし、また、全て人の手を経由するので、設定が大変であるという欠点はあるものの、最も細かく設定ができる(22)という利点がある。
Router自身が、Routeを探し出し、その結果をForward Tableに反映する。
Networkの変化に応じてForward Tableが変化するので動的( Dynamic ) Routingと呼ぶ。
手間いらずで便利だが、計算機のやることなので、思いもかけない結果になったり、また、自動化のために、幾つかの制約があり、これがNetwork設計に影響を与えたりする。
Dynamic Routingにも様々な形式があり、それぞれ特徴がある。
RouterがDynamic Routingするためには、隣接のRouterと情報交換を行う必要がある。このようにRoutingするためにRouter間で通信ProtocolをRouting Protocolと呼ぶ。