更新日:02/07/13 22:20:20

![]()
第1節…… IPデータグラムの構造
第2節…… IPアドレス
第3節……アドレス解決プロトコル
第4節…… ルーティング
第5節…… ICMP

図6.1.2 TOSフィールド

図6.1.3 フラグメントフィールド
フラグメンテーションは分かり難いので,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 フラグメンテーションの原理図

図6.1.5 IPv.6のデータグラム
クラスA/クラスB/クラスC/クラスD/クラスE
クラスD: 最初の4ビット(プレフィックス)が1110で始まるネットワークでマルチキャストに使われます.
クラスE: 最初の4ビット(プレフィックス)が1111で始まるネットワークで,実験用に確保されています.クラスD,Eを合わせてIPアドレス資源を12.5%占有します.

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

図6.2.2 サブネットマスク
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)
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)

図6.2.3 ネットワーク内のサブネットワーク
10000101.00010111.11001010.001XXXXX (133.23.202.33〜133.23.202.62)
10000101.00010111.11001010.010XXXXX (133.23.202.65〜133.23.202.94)
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)
111111111.11111111.11111111.11111000 (255.255.255.248)
10000101.00010111.10100100.00000001
10000101.00010111.10100111.11111110
133.23.164.0/22

図6.2.4 CIDRを適用したネットワーク
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
IPv6のIPアドレスは128ビットでできています.一定の用途を目的としてプレフィックスが確保されていますが,IPv4の場合のようなクラス定義はなされていません.128ビットは,たとえば,
00110011111000110000111111110000
00000000000000000000000000000000
11100111000110001010101011110000
00100101100100110001110000111111
のように与えられますが,何しろ長いので2進数を並べたのでは目がちらちらしてよく分かりません.そこでIPv4の場合と同じように16ビットずつ八つのグループに区切ります.
0011001111100011 0000111111110000
0000000000000000 0000000000000000
1110011100011000 1010101011110000
0010010110010011 0001110000111111
これらをつぎのように4桁の16進数で表現します.
33E3 0FF0
これらの区切りを「:」で表して,
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

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

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

図6.4.1 ルーティング方式
ルータの原理図を下に示します.ルータとは,煎じ詰めて言えばスイッチ回路です.あるネットワークに接続されたインターフェースから別のネットワークが接続されたインターフェースへパケットを転送する装置であって,その接続動作を決定するにはルーティングテーブルが必要になります.いま,自ネットワークからインターネットへ出て行くパケットがあったとき,そのIP層データグラム中の宛先IPネットワークアドレスを見て,それがルーティングテーブルに書き込まれているデータから判断して,何番のインターフェースに該当するかを読み取って,スイッチングします.そのインターフェースの先には宛先IPネットワークアドレスのルータが必ずあるはずだからです.
既存の多くのルータは,このスイッチング動作をソフトウェア的に行います.IPデータグラムからスイッチングに必要なデータを読み取って,それとルーティングテーブルのデータ
図6.4. 2 ルータの概念図
ルーティングテーブルには最低限,@通信可能な宛先IPネットワークアドレス,Aその宛先ネットワークまでのホップ数(Metricという),Bその宛先へ出て行くためのインターフェース番号,などのデータが書き込まれています.その他に,C宛先に行くための回線の品質(QoS=Quality of Service)・価格・スループットなどが書き込まれていることもありますが,それはプロトコルの種類によります.

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

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

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

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

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


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

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

図6.4.12 ネットワークの変更
ディスタンスベクター型ルーティングは,他に選択の余地が無いほどネットワーク品質が均一な場合には最適なルーティング手法です.しかし,実際のネットワークでは,あらゆる評価において均一であることなどありえません.たとえば,特定のルータ間はトラフィックが多くてしばしばパケット廃棄が起こるとか,値段が高いとか,回線の誤り率が高いとか,セキュリティに不安があるとか,均一性を阻害する要素は沢山あります.
リンクステート型ルーティングは,そのような不均一なネットワーク間の経路選択において,もっとも「コストの低い経路」を選択するルーティング手法です.
この場合,コストの概念には多様な評価がありえますが,ここでは「評価関数の最大値(または最小値)」と定義しておきます.たとえば,スループットの最大とか,価格の最小とか,セキュリティの最大とかが考えられます.
下の図のように,各ルータ間を結ぶネットワークのコストが与えられているとします.各ルータは,相互に自分と接続している「近隣」ルータとの間で情報を交換して,それぞれに至るコストをリンク状態データベース(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 リンクステート型ルーティングネットワーク

図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情報データ

図6.5.2 ICMPパケットの構造
code:上のTypeによって分類されたメッセージタイプに関する詳細な説明を示します.そのICMPTypeが03の「宛先到達不能」の場合のコードについてはメッセージタイプコード表を参照してください.
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
%>