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