読者です 読者をやめる 読者になる 読者になる

KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

ルーティングと経路制御表の集約計算について学ぶ

ネットワーク特論1の第6回目の授業内容のまとめになります。

※第5回は演習回のため、まとめは無し

AIITのネットワーク特論1を受講しました - KATOエンジニヤリング開発日誌

TCP/IPモデルの役割と標準化を学ぶ - KATOエンジニヤリング開発日誌

レイヤ2のネットワーク機器と通信方式・データ配送方式 - KATOエンジニヤリング開発日誌

ネットワーク層の機器と技術について学ぶ - KATOエンジニヤリング開発日誌

第6回目の目標

  • IPアドレスとネットワーク
    • CIDR、グローバルアドレス、プライベートアドレスについて説明できる
  • ルーティング
    • ルーティングの概要、ダイナミックルーティング、スタティックルーティング、デフォルトルートついて説明できる
    • 経路制御表の集約計算ができる
  • ルーティングプロトコルの概要
    • RIPとOSPFの概要について説明できる
  • IPv4ヘッダの各フィールドについて説明できる

IPアドレスとネットワーク

CIDR(Classless Inter-Domain Routing)

CIDRとは「クラスに縛られない組織(ドメイン)間の経路制御」を意味する言葉の略である。

1990年代までは各クラスへのIPアドレスの割り当てはクラス単位で行われていた(クラスフルアドレス)。

しかし、クラスフルアドレスだと無駄になるIPアドレスが出てくるため(特にクラスBのアドレス)、任意のビット長でIPアドレスを配布できる仕組みであるCIDRが考案された。

組織間のルーティングプロトコルがCIDRに対応することで、クラスに縛られずIPアドレスが配布できるようになった。

これは今までは、300のIPアドレスが必要な時にクラスCでは足りないため、クラスBが割り当てられ、その結果60000以上のIPアドレスが無駄になっていたが、クラスCのアドレスを2つまとめて割り当てることで無駄になるIPアドレスを無くし、IPv4のアドレス空間を有効利用できるようになったことを意味する。

サブネットマスクと似たようなものだが、サブネットマスクはクラスのネットワークアドレス部を拡張する目的で考案されて、それを拡張したのがCIDRといえる。

CIDR表記 アドレス範囲 サブネットマスク 最大アドレス数
w.x.y.z/31 w.x.y.z ~ w.x.y.z+1 255.255.255.254 2
w.x.y.z/30 w.x.y.z ~ w.x.y.z+3 255.255.255.252 4
w.x.y.z/29 w.x.y.z ~ w.x.y.z+7 255.255.255.248 8
w.x.y.z/24 w.x.y.0 ~ w.x.y.255 255.255.255.0 256
0.0.0.0/0 0.0.0.0 ~ 255.255.255.255 0.0.0.0 4,294,967,296

VLSM(Variable Length Subnet Mask)

CIDRに対応した当初は、組織のネットワーク内ではサブネットマスクの長さを統一しなければならなかった。

しかし、組織の場合、部署によっては必要なホスト数が100の場合もあれば、500の場合もありえる。

組織内部のネットワークでも可変長のサブネットによる効率的なIPアドレスの利用を実現するための技術としてVLSMが考案された。

これは組織内のルーティングプロトコルをRIP2やOSPFに変更することで実現する。

グローバルアドレスとプライベートアドレス

  • グローバルアドレス
    • インターネットに直接接続されている装置に割り当てられる全世界で唯一のIPアドレス
    • グローバルIPアドレスのネットワークでは重複するIPアドレスは存在しない
    • 世界的にはICANNという組織がIPアドレスの分配を行っている
    • 日本ではJPNICという組織がICANNの配下として、IPアドレスの分配を行っている
  • プライベートアドレス(ローカルIPアドレス)
    • 個別のネットワーク内部で自由に設定できるIPアドレス
    • インターネットに接続しない独立したネットワークの場合には、そのネットワーク内でIPアドレスが一意(Unique)であればよい

プライベートアドレスのホストとグローバルアドレスのホストが通信するためには、間にNAT(Network Address Translator)という装置を入れる必要がある。

ルーティング(経路制御)

ルーティングテーブル(経路制御表)

IPパケットが送信元から目的の宛先までの最適な経路を選択することを「ルーティング」とよぶ。

入力したパケットをルーティングによって選ばれた出力インタフェースに出力することを「フォワーディング」とよぶ。

IPアドレスだけではパケットを目的の宛先ホストまで届けることはできない。

そのため、最適な経路であるルーティングの情報を保持する「経路制御表(ルーティングテーブル)」が必要になってくる。

IPプロトコルを使って通信するホストやルータは必ずこの経路制御表を持っており、経路制御表をもとにしてパケットの送信先を決定し、パケットを配送している。

経路制御表を作成するには下記2種類の方法がある。

  • スタティックルーティング(静的経路制御)
    • ネットワーク管理者がルーティングテーブルを事前に設定する方法
    • ネットワークに変更があった場合、管理者が全てのルータにルーティング設定を行わなければならない
    • ネットワークに障害があった場合に、自動で代替経路に切り替えることができない
  • ダイナミックルーティング(動的経路制御)
    • ルーティングプロトコルと呼ばれるプロトコルを使用し、ルータが他のルータと情報を交換して自動的に作成する方法
    • 定期的にルータ間で情報のやり取りを行うため、つねにネットワーク帯域をルーティングプロトコルが使用されている状態になる
    • 上記理由によりルータに負荷が掛かる
    • 代表的なルーティングプロトコルは下記3つがある
      • RIP(Routing Information Protocol)
      • OSPF(Open Shortest Path First)
      • BGP(Border Geteway Protocol)

デフォルトルート

すべてのネットワークやサブネットの情報を経路制御表に持つと無駄なので、デフォルトルートが利用される。

これは経路制御表に登録されていないIPアドレスが渡されたときの経路になる。

デフォルトルートは「0.0.0.0/0(0.0.0.0というIPアドレスではない)」、または「default」と記述する。

一般的にデフォルトルートは、設定するルータより1つISP(インターネット)寄りのルータをネクストホップとする。

経路制御表の集約

ネットワークアドレスのビットのパターンを考えて階層的に配置することで、内部的には複数のサブネットワークから構成されていたとしても、外部からは代表するネットワークアドレス1つで経路制御することができる。

つまり、ネットワーク構築を上手に行うと経路制御情報を集約することができ、経路制御表を小さくすることができる。

経路制御表が大きいと、管理に多くのメモリやCPUが必要になったり、ルーティングの検索に時間が掛かるようになる。

そのため、IPパケットの転送能力・質が低下してしまう。

さらに、ルータ自身が知っている経路情報を周囲のルータに伝える際に、情報を小さく抑えられるという意味もある。

例:集約前のルータXの経路制御表
IPアドレス 次のルータ
192.168.2.0/25 ルータA
192.168.2.128/25 ルータA
192.168.3.0/26 ルータB
192.168.3.64/26 ルータB
192.168.3.128/26 ルータB
192.168.3.192/26 ルータB
集約後のルータXの経路制御表
IPアドレス 次のルータ
192.168.2.0/24 ルータA
192.168.3.0/24 ルータB
ルータXが広報する経路制御表
IPアドレス 次のルータ
192.168.2.0/23 ルータX

ARP(Address Resolution Protocol)

ARPはアドレス解決のためのプロトコルで、宛先IPアドレスを手がかりに、次にパケットを受け取るべき機器のMACアドレスを知りたいときに使うものである。

IPパケットはデータリンク層でL2ヘッダが付加された状態で送信されるため、MACアドレスの情報が必要になる。

しかし、IPアドレスとMACアドレスは関連付けがないのでARPでMACアドレスを知る必要がある。

ルーティングプロトコル概要

動的経路制御表(ダイナミックルーティング)を作成するプロトコルの中からRIPとOSPFの説明を行う。

RIP(Routing Information Protocol)

ディスタンスベクター型のプロトコル。

宛先ホストまでのホップ数を距離と考え、宛先ネットワークまで最もホップ数が少ない経路でパケットが配送されるように各ルータのルーティングテーブルを作る。

RIPはARPANET時代から使われている歴史のあるプロトコルであり、発明当初は標準規定がないまま実装されていたが、RFC1058によって1988年に標準仕様が確定した。

大規模なネットワークでなければ現在でも利用されている。

  • RIPの動作

    • 各ルータはいくつかのルータを経由した先にどんなネットワークがあるかというルーティングテーブル上の情報を、直接接続されているルータに定期的に送信している。 -各ルータは直接接続しているルータから教わった、どのネットワークがいくつのルータを経由した先にあるかという情報を自身のルーティングテーブルに加える。
    • その際に、そのネットワークへのネクストホップはその情報を教えてくれたルータにする。
    • いくつかのルータを経由した先にあるかという情報は、教わった情報に自分自身の分である1を足しておく。
  • RIPの限界

    • ホップ数しか見ていないので、帯域(回線速度、混雑度、回線品質)を見ていない
    • 大規模なネットワークだと、経路の収束に時間が掛かるため対応できない
    • 距離は最大16という制限がある(実質15ホップまで)
    • 全ての経路を30秒毎にブロードキャストするため、トラフィック量が膨大である

OSPF(Open Shortest Path First)

リンクステート型のルーティングプロトコル。

各ルータがネットワーク全体の構成を認識し、経路表を作成する(経路表ではなく、構成を交換する)。

リンクごと回線の重み付けを行い、回線速度・信頼性・ホップ数などの総合的な情報をコストとして、効率のよい経路を選択できる。

  • OSPFの動作
    • 各ルータがリンクステートという情報要素を作成し、マルチキャストで他のOSPFルータに配信する
    • ネットワーク構成をリンクステートデータベース(LSDB)として保持する
    • SPFアルゴリズムにより最短パスツリー(ネットワークマップ)を作成する
    • リンクステート情報の交換はリンク状態が変化したときに実施する
      • リンク状態に変化がない場合には、Helloパケットによる生存確認のみが行われる
    • 30分に1度リフレッシュが行われる

IPv4ヘッダ

ヘッダ 説明
Version IPのバージョン番号
IHL IPv4ヘッダの長さ、オプションが無いときは20バイト
サービスタイプ パケット配送の優先度
Total Length IPv4ヘッダを含むデータ全体の長さ
ID データの再構築に使うID
Flags フラグメントに関する制御情報
Fragment Offset データが分割されたとき、もとのデータの位置を示すオフセット値
TTL パケットの有効期限を示す値
プロトコル 上位置のプロトコルを示す値(TCPは6, UDPは17, ICMPは1)
チェックサム IPv4のヘッダのデータ誤りを検出
送信元アドレス データを送信する側のIPv4アドレス
宛先アドレス データの送信先のIPv4アドレス

f:id:masayuki_kato:20170428011248p:plain

バージョン(Version)

  • IPヘッダのバージョン番号を表す
  • RFC791で設定されているのはIPバージョン4なので、このフィールドの値は「4」になる

IHL(Internet Header Length)

  • 32ビットを1単位として、IPヘッダの長さを表す
  • オプション(後述のTPS)がない通常のIPパケットの場合は「5」

TPS(Type of Service)

  • 「TOSフィールド」と呼ばれる
  • そのIPパケットがどのような品質で扱われるべきかを区別するために用いられる
    • 但し、このような用途で使用されることはほとんど無かった
  • IETFで標準化が進められてきたDiffServe(Differentiated Service)など、QoS(Quality of Service)を実現するために使用されることもある

パケット長(Total Length)

  • IPヘッダを含むパケット全体の長さをオクテットで表す
  • このフィールドは16ビットのため、IPパケットの最大サイズは65535オクテットになる
    • 但し、1フレームで転送可能な最大オクテット数は1500程度のため、実質1500オクテット以下になる

識別子 等(Identification、Flags、Fragment Offset)

  • パケットを分割する時に使われる
  • 分割時に、分割されたパケットであることや、順番等が記録される
  • 受信側でIPパケットを再構成するときに使用される

生存時間(TTL : Time To Live)

  • IPパケットがルータなどの中継機器を通信する際に1ずつ減らされる値で、「0」になるとそのIPパケットは廃棄される
  • ループしたパケットをいつまでもネットワーク上に残しておくと、無駄なトラフィックになるため、その防止として使用される

プロトコル

  • IPヘッダの次のヘッダ(上位階層ヘッダ)のプロトコルが何であるかを示す
  • 「6」はTCP、「17」はUDP

ヘッダチェックサム(Header Checksum)

  • IPパケットの伝送エラーがないかをチェックするためのフィールド

オプション(Options)

  • 一般的なIP通信でオプションが使用されることは少ない
  • オプションには下記のようなものがある
    • セキュリティラベル
    • ソースルート
    • ルートレコード
    • タイムスタンプ

Padding・Data

  • Padding(詰め物)
    • 前述のオプションを付けた場合、ヘッダ長が32ビットの整数倍にならないケースがでてくるので、「0」を入れ32ビットの整数倍するためのフィールド
  • Data
    • データが入る
    • IPの上位層のヘッダも全てデータとして処理する