第6章

ネットワーク層プロトコル

更新日:09/04/24 00:00:00


 ネットワーク層の役割は,それより上位のトランスポート層,あるいは下位のデータリンク層から渡されたパケット=データグラムを,異なるネットワークIDを持つネットワーク間で効率的に受け渡しすることです.(データリンク層で,同一のIPを持つネットワークの中の異なるMACアドレスのノード間でパケット=データフレームを効率的に受け渡しすることと対比される.)
 そのために第一に必要になるのがアドレシング (addressing) です.宛先・送信元などのID(住所表現)をどういう規則によって決めるかということがテーマです.
 つぎに,宛先までパケット(ここではデータグラムという)をどういう経路で伝送するかというルーティング (routing),および,最終的にパケットを届ける宛先はデータリンク層のアドレスであるMACアドレスですから,IPアドレスとMACアドレスの間のアドレス解決.データリンク層の扱えるパケットの最大値(最大転送単位)を超えないように調節する機能であるフラグメンテーション、また,パケットが届かない場合の対処方法,そして,もう一つがサービス品質QoS ( Quality of Service )の決定です.
 ところで通信形態の分類に,コネクション型コネクションレス型とがあります.コネクション型の典型的な例は電話網ですが,通信を行う2台の端末間に物理的又は論理的コネクションを成立させてからセッションを始めます.そして送受信双方は,聞き取れない内容があれば聞き返すなどコミュニケーションを確認しながら対話を続けます.これに対して,コネクションレス型通信というのは,送信パケットの宛先情報に従ってパケットが伝送され,受信側がそれを受信したか否かの確認をせずに完了するものです.いちいちコネクションを確立させる手間が不要ですから能率的な反面,信頼性に乏しい欠点があります.IPは典型的なコネクションレス型通信です.
 インターネットでは,ネットワーク層はIP層です.IP層はコネクションレス型であるため,QoS ( Quality of Service )などはcheck sumとTOS ( Type Of Service )だけの簡易なものになっています.インターネットは,通信の信頼性をTCP層で確保するというエンド・エンド通信を基本コンセプトにしているからです.このネットワーク層のようなコネクションレス型通信をベストエフォート=最善努力型(best effort)といいます.最大限の努力はするが,失敗したら「ゴメンナサイ」と謝るだけだというわけです.謝る代りに,失敗の理由を通知する仕組もIP層のプロトコルには含まれます.インターネットでは
ICMPプロトコルがこれです.

第1節……  IPデータグラムの構造

第2節……       IPアドレス

第3節……アドレス解決プロトコル

第4節……     ルーティング

第5節……         ICMP


 第1節 IPv.4データグラムの構造 

 まず,IPv.4データグラムの構造を下の図に示します.数字は,各フィールドが占有するビット数です.IPデータグラムには,それを届ける宛先のIPアドレスが必ず書き込まれており,そこに向けてパケットを届けることがこの階層の主たる役割です.
 届けるべき宛先ホストが送信元と同一のネットワークである場合には,ARPによってMACアドレスがフレームパケットに記入され,宛先ホストが自分宛であることを知って受信しますが,異なるネットワークである場合には,ルータの出番で,目的のネットワークへ届けるための経路に向かってパケットを転送していきます.これがルーティングですが,下図のデータグラムには,そのルーティングのための情報が込められています.以下,個々のフィールドについて個別に解説します.

 
 図6.1.1 IPv.4の Datagram 

1.1 Ver:(バージョン(Version))

 これはIPのバージョンを表します.インターネットでは,現在は標準の数値4(=0100)を入れることになっていますここに4が入るIPバージョンのことをIPv4,6が入ればIPv.6と言います.その他のプロトコルについては下表のようになっています.

image88.gif (163 バイト) 表6.1.1 IP Version


 ip ver.4について 

1.2 IHL:ヘッダ長(Internet Header Length)

 IPデータグラムのデータを除くヘッダ部分の長さを,4octet(32ビット)を単位として表します.このフィールドは4ビットですから,1111(10進数で15)までの数値が入れられます.よって,IPヘッダ長としては15×4オクテット=60オクテット使用可能です.

1.3 TOS:サービスタイプ(Type Of Service)

 下の図のようにサービス品質を8ビット数字で要求します.これは,後述するルーティングプロトコルが参照するフィールドであって,ルーティングプロトコルによってはこのフィールドを無視して読み飛ばしてしまうプロトコルもあります.
第0〜2ビット:データグラムの優先度.5段階表記(通常は000で数値が大きくなるほど優先性を高くすることを要求する.)
第3〜6ビット:ネットワーク経路のチョイスです.経費の安いところ,経費はかかっても安全性の高い経路,あるいは何にも増して速度を優先するところというように,ネットワークの性格を選択することが出来ます.ただし,上述のようにルーティングプロトコルによっては無視するものがあります.
 @ xxx0000x=通常 
 A xxx0001x=コスト最小 
 B xxx0010x高信頼性要求 
 C xxx0100x=スループット最大 
 D xxx1000x=遅延最小 
 E xxx1111x=セキュリティ優先
 F 第7ビット:未使用
@からEまでの要求サービスはどれか一つを選ぶようになっています.つまり,コストが最小で,信頼性が高く,遅延最小で,セキュリティ最高などというような選択はできないというわけです.一つの要求を叶えることは他の利点をすべて放棄するようになっていて,これによって多くの人がネットワークを均等に利用できるようにしてあるのです.


 図6.1.2 TOSフィールド 

1.4 LEN(total LENgth):全IPパケット長

 2オクテット(16ビット)のフィールドで,ヘッダー部と全データを合せたIPデータグラム全体の長さを,オクテット(8ビット)を単位として表現します.

1.5 ID:データグラム識別番号

 同じく2オクテットのフィールドで,送受信しているデータグラムのシリアルな番号が入ります.この番号は,必ずユニークな数値を使います.下位層(イーサーネットなどのデータリンク層)はこの番号を目印にしてパケットを再構成する重要な目印です.これを誤りますと,パケットを再構成することができなくなってしまいます.

1.6 Fragment:フラグメント制御フィールド

 IP層では,配下のデータリンク層にデータグラムの転送を依頼しますが,ネットワークの種類によってそのデータリンク層のフレームフォーマットには最大転送単位MTU( Maximum Transfer Unit)というものが決められています(表2参照).したがって,これを超える長さのデータ長を持つデータグラムは,フレームに入りきれなくなってしまいますので,分割しなくてはなりません.この分割をフラグメンテーション( fragmentation )といいます.
 フラグメンテーションが行われた場合のデータグラムでは,フラグメント制御フィールドにそのことを記録し,受信ノードでは,上のデータグラム識別番号を勘案しながら,最終的にこれによってデータグラムを再構築することになります.下に,フラグメント制御フィールド16ビットの構造を示します.すなわち,下図の右側16ビットがフラグメント制御フィールドですが,オフセット番号とモアフラッグの組み合わせと,左側に書き込まれているパケットID番号とを見ながら分割されたパケットを再構成するのです.


 図6.1.3 フラグメントフィールド 

フラグメント禁止ビット: 1ビット.ここに1が入っているデータグラムは分割が禁止されます.
モアフラグ: 1ビット.ここに1が入っているデータグラムは,これ以外にフラグメントされたデータグラムのあることを意味します.
オフセット: 13ビット.フラグメントされたデータ長の32ビットを1単位とする数値を記入します.

image88.gif (163 バイト) 表6.1.2 MTU 

 フラグメンテーションは分かり難いので,DIX版Ethernetを例にしたフラグメンテーションを次に図示します.データ長はoctets表示で,この例ではID番号1234番の2500オクテットのパケットが送られてきたとしています.Ethernetは1500オクテットが最大転送単位(MTU)ですから,ここで一つだけフラグメンテーションを行なわなくてはなりません.したがってID番号は1234番で統一されますが,分割された第1データグラムはID番号オフセット値=0,モアフラッグは次がありますからMF=1となります.次いで二番目のデータグラムは,これが最後ですからMF=0,1500オクテットのデータの次に入りますので1500/4=375がオフセット値になります.こうして二つにフラグメントされたデータグラムは順序を間違わず,しかも全てを受信でき,再構成できます.


 図6.1.4 フラグメンテーションの原理図 

1.7 TTL: Time To Live

 IPデータグラムがいくつのルータを経由することができるかを表す数値です.現在の推奨値は64です.データグラムがルータを一つ経由するたびに,この数値を減じていき,0になったルータがこれを廃棄します.これによって,迷子になったデータグラムがネットワークの中を永久に回り続けることが防止されます.TTLが小さすぎると宛先ノードに到着する前に廃棄されてしまいますし,大きすぎると宛先が不明な時にネットワーク負荷を大きくしてしまいます.64は,あくまでも暫定的な数値で,インターネット加入者数が増えてくると再考しなくてはならなくなります.

1.8 PROTOCL:上位プロトコル種別

 IP層の上,すなわちトランスポート層で使われるプロトコル種別を表します.たとえば,TCPでは6UDPでは17ICMPなら1,ルーティングプロトコルのOSPFでは89をそれぞれ二進数に直して挿入します.これら以外のトランスポート層プロトコルについては以下の表を参照してください.

image88.gif (163 バイト) 表6.1.3 上位層のプロトコルID

1.9 Check Sum:チェックサム

 データグラムのヘッダ部のチェックサム値.

1.10 Source Address/Destination Address:送信元アドレス及び宛先アドレス

 IPアドレスが入ります.IPアドレスの詳細については次節で述べます.このフィールドは32ビット(=4オクテット)でできていますので,アドレス数の絶対最大は4,294,967,295(約43億)です.しかし,後で分かるようにこの数をすべてうまく使うことは不可能です.そのためにIPアドレスの不足が現在深刻な問題になっています.
 これを解決するために,IPアドレスフィールドを4倍に拡張して128ビットにしようというプロトコルが提案されています.それをIPv.6と言います.参考のため下図にIPv.6のデータグラムを示しておきます.


 図6.1.5 IPv.6のデータグラム 

1.11 Option&Padding:オプションとパディング

 IHL(IPヘッダー長)で規定されているように,IPヘッダ長は最小5×4オクテットから最大15×4オクテットです.したがって,オプションフィールドは最大10×4オクテットまで使用可能です.
 ここには,セキュリティオプション始点経路制御記録オプション経路記録オプションストリームID オプションタイムスタンプオプションなどが入りますが,やや専門的なのでここでは説明を省略します.
 これらのオプションが使用したフィールドのうち残りの部分が32ビットの整数倍にならない場合に0を入れて穴埋めすることをパディングといいます.

 第2節 IPアドレス

2.1 アドレスクラス

 IPアドレスとは,ネットワーク中のコンピュータやルーター,ゲートウェイなどのノードを識別するためのIDのことです.現在32ビットで構成されています.全体は大きく分けてネットワークIDを示す部分と,ホストIDを表す部分の二つの部分からなっています.そして,ネットワークIDの区切り位置(プレフィックス)によって,

クラスA/クラスB/クラスC/クラスD/クラスE

の3種類のネットワーククラスが定義されています.ユニキャストとして使われるのはクラスA,B,Cのみですので,これについて説明しておきます.ちなみに山梨大学のキャンパスネットワークは,133.23.0.0ですが,これは10000101 10111000 00000000 00000000で最初が10で始まっていることから「クラスB」です.日本にはクラスAは存在しません.
クラスA: 32ビットの最初の1ビット(プレフィックス)が0で始まり,続く7ビットがネットワークIDで,それ以外の24ビットがホストIDであるもの.1.0.0.1〜127.255.255.254までの16,777,214のホストが接続可能です.全アドレス中の50%を占有します.
クラスB: 最初の2ビット(プレフィックス)が10で始まり,続く14ビットがネットワークIDで,残り16ビットがホストIDであるもの.128.0.0.1〜191.255.255.254までの65,534のホストが接続可能です.全アドレス中の25%を占有します.
クラスC: 最初の3ビット(プレフィックス)が110で始まり,続く21ビットがネットワークIDを表し,残りの8ビットがホストIDを表すもの.192.0.0.1〜223.255.255.254までの254個のホストをつなぐことができます.全アドレス中の12.5%を占有します.
(ホストIDについては,全ビットが0と1となるものは使用禁止です.)

クラスD: 最初の4ビット(プレフィックス)1110で始まるネットワークでマルチキャストに使われます.

クラスE: 最初の4ビット(プレフィックス)1111で始まるネットワークで,実験用に確保されています.クラスD,Eを合わせてIPアドレス資源を12.5%占有します.


 図6.2.1 IPネットワ−クアドレスクラスの分類 

 IPアドレスは,日本ではJPNIC(Japan Network Information Center)というインターネット組織が一元的に配分しています.JPNICに申し込みますと,その組織の規模に応じてIPアドレスのネットワークIDが配分されます.

2.2 サブネットマスク

 IPアドレスは,32ビットで構成されていますが,連続して表示されているため,どこからどこまでがネットワークIDで,どこまでがホストIDなのかが見えません.これを識別するのがサブネットマスクです.
 下の図のように,133.23.0.0というネットワークIDに133.23.164.100というノードがある場合,このノードのどこまでがネットワークIDでどこからがホストIDかを示すには,ここに255.255.0.0(11111111.11111111.00000000.00000000)というサブネットマスクを定義してやることでネットワークIDが識別でき,よってホストIDも求まります.すなわち,下図のように,133.23.164.100と255.255.0.0の論理和をとればよいのです.論理和とは,各ビットのANDをとることであり,したがって算術的には掛け算をすればよいのです.(1と1の論理和は1,1と0の論理和は0,0と0の論理和は0です.)


 図6.2.2 サブネットマスク 

2.3 サブネットワーク

 多くの場合,LANは組織構成や空間的な建物配置などに適合するようにネットワークを分割して構築します.分割されたネットワークをサブネットワーク(sub network)といいます.
 通常IPアドレスは,一つの組織に一つだけ配分されるのであって,サブネットワークに個々に配分されるわけではありません.だから,サブネットワークへのIPネットワークアドレスの配分についての手段が必要になります.
 再度,クラスBのネットワークIDについて考えてみましょう.このネットワークでは一つのネットワークIDに対して,16ビットのホスト65,536台を収容できることになります.しかし,こんなに多くのノードを一つのネットワークに収容するのは非現実的です.こういう場合,組織や空間(建物など)単位にサブネットワークをつくり,見かけ上独立したネットワークのように作りかえます.ここで,サブネットマスクが必要になります.
 133.23.0.0というクラスBのIPを取得したネットワークでサブネットを作る場合を考えてみましょう.たとえば,いま6つのサブネットを作るというのであれば,以下のように2−1=7>6ですから,3ビットマスクを用意すればよいでしょう.

10000101.00010111.001YYYYY.XXXXXXXX       (133.23.32.1〜133.23.63.254)
10000101.00010111.010YYYYY.XXXXXXXX       (133.23.64.1〜133.23.95.254)
10000101.00010111.011YYYYY.XXXXXXXX     (133.23.96.1〜133.23.127.254)
10000101.00010111.100YYYYY.XXXXXXXX   (133.23.128.1〜133.23.159.254)
10000101.00010111.101YYYYY.XXXXXXXX   (133.23.160.1〜133.23.191.254)
10000101.00010111.110YYYYY.XXXXXXXX   (133.23.192.1〜133.23.223.254)

 この場合のサブネットマスクは,

11111111.11111111.11100000.00000000    (255.255.224.0)

とすればよいことになります.こうして,ここではサブネット6個,1ネットワーク当り213−2=8190台のホストが接続可能になります.
 山梨大学のサブネット構成は,これほど多数のホストを必要とする組織はないのですが,学科や事務組織などサブネット数を多く必要とすると考えられましたので,きりの良いように8ビットのマスクをかけて,254のサブネットとし,1サブネット当り最大可能収容ホスト数も254台とする,すなわちクラスCのサブネットを定義しています.つまり下記のようになっています.

10000101.00010111.00000001.XXXXXXXX        (133.23.1.X)
10000101.00010111.00000010.XXXXXXXX        (133.23.2.X)
10000101.00010111.00000011.XXXXXXXX        (133.23.3.X)
10000101.00010111.00000100.XXXXXXXX        (133.23.4.X)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
10000101.00010111.11111011.XXXXXXXX    (133.23.251.X)
10000101.00010111.11111100.XXXXXXXX    (133.23.252.X)
10000101.00010111.11111101.XXXXXXXX    (133.23.253.X)
10000101.00010111.11111110.XXXXXXXX    (133.23.254.X)

 この場合には,サブネットワークのホストに被せるサブネットマスクとしては,

11111111.11111111.11111111.00000000    (255.255.255.0)

となります.
 一つのネットワーク組織には,原則的にひとつのIPネットワークアドレスが配分されていることでも分かるように,サブネットワークは,インターネットという外部世界からは顕には存在しないネットワークです.したがって,ネットワークのトポロジカルな配置についても考慮しなければなりません.下に全体のネットワークとサブネットワークとの関係を図にしました.インターネットに直接接続されるルータが,このネットワークに与えられているIPネットワークアドレスを代表していて,上下2台のルータがサブネットのルーティングをします.そして,インターネット側から見ると,あくまで中央のルータだけが見えるのであってサブネットルータは顕には認識されません.


 図6.2.3 ネットワーク内のサブネットワーク 

2.4 VLSM(Variable Length Subnet Mask)

 上の二つの例は,発展途上のネットワークであって,将来どのようにこれが発展するか分からないために極めて単純化されています.その結果,サブネットによってはホストアドレス部が不足するところが出てくるかもしれないし,反面,余ってしまうサブネットも出てきます.これによって心ならずもIPの枯渇に寄与してしまうことになります.そこで,もっと緻密な決め方を考えてみましょう.
 例として,133.23.202.0というクラスCのドメインで考えてみます.ここでは2−2=254台しか接続できませんが,サブネットとしては,30台のホストを接続したいという要望が2ヵ所あり,残りすべてはホスト6台のサブネットだとします.
 まず30台のホストアドレスのサブネットとしては,2-2=30ですから,5ビットのホストアドレスを確保すれば良いので,3ビットのサブネットマスクを設定してやれば良いことになります.また,6台のサブネットの方は,2-2=6ですから,3ビットのホストアドレスで,5ビットのサブネットマスクを定義します.結果は次のようになります.

10000101.00010111.11001010.001XXXXX    (133.23.202.33〜133.23.202.62)
10000101.00010111.11001010.010XXXXX    (133.23.202.65〜133.23.202.94)

 この2サブネットのサブネットマスクは,

11111111.11111111.11111111.11100000    (255.255.255.224)

です.そして残りは,

10000101.00010111.11001010.01100XXX    (133.23.202.97  〜133.23.202.102)
10000101.00010111.11001010.01101XXX    (133.23.202.105〜133.23.202.110)
10000101.00010111.11001010.01110XXX    (133.23.202.113〜133.23.202.118)
10000101.00010111.11001010.01111XXX    (133.23.202.121〜133.23.202.126)
10000101.00010111.11001010.10000XXX    (133.23.202.129〜133.23.202.134)
10000101.00010111.11001010.10001XXX    (133.23.202.137〜133.23.202.142)
10000101.00010111.11001010.10010XXX    (133.23.202.145〜133.23.202.150)
10000101.00010111.11001010.10011XXX    (133.23.202.153〜133.23.202.158)
10000101.00010111.11001010.10100XXX    (133.23.202.161〜133.23.202.166)
10000101.00010111.11001010.10101XXX    (133.23.202.169〜133.23.202.174)
10000101.00010111.11001010.10110XXX    (133.23.202.177〜133.23.202.182)
10000101.00010111.11001010.10111XXX    (133.23.202.185〜133.23.202.190)
10000101.00010111.11001010.11000XXX    (133.23.202.193〜133.23.202.198)
10000101.00010111.11001010.11001XXX    (133.23.202.201〜133.23.202.206)
10000101.00010111.11001010.11010XXX    (133.23.202.209〜133.23.202.214)
10000101.00010111.11001010.11011XXX    (133.23.202.217〜133.23.202.225)
10000101.00010111.11001010.11100XXX    (133.23.202.228〜133.23.202.233)
10000101.00010111.11001010.11101XXX    (133.23.202.236〜133.23.202.241)
10000101.00010111.11001010.11110XXX    (133.23.202.244〜133.23.202.249)

で,19ネットワークが構築できます.このサブネットマスクは,

111111111.11111111.11111111.11111000   (255.255.255.248)

です.こうして,綿密に設定した結果,21のサブネットと174個のホストアドレスが確保できました.
 このように,ひとつのネットワークアドレスの中で異なるサブネットマスクを定義することで柔軟なサブネットワークを構築するやり方をVLSM(Variable Length Subnet Mask)といいます.
 ただし,VLSMは,RIPなどの固定長マスクのルーティングプロトコルはこれをサポートしていないため使えません.こういう場合には後述のOSPFなどをルーティングプロトコルとして採用する必要があります.

2.5 CIDR(Classless InterDomain Routing)

 IPネットワークアドレスの配分は,当初クラスA,B,Cなどとして配分してきました.クラスBとクラスCの間では,一気に256倍も異なります.そのために,「帯に短し,たすきに長し」というわけで,254台以上のホストアドレスを必要とするドメインではいっぺんにクラスBが必要になります.結果IPアドレスの枯渇に寄与してしまいました.
 クラスCに着目してみましょう.クラスCは接続できるホスト数は少ないですが,逆にそのネットワーク数は約210万にも達します.もしこのような数のネットワークアドレスが配られ,それらが独立のネットワークのように扱われたならばDNSなど記憶すべきデータ数が多くなりすぎて,おそらくインターネットは動きが取れなくなったことでしょう.そこで必要なドメインにはクラスCを複数束ねて配分することでネットワークの増加を防ぐことにしました.つまり,クラス区別を無くし,ネットワークアドレスとホストアドレス部を任意のビット数で設定するやり方を考案しました.これをCIDR(Classless InterDomain Routing)といいます.
 たとえば,133.23.164.1から133.23.167.254をまとめて下のようにCIDRとします.

10000101.00010111.10100100.00000001
10000101.00010111.10100111.11111110

この場合のアドレス表現として,

133.23.164.0/22 

とします.これは,上から22ビットまでが共通で,これが一つのネットワークアドレスであること表しています.このようにCIDRを適用しますと,インターネット側から見たとき,クラス定義をしたネットワークと全く同じように見えるのが特長です.もしCIDRを適用しないと,133.23.164.0から133.23.167.0までの4つの独立のネットワークに見えてしまうため,4つのネットワークを管理しなくてはならなくなります.
 CIDRを適用したときのサブネットワークの構築などは上述と全く同様です.


図6.2.4 CIDRを適用したネットワーク

2.6 IPアドレスの枯渇対策

 IPv4では32ビットのアドレスしかありませんから,もはやこれが枯渇しています.そこでIPv6によってアドレスを大幅に増やすことが開始されています.しかし,IPv6が普及するためには,それを識別できるルータが世界中に普及しなくてはなりません.そこで当面の策として上のグローバルIPアドレスに対してプライベートIPアドレスを定義し,それを使用することが行われています.
 プライベートIPアドレスとは,文字どおり一定の限られた地域やグループ内だけで用いられるIPアドレスです.そしてそのアドレスではインターネットには出て行かないようにし,必要があってインターネットに出て行くときにはグローバルIPアドレスに変換して出て行くようにするのです.こういうIPアドレス変換器をNAT(Network Address Translator)と言います.
 プライベートIPアドレスとしては次のような3つのブロックが用意されています.用いるネットワークの規模に応じてこれらを選択して使うことになります.

大規模ネットワーク用   10.0.0.0〜10.255.255.255

中規模ネットワーク用  172.16.0.0〜172.31.255.255

小規模ネットワーク用 192.168.0.0〜192.168.255.255

2.7 IPv6のIPアドレス体系

 IPv6のIPアドレスは128ビットでできています.一定の用途を目的としてプレフィックスが確保されていますが,IPv4の場合のようなクラス定義はなされていません.128ビットは,たとえば,

00110011111000110000111111110000
00000000000000000000000000000000
11100111000110001010101011110000
00100101100100110001110000111111

のように与えられますが,何しろ長いので2進数を並べたのでは目がちらちらしてよく分かりません.そこでIPv4の場合と同じように16ビットずつ八つのグループに区切ります.

0011001111100011  0000111111110000
0000000000000000  0000000000000000
1110011100011000  1010101011110000
0010010110010011  0001110000111111

これらをつぎのように4桁の16進数で表現します.

33E3  0FF0
0000  0000
E718  AAF0
2593  1C3F

これらの区切りを「:」で表して,

33E3:0FF0:0:0:E718:AAF0:2593:1C3F

のように表示します.

 これでもまだ煩雑ですので,先頭の「0」は削除し,かつ16進数で0となるところや連続して0となるところは一つの「:」のみで表記することとして,次のように略記します.

33E3:FF0:E718:AAF0:2593:1C3F

 IPv4との共存も考えてその場合には,IPv4のIPアドレス32ビットを8ビットずつの4つの十進数であらわして,次のように略記します.

0:0:133.23.202.104


 第3節 アドレス解決プロトコル(ARP) 

 ネットワーク間(LANとLANの間)では,IPデータグラムはIPアドレスにしたがって伝送されます.しかし,LAN内部では各ホストに装備されているネットワークボード(イーサーネットボード等)のハードウェアアドレス(MAC( Media Access Control address))を頼りに伝送されます.だから,ここではIPアドレスとMACアドレスの対応関係が分かっていないと,通信ができません.通常,ホストはハードディスクの中にこの対応表を持っていますが,それを作るために必要となるプロトコルがアドレス解決プロトコル(ARP=アープと読む)です.RFC826に書かれているプロトコルです.

3.1 IPアドレスとMACアドレス

 IPアドレスは,たとえて言えば住居表示のようなものです.「山梨県甲府市武田四丁目3-11」という住所を知っているからといって,はじめて甲府市を訪れた人がそこに行けるわけではありません.
 郵便にたとえてみます.いま,差出人が遠くの人で,甲府市について全く知らないとしましょう.それでも郵便は宛先の人に届きます.郵政省の配送システムはこの宛先を頼りにして,甲府市武田四丁目の配達郵便局である甲府中央郵便局まで郵便物を届けます.この場合,甲府中央郵便局は一つのIPドメイン(ネットワークアドレス)に例えられます.このドメイン内に宛先アドレス「武田四丁目3-11」があるのですが,これがホストアドレスです.
 郵便は,郵便受箱に投げ込まれて始めて届くのです.これを実現しているのは,甲府中央郵便局の郵便配達のオジサンの知識の中に,住所表示と郵便受箱との関連データベース(配達のための道順など)ができていて,赤いバイクで走っていくという物理的動作が行われるからにほかなりません.オジさんの知識及び赤いバイクと道路は,OSI参照プロトコルの階層で言えば,それぞれデータリンク層および物理層に相当します.
 ところで,IPアドレスというのはネットワーク層(=IP層)のプロトコルですから,ネットワーク層まで行かないと使えません.ところがドメイン内に届けられたパケットは物理層を介してデータリンク層に渡されているのですから,そこでのアドレスが分からないと届けられません.つまり,データリンク層のアドレスが正しく分かって,その端末にIPデータグラムを渡して初めて無事に正しいパケットが届けられることになるのです.
 データリンク層のこのアドレスがMACアドレス(MACアドレスのことをハードウェアアドレス,または物理アドレスなどということがあります)です.IPアドレスを頼りにして宛先ドメインまで到達したときに,そのIPアドレスを持つ端末にパケットを届けるために必要なアドレスがMACアドレスだというわけです.
 みなさんは,なぜこんな煩雑なこと,つまりIPアドレスとMACアドレスなど分けているのか,MACアドレス一本でいけばいいじゃないかと思うことでしょう.もっともな疑問ですが,世界にはインターネットとは無縁に数多くのLANやWANのプロトコルがあってそれらのハードウェアアドレスに統一がありません.たとえばイーサーネットのハードウェアアドレスは48ビットですが,IPアドレスは32ビットです.またFDDIとイーサーネットではいずれも48ビットですが,アドレスビットの転送順序がお互いに反対になっています.もしIPアドレスをMACアドレスとしますと,ハードウェアを交換したときにハードウェアアドレスも放棄されてしまうかもしれません.しかもハードウェアアドレスは製造時にユニーク(唯一)に付与されますので,これが放棄されますとまた新たにアドレスを公表しなくては他者に分かってもらえません.たとえばEメールなどではコンピュータを変えるたびにメールアドレスが変更されてしまうことになります.
 また,ルータ側で見てみましょう.IPアドレスではネットワークアドレスをルーティングテーブルに書き込んでルーティングしていますので,個々のホストアドレスを見ていませんが,MACアドレスでルーティングするとすれば,48ビットのホストのルーティング情報をもたなくてはなりません.これではルーティングテーブルが大きくなりすぎてとてもルーティングは不可能です.
 こういう理由からハードウェアのしがらみに縛られずに独立したアドレスを有しているということは実に有利なことになるのです.
 さて,こうしてネットワーク層のアドレス=IPアドレスと,データリンク層のアドレス=MACアドレスの対応関係を知る必要が生じます.その手段を提供するプロトコルをARP(=アドレス解決プロトコル,Address Resolution Protocol),およびRARPといいます.

3.2 ARP(Address Resolution Protocol)の仕組

 IPアドレスから,MACアドレスを知るためにルータやホストはARPパケットを送出します.ARPや,後述のRARPパケットは,いずれもデータリンク層のデータフレームのデータフィールド=ペイロードに入れ込まれて送り出されます.一例としてEthernetにカプセル化された場合の全体図を下に示します.(Ethernetの詳細については第7章参照 


 図6.3.1 Ethernetに組み込まれたARP/RARP(数字はOctet数) 

 

 下の図のようなフォーマットのパケットを,上図の宛先MacアドレスにFF.FF.FF.FF.FF.FF,ETYPEフィールドにARPまたはRARPを示す080616または803516と記入して,サブネット内に向かってブロードキャストします.ターゲットプロトコルアドレス内に,MACアドレスを知りたいホストのIPアドレスと,オペレーションコードフィールドに1(ARP要求)を入れ込んで送信します.このとき,このパケットをARPリクエストパケットといいます.
 このリクエストに対して,該当するホストは自分のMACアドレスをターゲットハードウェアアドレスフィールドに記入し,かつオペレーションコードに2を入れて,返送します.これをARPレスポンスパケットといいます.
 こうして,覚えたIPアドレスとMACアドレスの対応表は,メモリーにキャッシュ(一時的に記憶されること)されます.しかし,一定時間を経過するとまたこの記憶を放棄して最新情報をARPリクエストによって採取します.RFC826では,このキャッシュ時間として20分を標準としています.このように頻繁に最新情報に更新するのは,LAN内では誰かがコンピュータを使い始めたり,スイッチを切って使用を停止したり,新しい端末が新たに接続されたりというように端末構成が常に変化すること,またネットワークとして自律的であることが要請されるためにほかなりません.


 図6.3.2 アドレス解決プロトコルフォーマット 
(図中の数値はEthernetの例で,ARPは汎用プロトコルであるためアドレス長については自由度があります)

ハードウェアタイプ: ネットワークの種別.イーサーネットでは1(0000000000000001b)を入れます.
image88.gif (163 バイト) 表4 ARPのハードウェアタイプ
解決要求元プロトコル: プロトコルの種別を表示します.IPプロトコルは0800h(00000000100000000000b)です.
ハードウェアアドレス長: MACアドレスのオクテット数,イーサーネットでは6(00000110b)です.
プロトコルアドレス長: プロトコルアドレスのオクテット数,Ipv.4では4(00000100b)です.
オペレーションコード: ARP要求メッセージでは1(0000000000000001b),ARP応答メッセージでは2(0000000000000010b),RARP要求メッセージでは3(0000000000000011b),RARP応答メッセージでは4(0000000000000100b).
発信元ハードウェアアドレス: 発信元MACアドレス
発信元プロトコルアドレス: 発信元IPアドレス
宛先ハードウェアアドレス: ARPでは省略.RARPでは相手先MACアドレス
宛先プロトコルアドレス: ARPでは相手先IPアドレス.RARPでは省略

3.3 RARP(Reverse Address Resolution Protocol)

 ディスクレスマシンといって,ハードディスクが装備されていないホストでは自分のIPを登録するメモリーが無い場合があります.このようなホストのために,RARP(Reverse Address Resolution Protocol)プロトコルが用意されています.つまり,MACアドレスはMACボードが有って分かりますが,IPアドレスを知らないという場合です.この場合にも,上図のパケットでオペレーションコードフィールドにRARPリクエストメッセージでは3(0000000000000011b,RARPレスポンスメッセージでは4(0000000000000100bを記入して使います.

 第4節 ルーティング 

4.1ルーティングとは

 IP層で記述されるプロトコルによって,IPデータグラムは各ネットワークのルータを介して経路を選択しながら伝送されます.ルータは,一つ以上の接続先を有していますから,複数の接続先の中からどの接続先にIPデータグラムを送るかを選択しなくてはなりません.この操作をルーティング(経路制御)といいます.
 経路制御の手法としては,ホップバイホップ経路制御(Hop-by-Hop Routing)始点経路制御(Souce Routing)の二つの手法があります.下の図のように,ルーターXからルータYにデータグラムを転送するとき,まずXではある根拠でAを選択し,Aでは同じくCを選択してCからYに至るというように,各ルータ固有の選択基準に依存して経路選択を行ない,その結果としてYに至る方式をホップバイホップルーティングといいます.IPプロトコルの主流はホップバイホップ方式です.
 これに対して,始点Xで,終点Yまでの経路を,たとえばX→B→D→YとかX→A→C→Yなどのように予め指定してパケットを送り出す方式を始点経路制御=ソースルーティングといいます.ATM網やX.25などはこの方式によるパケット通信です.


 図6.4.1 ルーティング方式 


 ルータの原理図を下に示します.ルータとは,煎じ詰めて言えばスイッチ回路です.あるネットワークに接続されたインターフェースから別のネットワークが接続されたインターフェースへパケットを転送する装置であって,その接続動作を決定するにはルーティングテーブルが必要になります.いま,自ネットワークからインターネットへ出て行くパケットがあったとき,そのIP層データグラム中の宛先IPネットワークアドレスを見て,それがルーティングテーブルに書き込まれているデータから判断して,何番のインターフェースに該当するかを読み取って,スイッチングします.そのインターフェースの先には宛先IPネットワークアドレスのルータが必ずあるはずだからです.
 既存の多くのルータは,このスイッチング動作をソフトウェア的に行います.IPデータグラムからスイッチングに必要なデータを読み取って,それとルーティングテーブルのデータ
もとに判断してどのインターフェースに転送するのかを決定します.この種のやり方で,小型コンピュータの発達した現在では比較的安価にルータが作られるようになりました.しかし,ソフトウェアを使う分それだけ動作が遅くなることは避けられません.
 そこで,IPアドレスをハードウェア的に読み取って,ASICなどのハードウェアでスイッチングするルータが出現してきました.IP層がOSI参照プロトコルの第3階層に相当しますので,その名をとってこういうタイプのルータをレイヤー3スイッチなどということがあります.ちょうど,スイッチングハブがレイヤー2スイッチに相当するのと同じ考え方です.ATMスイッチなども広義のレイヤー3スイッチに分類できます.

 図6.4. 2 ルータの概念図 

 ルーティングテーブルには最低限,@通信可能な宛先IPネットワークアドレス,Aその宛先ネットワークまでのホップ数(Metricという),Bその宛先へ出て行くためのインターフェース番号,などのデータが書き込まれています.その他に,C宛先に行くための回線の品質(QoS=Quality of Service)・価格・スループットなどが書き込まれていることもありますが,それはプロトコルの種類によります.

 ルータは,自分が所持するルーティングテーブルにルーティング情報が無い場合にはそのパケットは宛先不明として廃棄し,そのことを送信元に通知します.→ICMP参照
 最寄りのルータのルーティングテーブルは,UNIXなら「netstat -r」というコマンドでこのテーブルを参照することができますので調べてみましょう.PCではTelnetを使って調べることができます.
 このルーティングテーブルを構築するためのプロトコルがルーティングプロトコルです.ルーティングに際しては,回線が故障している場合などはこれを回避して送ることもルータの役割です.そのような場合には,ルーティングテーブルには,故障ルータを消去することでスイッチングを回避します.
 ルーティングプロトコルの運用には大別して2種類あります.一つは,ネットワーク管理者が手で書き込む方法,もう一つはルータ同士で情報を交換しながら自動的に作成する方法です.前者をスタティックルーティング,後者をダイナミックルーティングといいます.


 図6.4.3 ルーティングプロトコルの分類 


 スタティックルーティングは小規模なLANや出口が一つしかないようなネットワークでは可能でしょうが,大規模なネットワークでは不可能です.したがって,大規模ネットワークではダイナミックルーティングが主流になります.ただ,ダイナミックルーティングでは,ルーティングテーブルを最新のものにしておくために,常に情報のやり取りをするためトラフィックが発生します.ネットワーク内の何処かのルータが故障したとしますと,ルータ達はそのための情報を交換し合いますが,その情報が一巡してルーティングが収束するまでの時間をコンバージェンス時間といいます.言うまでもなく,コンバージェンス時間は短ければ短いだけよいのですが,そのためにはルーティング情報を頻繁にやり取りしなくてはなりません.そのためにネットワーク帯域が占有されて本来の通信速度が低下することになります.また,コンバージェンス時間内にはルーティングが不安定になることもあります.


 図6.4.4 インターネットイメージ図 

4.2 ルーティングプロトコルの分類

 ルーティングプロトコルには大別して,IGPs(Interior Gateway Protocols)EGPs( Exterior Gateway Protocols)の2種類があります.
 下の図のように,たとえば学術情報ネットワークSINETのような一つのネットワークポリシーでできているネットワーク組織のことを自立組織AS( Autonomous System)といいます.中央政府の行政ネットワークである霞ヶ関WANとか,自治体行政ネットワーク,民間の個々の第一種インターネットサービスプロバイダISPなども自立組織です.AS内部をInterior,外部をExteriorと定義して,Interior内のルーティングプロトコルをIGPs,AS間をルーティングするルーティングプロトコルをEGPsといいます.


 図6.4.5 ルーティングプロトコルの適用 

 現在,広く使われているIGPs,EGPsは下表のとおりです.大別して,ディスタンスベクター型リンクステート型に分かれます.
 ディスタンスベクター型は,宛先ネットワークが,「自分から数えていくつ向こうのルーターに接続されているか(=ホップ数=distance)という数値で世界を理解する」という単純なアルゴリズムです.そしてそのホップ数の最小の経路をルートとして採用するのです.ホップ数の最小が最も合理的なルートとは限りません.スループットを最大にするとか,経費を最低にするとか,誤り率を最小にするとか,遅延時間を最小にするとか,ルートの選択には様々な選択基準(コストなどという)があるはずだからです.したがってホップ数の最小という選択は,どの経路も同じ特性でできている場合にのみ合理的な選択となります.それゆえ,ディスタンスベクター型のプロトコルはLAN内のすべてが均一にできているネットワークで使われます.
 これに対して,リンクステート型は複雑で,各ルータの属するネットワークのトポロジーとコストを報告しあうことで詳細な情報を交換し合います.そしてこれをもとにルータは,パケットが要求する指標に最適なルートを選択しながら経路を決定していきます.


 図6.4.6 ルーティングプロトコルの分類 

4.3 ディスタンスベクター型ルーティング 

  ディスタンスベクター型のルーティングプロトコルでやり取りするルーティングデータは,ネットワークのIPアドレスとルータからのホップ数=metric数だけです.すなわち,図6.4.7のように,自ルータに接続されているネットワークはmetric=1,隣接ルータに接続されているネットワークはmetric=2というようにデータ化されています.したがってディスタンスベクターは,ネットワークの帯域が均一でサブネットマスクが同一のネットワークに適用されます.しかも,Metric数が15を超えたネットワークについては無視することとしています.それゆえ,自分から数えて16番目以遠のルータは見えなくなりますが,その対策としてデフォルトルータを指定することができて,ルーティングテーブルに無いネットワークへのパケットについてはデフォルトルータに一括して送る仕組みになっています.パケットは,デフォルトルータでルーティング情報を見つけられれば宛先に届きますが,これによって,パケットがTTL64以内で届くかどうかは分かりません.パケット送信後ただただ「祈る」だけです.


 図6.4.7 ディスタンスベクター型のルーティングテーブル 

4.3.1 ルーティング情報の交換

 下の図のように,ルータA,B,C,Qが接続されたネットワークが敷設され,ルータが初めて動作し始める場合を例にとってそれぞれのルーティングテーブルがどのように変化していくかを見てみましょう.最初各ルータには何の知識もありませんから,ルーティングテーブルは下図の交信回数0のようになっています.すなわち,自分は自分を認識していますから,各ルータの自身へのホップ数=メトリックは0ですが,他者については全く知らないので無限遠を表す16が入れてあります.
 ここで各ルータは,それぞれ隣接ルータに自分のルーティングテーブルを送って情報を交換し合います.すると下の表のTのような結果になります.すなわちルータAを例にとると,ルータBからの表にBとして0が入っていましたから,隣接ルータがBであること,そこまでのホップ数が1であることを認識します.このようにしてそれぞれのルータは一回目の交信で隣接ルータを知ることができて,そこにメトリック1を入れ込みました.
 次に第2回目の交信をします.それぞれのルータは自分の隣接ルータが何であるかという情報を知らせ合いますので,各自の隣接ルータ以外のメトリックは2とすればよいことになります.この段階で中心部のルータBとルータCのテーブルは完成していますが,AとQは未完です.
 三回目の交信によってメトリック3の情報が,隣接ルータのメトリック2として知らされますのでルータAもルータQもテーブルを完成できました.
 このように,N個のルータが接続されているネットワークでは,N-1回の更新によってルーティングテーブルが完成します.


 
図6.4.8 ルーティングテーブルの更新 


 図6.4.9 レスポンスパケットの転送 

4.3.2 ディスタンスベクタープロトコルの問題点

 ディスタンスベクター型のルーティングプロトコルは簡便であるかわりに欠点があります.その一つは,ルータの経路がループを形成している場合には無限カウントが発生して全くお手上げだということです.
 ループを形成していなくても,無限カウント問題が生じます.その例を下の図で見てみましょう.図のように,ルータCが故障しました.したがってルータBはCからのレスポンスが無いために,自分のルーティングテーブルのうちCのホップ数を16と書き替えます.しかし,それをルータAに知らせる前にAからのテーブルを受信してしまうと問題が発生します.ルータBは,AのテーブルにBのホップ数2とあるのを読んでしまい,再度テーブルを書き替えてCのホップ数を3と訂正してしまいます.右隣にあったルータCは故障したのではなく,Aの左隣に移設したものと解釈してしまったのです.それをAに知らせます.AはCがBの先にあると思っていましたが,Bからの報告で3ですからBから数えて三つ目,すなわち自分から数えて4に書き替えて,またBに報告します.BはCがAから先4番目にあるものと解釈してホップ数を5として,次回Aに報告します.こうしてCがホップ数16となるまで,永久にこの誤ったやり取りが実行されてしまいます.これを無限カウント問題といいます.
 この対策としては,AがCをBの右隣(ホップ数2)にあると知ったのはBからの情報でしたから,情報を寄せてくれたBの情報をBには送信しないようにすればよいのです.この例では,Aは全ての知識をBから貰っていますから,Bには報告するデータは皆無であって,上のような誤りは発生しません.こういうアルゴリズムをスプリットホリゾン(Split Horizon)方式といいます.


 図6.4.10 無限カウント問題の例 

4.3.3 RIP(Routing Information Protocol)

 RIPは,ディスタンスベクター型のプロトコルで,最初4.3BSD-UNIXに標準装備されているroutedデーモンが実現していました.後にRFCに掲載されてインターネットIP層の標準プロトコルとなりました.それだけに仕組みが単純で扱いが簡単である反面,欠点も多く含んでいます.
 RIPでは,上述のルーティングデータの更新を,「Responseパケット」として30秒間に一回,UDPデータグラム(ポート番号52010)に組み込んで隣接ルータにブロードキャストします(ブロードキャストするのは,隣接ルータが変更されている可能性があるからです).それを受け取った隣接ルータBは自分の所持するルーティングテーブルと比較して内容を確認し,新しい情報が含まれていて変更の必要があれば変更します.その結果を,自分の時計で30秒経過後隣接ルータにブロードキャストします.
 この場合,隣接ルータから180秒間にわたってルーティングテーブルが送られてこない場合には,隣接ルータが故障したとみなして,そのメトリックを16として次の交信時に送信します.さらにその後120秒間待ってもその隣接ルータからデータが届かなければ,そのルータは撤去されたものとみなしてその先のデータを削除します.これをガーベッジコレクションといいます.

4.3.4 RIP2パケットフォーマット 

 RIPのパケットフォーマットを下図に示します.これが,UDPのペイロードに挿入されて,隣接ルータのポート番号52010宛に送られるのは上述のとおりです.


 図6.4.11 RIP2パケットフォーマット 

 IPヘッダに最大60バイト使用するとして,UDPに8バイト,RIPパケットヘッダーに4バイト使いますから,最小MTU(576バイト)のネットワークに対してもフラグメントを避けるためには最大25個のネットワーク情報に制限する必要があります.25個以上のネットワーク情報がある場合には複数のUDPデータグラムを送受信することになります.(RIP2には認証機能を付加することができます.その場合には上図のrip data1の部分に認証情報が付加されますので,UDPセグメント一つに対して最大24個のネットワーク情報に制限されます.)
Command: 8ビットでこのパケットがRequestパケットResponseパケットかの種別を表わします.@Request;「00000001」を入れる.新規に稼動し始めたとき,または故障修理などの後などに,隣接ルータにブロードキャストする.AResponse;「00000010」を入れる.Requestされたルータに対してはユニキャストで送信します.30秒間に一回の送信もResponseパケットでブロードキャストします.
Version: 8ビットで表わしたRIPのバージョン番号で,RIPでは,1(「00000001」),RIP2では2です.0が入っていたら廃棄されます.また,1であっても上図の0のところに1が入ったものは廃棄されます.
Address Family Identifier: RIPはマルチプロトコルでIP以外にも使われます.IPでは2(「00000010」)です.
IP Address: IPアドレス番号.IP以外に使用することができるようにこのフィールドには12オクテット用意されていますが,IPでは4オクテット(32ビット)しか使いませんので,残りは0をパディングします.
METRIC: 該当ネットワークまでのホップ数.16以上の数値は無視します.

4.3.5 ネットワークの変更

 下図に,今までA,B,C…など緑色のルータだけがあったところへ,新たにネットワーク(IP名=X)が構築されたときの,ルーティング情報の伝達されていくさまを示します.
 まず,新規参入したルータXは無知識ですから,動作開始と同時にRequestパケットをブロードキャストします.隣接ルータBやCは自分が所有しているルーティング情報をX宛にResponseパケットの形でユニキャストで送信します(RIPではユニキャストはこの場合だけ使われます).Xはこれを受信して自分から見たデータに整理します.
 Xが新たに参入したため,BやCのテーブルにはネットワークXについて,そこまでホップ数2であること,ネットワークはXであること(XのIPアドレス)などが記入されます.その情報をBから受け取ったルータAも,自分のテーブルとの相違から新たなネットワークXの存在に気付き,それがホップ数3であり,そこへはBを経由すればよいことなどを記入します.このようにして,Metric数15未満の情報については常に確認を取りつつ運用されます.


 図6.4.12 ネットワークの変更 

 RIPは,均一なネットワーク間のルーティングプロトコルで,それだけに複雑で大規模なネットワークでは,必ずしも適正な経路を使うとは限らないため総合的な能率が悪いとされています.また,常時30秒おきにトラフィックを発生させますから,ネットワークの効率を阻害します.また,ネットワークがループを形成しているときなどは,そのままですと,ルーティングループが出来上がってしまい,対策が必要となります.

4.4 リンクステート型ルーティング

 ディスタンスベクター型ルーティングは,他に選択の余地が無いほどネットワーク品質が均一な場合には最適なルーティング手法です.しかし,実際のネットワークでは,あらゆる評価において均一であることなどありえません.たとえば,特定のルータ間はトラフィックが多くてしばしばパケット廃棄が起こるとか,値段が高いとか,回線の誤り率が高いとか,セキュリティに不安があるとか,均一性を阻害する要素は沢山あります.
 リンクステート型ルーティングは,そのような不均一なネットワーク間の経路選択において,もっとも「コストの低い経路」を選択するルーティング手法です.
 この場合,コストの概念には多様な評価がありえますが,ここでは「評価関数の最大値(または最小値)」と定義しておきます.たとえば,スループットの最大とか,価格の最小とか,セキュリティの最大とかが考えられます.

4.4.1 リンクステート型ルーティングの原理

 下の図のように,各ルータ間を結ぶネットワークのコストが与えられているとします.各ルータは,相互に自分と接続している「近隣」ルータとの間で情報を交換して,それぞれに至るコストをリンク状態データベース(Link State Data base=LSDB)として所持しています.たとえば,ルータBはルータEとの間でIPデータグラムを送信する場合には,ルータCではなくてルータD経由で行えばよいということを知っています.それは,ルータC→ルータD経由でルータEに伝送してもよいが,コストが1だけ高くなることをルータBが知っているからです.

 ルータBが,こういう知識を有するに至った論理を追ってみましょう.
 @ 隣接ルータAとの情報交換で,AはBとコスト1で接続されている以外の情報が無いこと.
 A 隣接ルータCは,Bとの間でコスト2で接続されていますが,同時にルータDともコスト3でつながっているという情報を寄せてきました.
 B しかし,ルータB自身もルータDとつながっていて,そのコストは4ですから,ルータDがルータCの先にあるという情報は削除します.
 C ルータDからは,ルータBとコスト4で接続されているだけでなく,ルータEともコスト3でつながっているという情報が寄せられましたので,ルータEへはルータD経由でコネクションすればよいと認識します.

 このようにして,ルータBが認識したネットワークは,ルータCとD間を結ぶコスト3のネットワークの存在を無視したものとなります.他のルータもそれぞれにコスト最小の視点からネットワークを認識します.

 
 図6.4.13 リンクステート型ルーティングネットワーク 

4.4.2 OSPF(Open Shortest Path First)

 OSPFは,IGPsの中ではもっとも近代的なリンクステート型ルーティングプロトコルです.現在ヴァージョン2が標準です.下の図のようなOSPFヘッダを持つパケットが,IPデータグラムのペイロードにプロトコル番号89として挿入され,ネットワーク内にTTL=1に設定して送出されます.


 図6.4.13 OSPFヘッダのパケットフォーマット 

version: 現在2(00000010)が入ります.

OSPFタイプ: 次の5種類のタイプが定義されています.
1 Hello
2 データベース記述
3 リンクステート記述
4 リンクステート更新
5 リンクステート確認応答

パケット長: ヘッダとデータを含む全パケット長で,MTU以下の数値とする.

ルータID: ルータの識別番号です.

エリアID: エリア分割を定義されたネットワークではそのエリアに付けたID番号.内部ルータか,エリア境界ルータか,バックボーンルータか,AS境界ルータかなどを識別します.エリア分割されていないネットワークならば0が入ります.

認証タイプ: 後続の認証データの種別を表します.

データ: OSPFヘッダのペイロードで,下の図のようなLSA( Link State Advertisement )共通ヘッダとともにリンク状態LSを表すデータが入ります.詳細説明は省略します.


 図6.4.14 LSA共通ヘッダとLSA情報データ 

 


第5節 ICMP(Internet Control Message Protocol)

 ICMPは,IPデータグラムが正しく転送できないときに送信元ホストに言い訳(原因説明)をするためのプロトコルでRFC792で規定されています.宛先到達不能メッセージ送信元抑制メッセージなどが主たるものです.これは,IPデータグラム(図6.1.1)のデータフィールド(ペイロード)に入れ込まれてホストに転送されます.そのデータリンク層のフレームに入れた全体構造を下図6.5.1に,またICMPを図6.5.2に示します.ここで,第2層というのはEtherNetやFDDIなどのデータリンク層のフレームのことです.
 図6.5.1 ICMPの全体構造 


 図6.5.2 ICMPパケットの構造 

Type図6.5.2で,8ビットのTypeフィールドはICMPのメッセージタイプを表し,例えば,エコー応答=00,宛先到着不能=03,発信抑制=04,ルート変更=05等々,13種類のメッセージタイプが定義されています.その全体は,ICMPタイプ表を参照してください.ここでは,ICMPの代表的な二つのタイプ「宛先到達不能」と「送信元抑制」について説明します.その他のタイプについては煩雑ですので省略します.

宛先到達不能メッセージ

code:上のTypeによって分類されたメッセージタイプに関する詳細な説明を示します.そのICMPTypeが03の「宛先到達不能」の場合のコードについてはメッセージタイプコード表を参照してください.

Check Sum:IPデータグラムのチェックサムと同一.
Reserved:32ビットの予約フィールドです.
Header&64bit:到達不能となったデータグラムのヘッダ部とそのペイロード(DATA)の最初の部分を併せて9octet分を表示します.

 送信元抑制メッセージ

 送信元から次々とメッセージが送られてきて処理できなくなった場合,ルータ・ゲートウェイ,受信DTEは送信元DTEに向かってこのメッセージを送って送信抑制を求めます.フロー制御です.送信元抑制メッセージのフレームフォーマットは「宛先到達不能メッセージ」と同一です.
Type:ここに4,<00000100>が入って「送信元抑制メッセージ」であることを表わします.
Code:「宛先到達不能メッセージ」の場合と同じ上の表を使います.

ping

 pingは,ICMP-Type08の「エコー応答・要求」としてICMPの機能を用いてIPデータグラムの到達やネットワークの遅延をしらべるソフトウェアです.これによってネットワークの接続状態を知ることができます.その例を下記に示します.宛先までのIPデータグラムの到着,及びそれに要する往復時間,最終的にそのデータの集計結果などを表示します.
%>ping www.asahi.com
PING mf02.asahi.com (210.173.162.10) 送信元 133.23.202.100 : 56(84) bytes of data.
64 バイト応答 送信元 mf02.asahi.com (210.173.162.10): icmp_seq=0 ttl=242 時間=33.429ミリ秒
64 バイト応答 送信元 mf02.asahi.com (210.173.162.10): icmp_seq=1 ttl=242 時間=36.638ミリ秒
64 バイト応答 送信元 mf02.asahi.com (210.173.162.10): icmp_seq=2 ttl=242 時間=33.980ミリ秒
64 バイト応答 送信元 mf02.asahi.com (210.173.162.10): icmp_seq=3 ttl=242 時間=33.226ミリ秒
64 バイト応答 送信元 mf02.asahi.com (210.173.162.10): icmp_seq=4 ttl=242 時間=33.478ミリ秒
^C
--- mf02.asahi.com ping 統計 ---
送信パケット数 5, 受信パケット数 5, パケット損失 0%
Round-Trip 最小/平均/最大/mdev = 33.226/34.150/36.638/1.273ミリ秒
%> 

trace route

Tracerouteは,ICMP-Type11の「データグラムの時間超過」としてICMPの機能を使ってIPパケットの経路を確認するプログラムです.Type11はTTL(Time To Live)が0になったことを知らせる機能を持っています.
 最初にTTL=1として宛先サーバーにIPパケットを送信しますと,隣接のルータでパケットが廃棄され,そこまでの所要時間などの情報がICMPデータとして送られてきます.
 次にTTL=2として同様にパケットを送出しますと,もう一つ先のルータで廃棄された結果が知らされてきます.こうして順次TTLを一つずつ増やしながら次々と各ルータまでの到達時間や各ルータのIPアドレスなどを知ることが出来ます.


 図6.5.3 traceroute による経路検索 

%>traceroute www.yamanashi.ac.jp
traceroute to www.yamanashi.ac.jp (133.23.253.200), 30 hops max, 38 byte packets
1 133.23.202.246 (133.23.202.246) 0.690 ms 0.532 ms 0.487 ms
2 133.23.111.2 (133.23.111.2) 0.744 ms 0.557 ms 0.521 ms
3 yins.yamanashi.ac.jp (133.23.253.200) 24.732 ms 0.919 ms 0.852 ms
%> 

 

 back to the Index page