ネスペ勉強メモ3【TCP/IP】

  • ネスペ試験の個人メモです

IP

IPはコネクションレス型のプロトコルであり、パケット単位のエラーチェック機能やMTU(最大1,500バイト)を超えるパケットの分割/再構築機能を持つ。TCPなどとは違いコネクション確立を行わないためパケット順序管理、パケット廃棄に伴う再送要求、ウィンドウを用いたフロー制御、輻輳制御などができない。故にコネクション管理に特化したやり取りに伴う遅延が発生しない点が特徴。

IPヘッダ

引用元: https://atmarkit.itmedia.co.jp/ait/articles/0304/04/news001_2.html

※1行あたり32ビット(4バイト)
※IPヘッダに含まれるのはバージョンからオプション部まで

バージョン
ipv4の場合は0x04が入る
※2進数だと0100

ヘッダ長
単位は4バイト。オプション部がない場合は20バイトなので0x05(4バイト / 20バイト)になる。

ToS(Type Of Service)★
パケットの優先度を示す情報が格納されており、ルーターは優先度の高いパケットから順番に転送する。RFC2474で標準化されたDiffServeでは、上位6ビットのフィールドを使って最大64種類の優先度を設定することができる。

引用元: https://milestone-of-se.nesuke.com/nw-basic/ip/ip-format/

パケット長
自身のパケット全体の長さ

識別子
送信側でIPパケットを送出するたびにID値を割り当てる。

フラグ、フラグメントオフセット★
前述した通りIPデータグラムの転送時にMTUを超過している場合パケット分割を行い、複数のパケットを生成する。これをフラグメンテーションという。

フラグ( [1][2][3] )の内訳を下記に示す。
[1]…未使用(必ず0が入る)
[2]…後続フラグメント(分割パケットでかつ末尾パケットなら0、そうでなければ1)
[3]…フラグメント化禁止(分割可能なら0,そうでなければ1)

フラグメントオフセットは分割したデータセグメントの位置情報を示すものである。分割パケットが届かなかった際に気づいたり、あるいは一部パケットが遅延して届いても受信側で正しい順番がわかるようにするためにある。

生存時間(TTL: Time To Live)★
ルータを経由するごとにこの値が1ずつ減っていく、0になるとパケットは破棄され、ルータからICMPパケット(時間超過を知らせるパケット)が送信元ホストへ送られる。

プロトコル番号★
1バイト。TCP/UDPのポート番号とは別なので注意。代表的なIPヘッダのプロトコル番号は以下の通り

**********************************************************************

ICMP(Internet Control Message Protocol)
プロトコル番号1。IPプロトコルの「エラー通知」や「制御メッセージ」を転送するためのプロトコル。

IGMP(Internet Group Management Protocol)
プロトコル番号2。マルチキャストグループへの参加、離脱をホストが通知したり、マルチキャストグループの参加有無をルータが判定するのに使う。

IP in IP
プロトコル番号4。あるIPパケットを別のIPパケットにカプセル化するIPトンネリングプロトコル

TCP … プロトコル番号6。後述
UDP … プロトコル番号17。後述

RSVP(Resource Reservation Protocol)
プロトコル番号46。インターネット上でデータの流れをスムーズにし、特定の通信に必要な帯域幅を確保するためのプロトコル。

ESP(Encapsulated Security Payload)
プロトコル番号50。IPsecによる暗号化通信で送受信される、ペイロード(通信内容)を暗号化して付加情報を付け足したもの。

AH(認証ヘッダ)
プロトコル番号51。IPsecプロトコルにおける認証技術の一つで、通信相手が信頼できる相手かどうかを確認するために使用されます。

OSPF(Open Shortest Path First)
プロトコル番号89。日本語に訳すと「最も短い経路を最初に開く」となる。TCP/IPネットワークにおいて、ルータやレイヤー3スイッチングハブがパケットの転送先を決める際に用いるルーティングプロトコルの1つで、「リンクステート型」と呼ばれる方式を使って最適なルートを割り出します。

**********************************************************************

ヘッダチェックサム
IPヘッダのビットレベル整合性チェックを行う、TTLがルータを経由するたびに一つずつ減算されるためチェックサムもその都度変わる

IPアドレス★
特殊なIPアドレスをいかに示す。

  1. ループバックアドレス(127.x.x.x) ※自身を表すIPアドレス

  2. リンクローカルアドレス(169.254.x.x)

  3. マルチキャストアドレス(224.x.x.x ~ 239.x.x.x)

  4. 制限ブロードキャストアドレス(255.255.255.255)

  5. プライベートアドレス(10.x.x.x, 172.x.x.x, 192.168.x.x)

※リンクローカルアドレス
DHCPサーバが存在しないネットワーク内で使われる、特別なIPアドレスで、個々のコンピュータが自分自身にIPアドレスを割り振ることから、「自己割り当てIPアドレス(AutoIP)」とも言われる。

IPパケット

パケットは到達範囲より「ユニキャストパケット」「マルチキャストパケット」「ブロードキャストパケット」との3つに分類できる。

またブロードキャストが到達する範囲のことをブロードキャストドメインという。ブロードキャストパケットには「ディレクテッドブロードキャスト」と「制限ブロードキャスト」の2つがある。両者の違いは「制限ブロードキャスト」は自分と同じサブネットの全ホストを対象にするのに対して、「ディレクテッドブロードキャスト」(直接)は異なるサブネットを指定することができる。

ディレクテッドブロードキャストを許してしまうと指定されたサブネットワーク内の全ホストDos攻撃(smurf攻撃)が可能となるため、ルータによってはデフォルトで禁止しているものもある。

※smurf攻撃
DoS攻撃の一種。 コンピュータ間の接続を確認するために用いる「pingコマンド」の送信元を偽装し、標的に大量のパケットを送り付けることで、サーバやシステムなどを機能停止させるサイバー攻撃のこと。

TCP/UDP

※UDPはヘッダ情報がTCPと比べて少ないのでデータ部をより多く確保することができるので一度の通信で多くのデータの受け渡しができる。

TCPヘッダ

引用元: https://www.infraexpert.com/study/tcpip8.html

ポート番号★
HTTPなどのポート番号が標準で定められているようなもののことをウェルノウンポート番号という(よく知られているポート番号)。

引用元: https://pgapp.net/tcp-ip04/

シーケンス番号、確認応答番号★
シーケンス番号 … データの順番を管理する番号
確認応答番号 … 直前のシーケンス番号を保管、正常に通信が行われているかを確認するのに使う

  1. 送信側はシーケンス番号を発行してリクエストを送る

  2. 受信側はリクエストを受け取った後、確認応答番号にシーケンス番号を保管する

  3. 受信側は送信元にシーケンス番号にデータのバイト数を加算したものをレスポンスとして送る

  4. 送信側は受け取ったシーケンス番号を次に送るパケットの確認王と番号に入れて…. これを繰り返す

データオフセット
TCPセグメントのデータ開始位置、事実上ヘッダ長と同じ意味になる。
(ヘッダ長:はヘッダの長さであり、その次がデータ開始のため)。ヘッダ長と同じく単位は4バイトなのでオプション抜きの場合は20バイトのため0x05となる。

予約
「0」固定らしい

コントロールフラグ
ビット単位でひとつずつ管理されている。本書だと9ビットだが、6ビットでになっているものある。9ビットの場合の最初の3ビットは NS, CWR, ECEの3つであり、これは明示的輻輳制御(ECN)を実現する目的で追加されたらしい。その他の説明は下記の通り。

引用元: https://shikaku949.ohuda.com/ccna/tcp_1/

※URG(Urgent: 緊急)、PSH(Push、上位へデータを押し上げるイメージ?)

ウィンドウサイズ
受信確認を待たずに送信できるデータサイズの最大値のこと。毎回コネクション確立すると遅いので可能な限り一気にデータを受け取るために行う。基本的に初期値はTCPのMSS(Max Segment Size: 最大セグメント長)を整数倍した値が設定される。具体的な流れは下記の通り

引用元: https://www.infraexpert.com/study/tcpip11.html

このように最初は1-2-3の範囲で連続送信ができたが、1のACKを受信してしまえば2-3-4が範囲に移り変わる。このよう連続転送可能範囲が移動することをスライディングウィドウ方式といい、効率の高いデータ通信を実現している。

なお受信側ホストのウィンドウサイズが「0」になることがあり、この場合は送信側ホストはこれ以上データを送れない。このことをゼロウインドウといい、ウインドウサイズが0以上になったら送信元ホストに通知を行う。その際はデータなしの確認応答パケットを用いる。

しかしながら確認応答パケットが途中で破棄されたりすると送信元ホストは永久に動けないため、送信元ホストは定期的にウィンドウプローブという1バイト分のデータを格納したパケットを投げてウインドウサイズを確認するといった動きをとる。(プローブ: 探査、精査の意味)

UDPヘッダ

引用元: https://atmarkit.itmedia.co.jp/ait/articles/0310/09/news001_3.html

ポート番号★
TCPと同じため割愛

パケット長
ヘッダ+データの長さ。単位はバイト

チェックサム
ビットレベルの整合性チェック

TCPコネクション

スリーウェイハンドシェイク部分の図が以下の通り

引用元: https://xtech.nikkei.com/it/pc/article/NPC/20071030/285903/

シーケンス番号と確認応答番号に注目するとスリーウェイハンドシェイクでは初期値に+1ずつしてやりとりを行っている。データ転送部分になると前述した通りシーケンス番号+データバイト数ずつ加算されていくのでシーケンス番号はガンガンが増えていく。(切断時も+1ずつで対応)

通信フェーズでエラーが発生する場合、再送制御では大きく分けて「再送タイムアウトによる方法」と「高速再転送による方法」がある

再送タイムアウト
送信したパケットに対してACKパケットが返ってこなかった場合、送信側は一定期間待ってから再送を行う。この再送するまでの時間のことをRTO(Retransmission Time Out)という。これはRTT(往復時間)から算出される。

高速再転送
端末Aから端末Bへデータの連続転送を行っていると考える。この時端末Aの連続データ転送のうち一部セグメントが欠落した場合、端末Bはシーケンス番号から欠けていることを認知できる。この時に端末Aに対してデータを再送信するように要求するために3回以上連続してACKを再送する。端末Aが同じACKを3回受け取ると、端末Aは欠落したセグメントを端末Bに再送するといった仕組みである。

コネクション切断フェーズ

  1. ホストAからFIN/ACKパケットを送信

  2. ホストBはACKパケットを送信(スライディングウィドウ方式の影響でまだデータ転送は続いている)

  3. ホストBはFIN/ACKパケットを送信(データ通信の完全終了時点)

  4. ホストAはACKパケットを送信

輻輳制御

データ通信中は前述した通りウィンドウサイズを動的に変化させあってデータのやりとりを行うが、実際に送信されるバイト数は「ウィンドウサイズ」の値と「輻輳ウィンドウ」と呼ばれる値を比較して小さい方が採用される構造になっている。要はウィンドウサイズは理想の最大値を表しているが、輻輳ウィンドウは現実的な最大値を表している。

ウインドウサイズの通りに通信し続けるとネットワークの混雑状況が悪化して悪循環になるためこのような方式になっている。輻輳ウィンドウの値を調整することを輻輳制御という。輻輳制御のアルゴリズムの2つを以下で説明する。

引用元: https://eng-blog.iij.ad.jp/archives/11144

スロースタートアルゴリズム
通信フェーズ開始時、輻輳ウィンドウを1*MSSに設定する。その後確認応答パケットを1個目を受信すると輻輳ウィンドウを2*MSSに変更。その後確認応答パケットを2個目を受信すると4*MSSに変更。これをおこなうことで8,16,32と指数的に輻輳ウィンドウを増加させる。ただしウィンドウサイズを超えた値にはならない。無論これを行うとウィンドウサイズで通信を行うことになるため輻輳が発生する。

輻輳回避アルゴリズム
輻輳が発生(ACKを3回以上受信)すると輻輳ウィンドウのサイズを半分にする。その後は1MSSずつ輻輳ウィンドウを増やしていく。この仕組みにより輻輳が再度起きづらく、可能な限り高速なデータ転送を実現する。

また再送タイムアウトが発生した場合はスロウスタートからやり直しを行いかつ、輻輳ウィンドウの半分の時点から輻輳回避アルゴリズムを実行する。(下記の図を参照)

引用元: http://www.net.c.dendai.ac.jp/~yutaro/

※輻輳発生時は半分から単調増加(傾き1)で再スタート
※再送タイムアウト時は最初から指数増加で再スタートするが、半分のところからは単調増加(傾き1)で再スタート

TCP接続のリセット

TCPセグメントのヘッダに解決不能のパラメータがある存在している場合などはTCP接続がリセットされる、下記がその流れである

  1. ホストAからSYNパケット送信

  2. (ホストBが解決できなかったので)ホストBはRST/ACKパケットを送信

TCP通信のスループット

[TCP通信の実効転送速度] = [ウインドウサイズ] / [RTT(往復時間)] で求まる。
※ 速さ: 実効転送速度, サイズ: 距離, RTT: 時間 で考えるとわかりやすい。

ARP

IPアドレスからMACアドレスを得るプロトコル。本プロトコルを使用してMACアドレスを入手後、IPアドレスとMACアドレスの対応をARPテーブルに行って期間キャッシュする。このことをARPキャッシュという。

GrauitousARP

重複IPアドレスの検知、フェールオーバー時のARPキャッシュ更新に使われるARPである。具体的にはARPヘッダの目標プロトコルアドレス(ARPで知りたいIPアドレス)に自身のIPアドレスを指定する。応答が返ってくるならば自身と同じIPアドレスがあると判断できる。ちなみにGrauitousは「余計な」みたいな意味らしい。

ちなみに重複IPアドレスの検知の際はARPヘッダの送信元プロトコルアドレスは「0.0.0.0」格納するように規定されている。こうすることでARPキャッシュが更新されない。逆にフェールオーバー時はARPキャッシュを更新する必要があるため自身のIPアドレスを格納する。

RARP

ReverseARPの略のため、MACアドレスからIPアドレスを得るプロトコル。試験では「L2スイッチのMACアドレステーブルアドレステーブル更新時」にRARPを使う点が問われるらしい。

MACアドレステーブルは「MACアドレス」と「ポート情報」の対応関係を記したテーブルのことである。

主系サーバー、待機系サーバーが稼働しており、主系サーバーがフェールオーバーした時を考える。待機系サーバーに移行されると当然通信の流れが変更となりL2スイッチの違うポートから通信を行う必要がある。この時MACアドレステーブルは古いため主系サーバーと通信を行おうとしてしまう。これを防ぐために切り替わった瞬間にRARPをブロードキャストで送信する。そうすることでMACアドレステーブルが更新される。

ProxyARP

ルータやファイヤウォールが持っている機能のこと。(プロトコルの意味ではない)あらかじめ登録されたIPアドレスに対するARP要求を受けると、あたかも自分がそのIPアドレスを持っているかのように振る舞ってMACアドレスを回答する。

DMZ環境にARP対象のサーバがある場合などはファイヤーウォールを中継してARP通信を行う。

ICMP

IPパケットの転送でエラー発生した場合に、送信元に通知する機能や、持続性を確認するエコー要求/応答メッセージを転送する機能をもつ。

エコー要求/応答メッセージ
pingのこと

宛先到達不能
経路途中で転送エラーが発生した場合、対象のパケットを破棄して送信元ホストにむけて宛先到達不能メッセージを送信する。

リダイレクト
同一サブネット上にルータがある場合、最適でないルータを使ってパケット転送をしている場合、そのルータは送信元にリダイレクトメッセージを送信して、自身より適切なルータがいることを通知する。

時間経過
IPヘッダ内にはTTL領域があり、値を読み取るたびに1ずつ減算される。これが0になったときルータはIPパケットを破棄して送信元ホストに時間超過メッセージを送信する。

ICMPの利用例

pingコマンド

tracerouteコマンド
対象のIPホストまでの経路上のIPノードを調査する。具体的な方法はIPヘッダのTTLの性質を用いており、TTLを1から順番に増やしたパケットを流していく。前述した通りTTLは0になるとIPパケットは破棄され時間超過メッセージが届くいくため、それを辿ることでIPノードの調査が可能となる。

経路MTUの取得
経路MTU
とはパケット送信時にフラグメント化(データ分割)しない最大のMTUのことである。パケット上のMTU最大は決まっているが、実際は経路によって送信できるMTUの最大値が存在する。ICMPを利用することで真のMTU最大値を取得できるため、以後の通信はこの値を元にフラグメント化してデータ転送を行う。

DHCP

DHCPが割り当てる設定情報の有効期限をリース期間という。
DHCPクライアントのIPアドレスは0.0.0.0。
DHCPサーバと端末のやりとりは通常、制限ブロードキャストアドレス(255.255.255.255)を用いる。

IPアドレス割当は以下の4つの手順で行われる

引用元: https://gihyo.jp/admin/serial/01/whats_inet/0007

※サーバーを見つけてから、IPアドレス要求のリクエストを送る。
※サーバから設定情報を受け取った後クライアントは重複IPチェックを行うためにGratuitousARPを送信する。
※リース期間更新の場合はDiscoverとOfferは省略される。

DHCPリレーエージェント機能

ルーターの機能。クライアントとDHCPサーバの間にルータを介している場合、両者は異なるブロードキャストドメインとなってしまい、ブロードキャストパケットが到達できないため、ルータ側でブロードキャストパケットを受信するとDHCPサーバーに伝えてあげる機能。

DHCPスヌーピング

スイッチの機能。正規のDHCPサーバーからIPアドレスを割り当てられた端末だけを許可する機能。スヌーピングは覗き見する、監視するの意味。

仕組みとしてはDHCPスヌーピングを動作させるとスイッチのポートはUntrustedポートとTrustedポートの2種類となり、事前に指定しておいたポート(DHCPサーバー、外部サーバーなど)以外は全てUntrustedポートになる。クライアントのポートは全てUntrustedのため事前にTrustedポートに指定されたDHCPサーバからIPを割り振られたことが確認できた場合、Untrustedポートでも通信が可能となる。

※Untrustedポート…許可されたクライアントのみ通信可能
※Trustedポート… 無条件に通信許可

NAT

ルータがもつ機能、Network Address (Protocol) Translationの略
NAT…IPアドレスのみの変換
NAPT…IPアドレスとポート番号の変換

NATを用いることでプライベートIPとグローバルIPの変換が行われるのでプライベートIPを持った端末でもグローバルIPを用いて通信を行うことができる、しかしグローバルIPが一つしかないのにプライベートIPが複数ある場合NATでは同時に通信を行うことができない。

その問題点を解消したのがNAPTである。NAPTはTCP/UDPのポート番号にユニークな番号に書き換えることで同じグローバルIPでも別々の通信を実現することができる。

NAPTの問題点

NAPTは下記のケースで通信に支障をもたらす。

  1. IPの上位層がポート番号を持たないプロトコルである時

  2. アプリケーション層に、送信元ホストのIPのアドレスやポート番号の情報を格納している時(IP電話など)

上記のケースについて、それぞれNATを越える対応が必要となる。

IPの上位層がポート番号を持たないプロトコルである時
TCP/UDP通信であればポート番号を書き換えれば問題ないが、それ以外だとポート番号に該当するフィールドを書き換えると通信できなくなるため以下の対策が必要。

UDPヘッダの挿入

  1. UDPヘッダの挿入を行う … IPの上位層にUDPヘッダを挿入して、このUDPポート番号をNAT装置に書き換えさせることでNAT通信ができる。注意点として受け取ったがわでUDPを除去する必要がある。

  2. パススルー … IPヘッダのプロトコルフィールドを見た時に、上位層ポート番号(TCP/UDPなど)を持たないことがわかったら、送信元IPのアドレスだけを書き換え、ポート番号を書き換えずに転送すること。この方法をVPNパススルーという。実質NAT通信のため、2台以上の端末でパススルーを行うことはできない。

上記のケースに該当する例としてはIPsecのプロトコルがある。この時手順1(UDPヘッダの挿入)の方法で解決することをNATトラバーサル(NAT越え)という。

アプリケーション層に、送信元ホストのIPのアドレスやポート番号の情報を格納している時
実例としてはSIPを用いたIP電話の通信などがあげられる。VoIPに関しては以前も記載したので省略するが、解決策としてはVoIPゲートウェイを用意してそこにグローバルIPをもたせ、セッション生成時に通知し合うIPアドレスをVoIPゲートウェイのグローバルIPアドレスに変換する。

ルーティング

ルーティングテーブルは端末やルーターなどが持っているテーブルのことである。端末のルーティングを確認する場合は以下のコマンドで確認できる

引用元: https://atmarkit.itmedia.co.jp/ait/articles/0301/11/news003.html

経路選択

経路選択は以下の順序に従う

  1. ロンゲストマッチアルゴリズムに基づく選択

  2. 優先度に基づく選択

  3. メトリックに基づく選択

ロンゲストマッチアルゴリズム

ここでいうロンゲストとはサブネットマスクの長さのことである。サブネットマスクが長い=限定的なネットワークと言える。対象のルーティングが複数見つかった場合はサブネットマスクが長い方を採用する。

優先度、メトリック

優先度はプロトコルの信頼性に基づいて決められる。数値が低いほうが優先度が高いとみなされる。

メトリックはプロトコルごとに定められた経路選択のための距離やコストなどの値である。(メトリックは計量などの意味、メートルの語源と同じ)

ループバックインターフェース

ルータやサーバが持つ仮想的なインターフェイス。自身を指すIPアドレスを割り当てるための手段。

nullインターフェイス

ルータやサーバが持つ仮想的なインターフェイス。ここを転送先とするパケットは破棄される仕組みとなる。用途としてはルーティングループの防止などに使われる

ポリシーベースルーティング(PBR)

通常の経路制御とは異なる方法で経路を選択する経路制御。PBRを動作させるには当たり前ではあるが通常の経路制御よりも優先度を高くする必要があることに注意。

VRF(Virtual Routing and Forwarding)

1台の物理ルーターの中に複数の仮想的なルータを稼働させる機能。それぞれに固有のルーティングテーブルを持つ。

スタティックルーティングとダイナミックルーティングの比較

導入容易性
スタティックの方が導入は簡単である、ダイナミックは比較的に学習コストが高いといえる

トラフィック
スタティックは経路情報交換のためのトラフィックが発生しない、ダイナミックは経路情報の交換を行うのでその分のトラフィックは発生する

信頼性
ダイナミックは障害発生時に迂回ルートが存在する場合は自動的にルーティングテーブルを切り替えるので信頼性が高い、スタティックは手動で行う必要があるため障害発生時は時間と労力がかかる

負荷分散
スタティッックはトラフィックの負荷分散を行うことができない。ダイナミックであればOSPFなどの一部のプロトコルはイコールコストマルチパス機能を用いて負荷分散を行うことができる。

スタティックとダイナミックを混在させて経路を設定することで冗長化を図る運用のことをフローティングスタティックという。具体的にはスタティックの優先度を下げておき基本的にはダイナミックで運用、障害発生時にダイナミックの経路が死んだらスタティックに切り替えるといった流れ。

同様にダイナミックルーティングプロトコルを混在させることでも経路の冗長化を図ることができる。例えばOSPFとBGP4の2つを同時に混在させるなど。片方の優先度を上げることで障害発生時にもう片方で通信を行うなども可能。

再配布

ダイナミックルーティングプロトコルを用いて経路情報を他方に通知することを再配布という。

EGP/IGP

インターネットではIPアドレスの全空間をICANNが管理しており、AS(Autonomous System: 自律システム)と呼ばれる組織にIPアドレスをまとめて割り振っている。

引用元: https://net-skills.net/intro-menu4/as/

※ASという大きいグループがいつもあってインターネットが形成されるイメージ

この時にAS間で使用されるプロトコルをEGP(Exterior Gateway Protoclol)といい、AS内で使用されるプロトコルをIGP(Interior Gateway Protocol)という。

EGPの例としてはBGP
IGPの例としてはOSPFRIP(今はほとんど使われない)
が用いられる

RIP(Routing Information Protocol)

IGPプロトコルのひとつ。経路制御方式が距離ベクトル方式である。経路制御時にロンゲストマッチアルゴリズムで同等(同一サブネット)の経路が複数存在した場合、経由するルータのホップ数が最小のものを選択する。

OSPF(Open Shortest Path Fast)

※ルーティングのひとつではあるが、あまりにも膨大なため見出しを大きくした。
IGPプロトコルのひとつ。経路制御方式はリンクステート方式である。

経路制御の特徴と仕組み

  • 最初のコストで到達できる経路を選択する

  • エリアを単位とする経路制御を行う

  • ルータが広告するのはLSA(Link State Advertisement)と呼ばれるリンクステート情報。

  • Helloパケットを交換して死活監視を行う

  • 可変長サブネットマスクに対応

経路選択

ダイクストラアルゴリズムによる最初経路選択
OSPFはリンクごとにコスト設定をすることができる。RIP同様にロンゲストマッチアルゴリズムで同等の経路が複数存在する場合は、コストが最小の経路を選択する。経路選択に用いられるアルゴリズムはダイクストラの最短経路アルゴリズムというものが使われる。(詳しくは割愛)

イコールコストマルチパス機能
コスト最小の経路が複数ある場合は、それらの経路間にトラフィックを分散して負荷分散を行う。この機能をイコールコストマルチパス機能という。

エリア

OSPFはOSPFドメインを複数に分けることができる。(分割しない場合もある)。その際に必ず存在しなければいけないエリアのことをバックボーンエリアという。(エリア番号は0を設定)

エリアが複数ある場合は基本的にバックボーンエリアに隣接したエリアの構築にする必要がある。

一つのエリアには複数のサブネットがあることは構わないが、あるサブネットは必ず一つのエリアの中に存在しなければいけないことに注意。

サブネットワークはOSPFルータの構成に基づきポイントツーポイントネットワークマルチアクセスネットワークに分けることができる。

引用元: https://www.infraexpert.com/study/ospfz8.html

※[ルータ]-------[ルータ]間のネットワークのことをP-Pネットワークという

引用元: https://www.infraexpert.com/study/ospfz8.html

※[ルータ] ------ [スイッチングハブ/サブネットワーク]------[ルータ]のようなネットワークのことをマルチアクセスネットワークという。
※マルチネットワークの中でもスイッチから伸びている先のネットワークに複数のルータがあるネットワークのことをトランジットネットワークといい、1台のルータしかないネットワークのことをスタブネットワークという。(スタブは切り株、残った枝などの意味、行き止まりみたいなイメージ)

代表ルータとバックアップ代表ルータ

マルチアクセスネットワークの場合に、OSPFでリンクステート情報を交換する方法を考える。仮にネットワーク上のルータが相互に連絡をとりあうとルータの数が増えれば増えるほど増加していく。N台のルータがある場合はN*(N-1)/2 となる。(共通鍵の鍵数の計算と同じ)

そういった問題点を解決するためにOSPFルータの中から1台を代表ルータ(DR: Designated Router)を、さらに障害に備えてバックアップ代表ルータ(BDR: BackupDesignated Router)を事前に選ぶ。また残りのルーターのことはDROTHER(DR OTHER)という。

DRとBDRは全てのルータとやりとりを行い、DOOTHERルータはDRとBDRのみとやりとりをする。これを行うことでルータ間の相互やり取りの数を減らすことができる。

引用元: https://ascii.jp/elem/000/000/604/604495/

※DR、BDRの選出についてはプライオリティ値が大きい順に行われるため、自ルータをDR,BDRに選出したくない場合はプライオリティ値を0に設定することで選出を回避できる。

Adjacency(隣接関係)
各DOOTHERルータがDR,BDR間でAdjancency(隣接関係)を確立する。ここで各ルータはリンクステート情報を交換する。

リンクステート情報の更新
障害発生などによりネットワークの構成が変化したなら、リンクステートの変換したルータが代表ルータに向けてマルチキャストで広告する。なおネットワークの構成が変化しなくても30分間隔でリンクステート情報は交換されるらしい。

パッシブインターフェイス

複数のOSPFルータから構成されたネットワークはOSPFルータは「他のOSPFルータに囲まれているか/否か」の2種類に大別される。

他のOSPFルータに囲まれている場合全てのインターフェース(端末など)はOSPFルータとHelloパケットを投げて死活監視を行いながら、リンクステート情報の交換をし合う。

他のOSPFルータに囲まれていないルータはいわばエリアの縁に属しており、こういったネットワークをスタブネットワークという。このOSPFルータはスタブネットワーク上ではHelloパケットの送受信(ネイバーの検出)をする必要がないが、他のOSPFルータに経路情報を広告する必要があるため、スタブネットワーク上のインターフェースはパッシブインターフェースに設定する。(ルータからのパケットを受け取るだけの状態)

パッシブインターフェイスに設定するとインターフェイス側からHelloパケットを送信しないため、リンクステート情報の広告もしなくなる。

エリア境界ルータ(ABR: Area Border Router)

エリアの境界に位置するルータのことをABRという。当然エリアは基本的にバックボーンエリアに隣接する必要があることから片側のエリアはバックボーンエリアとなる。

エリア内とエリア間(ABR)のリンクステート情報は内容が異なる。エリア内ではルータが接続しているサブネットのインタフェース毎のコストが設定されており、エリア内のネットワーク構成に関する情報がエリア内で共有される。エリア間(ABR)では「エリアに存在するサブネットの経路」一覧を伝えており簡素な内容となっている。エリア間ではおおまかな概要だけを伝えているイメージ。

ABRがエリア情報をバックボーンエリアに広告すると、バックボーンエリアはサブネットワークの経路を集約した情報を他のエリアに広告する。これを経路集約という。

外部ネットワークの経路情報の交換と再配布

OSPFはAS内部のプロトコルであり、外部は前述したようにBGPのようなプロトコルを用いる。OSPFはOSPF以外の方法で経路制御された外部情報を取り込むことができる、これを再配布という。(再配布=ルーティングテーブルの更新 ぐらいで考えて良さそう)

また、自ASと外部ネットワークの境界にあるルータをAS境界ルーター(AS Border Router)という。

再配布時のルーティングループ発生原因とその対策

自ASと外部の間に2つのASBR(ルータAとルータB)があることを考える。外部から経路情報を取得したものがルータAに届き自AS内に経路情報を再配布する。それを得たルータBが外部に対しても再配布を行う、それを外部ルータを経て検知したルータAが更新して….というふうにループが発生する場合がある。(本書の図を見たほうが早そう)

対策としては下記があげられる

  1. 再配布したものを再び自分に再配布させない(外部に再配布するルータを選定、ルートフィルタリングを付加するなど)

  2. 再配布したものを再び自分に再配布させる際に属性値を慎重に付与する(設定が難しいのでやらないほうがよさそう)

  3. そもそも再配布しなくてすむように経路制御をしっかり行う

経路集約

同一エリアのリンクステート情報を複数のABRで広告する場合は、双方とも同じ経路集約にする必要がある。なぜなら一方で経路集約を行い他方で何もしていない状態を考えると、何もしていない経路の方が当然サブネットが長くなるため、ロンゲストマッチアルゴリズムの観点からそちらしか選択されなくなるため、複数のABRを置く意味がなくなる。

デフォルトルートの広告

ABR,ASBR共にデフォルトルート(0.0.0.0/0)を広告することができる。ABRの配下にあるエリアがスタブエリアの場合自分をデフォルトゲートウェイとするデフォルトルートを広告することができる。

スタブエリアとは自エリアと他エリアの境界がABRだけでありかつASBRを持たないエリアのこと。つまりはスタブエリアの端末が外部と通信するにはスタブエリア→[ABR]→バックボーンエリア→[ASBR]→外部 の流れで通信することとなる。

そのためスタブエリアを管理するABRはデフォルトルートを経路広告するのは合理的な方法である。

経路集約に起因するルーティングループの発生と対策

デフォルトルート(0.0.0.0/0)を設定していおくと、ある特定のアドレスのみ(またはそのアドレス帯)だけを集約対象外ルートにしたい場合でも全て対象に含まれてしまう。その結果としてルータ間でループが発生することがある(具体例は本書参照)。これを回避するにはそもそも集約対象外ルートの場合は対象のインターフェースをNull0(パケット破棄)に設定すれば良い。

LSA(Link State Advertisement)

ルータ間で交換されるリンクステートの情報。LSAには複数のTypeが存在する。

引用元: https://milestone-of-se.nesuke.com/nw-advanced/ospf/lsa-summary/

死活監視

Helloパケットを送り合って死活監視を行う。

BGP

EGPプロトコルのひとつ。経路制御方式は経路ベクトル(パスベクトル)方式である。

経路選択

パスアトリビュートを用いて、複数ある経路候補の中からベストパス(最適経路)を選択する。

パスアトリビュートとは他ルーティングのメトリックに相当するものである。RIPは距離、OSPFはコストだが、BGPの場合は様々な種類の属性が定義されている。中でもBGPの主要なパスアトリビュートとして用いられるのはAS_PATHである。

AS_PATHのベストパス決定基準はAS_PATH長が短いものを選択する仕様になっている。

引用元: https://y-network.jp/2020/08/27/nsx-t-031/

AS_PATHはASを通過すると追加されていく(メールのFROMヘッダと同じ原理)。上の図だとAS10からAS40に行くまでの間にAS30を経由しているため、AS_PATHは「AS30 AS40」となっている。

BGPピア

BGP接続を行う2台のルータはポート179を用いて経路情報を交換し合う。このコネクションをピアリングという。ピアリングを設定するBGPルータのことをBGPピアという。

BGPピアには2種類あり外部AS間と通信するBGPルータのことをeBGPピアという、逆に自AS内でお互いにピアリングを設定する場合はiBGPピアという。

引用元: https://milestone-of-se.nesuke.com/nw-advanced/bgp/nexthop-self-ibgp-ebgp/

iBGPピアリングを行う目的は外部ASとマルチホーム接続した場合、経路情報が異なる可能性があるため自AS内で経路情報を共有する必要があるためである。こういった理由からもiBGPピアは全ペア(フルメッシュ化)で構成される必要がある。

※フルメッシュ化…参加する各通信主体(ノード)が自分以外のすべてのノードと接続する形態。

iBGPピアリングは安定稼働を目的としてインターフェス障害、リンク障害耐性を持つように設計する必要がある。そのためループバックインターフェイスのIPアドレスを用いることでルータ自身がダウンしない限りiBGPピアは維持される。

パスアトリビュート

BGPはNLRI(Network Layer Reachability Infromation)と呼ばれる、宛先ネットワークのプリフィックス情報を経路広告している。

パスアトリビュートのベストパス選択は、以下の評価順に従われる。

  1. LOCAL_PREFの値が最も大きい経路情報

  2. AS_PATHの長さが最も短い経路情報

  3. ORIGINの値に基づいて選択(IGP, EGP, Incompleteの順)

  4. MEDの値がもっとも小さい経路情報

  5. eBGPで受信した経路情報、iBGPで受信した経路情報の順

  6. NEXT_HOPが最も近い経路情報

  7. BGPピアのルータIDの値が最も小さい経路情報

LOCAL _PREF
最も優先度が高い属性である。能動的に設定する値

AS_PATH
前述した通り、経由したルータ情報を追加で書き込んでいく。一番ルータ経由数が少ないものが選ばれる。
自ASから外部のeBGPピアに対して、自AS内のサブネットワークを経路広告するとき、AS_PATHパスアトリビュートを付与する。通常AS_PATHには自ASで1個しか記載しないが、あえて複数のAS_PATHを記載することができる。これをASパスプリペンドという。(プリペンド: 先頭に追加するの意味)

これを行うことで優先度が下がるため、一部環境で意図的に優先度を下げたい場合に用いることがある。

NEXT_HOP
宛先ネットワークアドレスへのネクストホップIPアドレスを格納した属性。
eBGPピアに経路広告する場合はNEXT_HOPを自身のIPアドレスにするが、iBGPピアに経路広告する場合はNEXT_HOPを書き換えない。(基本的にネクストホップを使って通信する場合、自AS内を介する必要がないため)

ただし、iBGPピアであっても自身のIPアドレスを書き換えて送信する設定も一応できる。この設定をネクストホップセルフという。

MED(MULTI_EXIT_DISC)
eBGPピアに対して経路広告をする。MEDはメトリックとも呼ばれる。

死活監視

BGPピアはKEEPALIVEパケットを定期的に送信して両者間の死活監視を行う。(OSPFはHelloパケット)

KEEPALIVEが一定時間途絶えた時、経路障害が発生したと判断され、BGP接続を切断する。それに伴い経路情報がクリアされて障害発生箇所を迂回した経路が動的に選択される。

この記事が気に入ったらサポートをしてみませんか?