はじめに
ネットワーク層に関する技術などについてまとめていきます.
主な話題はIPアドレス・ルーティングとなります.
ネットワーク層について
ネットワーク層は,
異なるネットワークにいるノードとの接続を確保するためにある階層です.
データリンク層は,同じネットワークにいるノードとの隣接性を確保するものだったので,異なるネットワークにいるノードと接続することができません.
そこで,異なるネットワークに存在するノードと接続できるようにネットワーク層では,ヘッダを付加する処理を行っています.
このヘッダを付加する処理のことをパケット化といい,バケット化によってできたデータをパケットと呼びます.
送信するときは,トランスポート層から受け取ったセグメント/データグラムをパケット化して,データリンク層に渡します.
受信するときは,データリンク層からフレームを受け取り,パケット化とは逆の処理をして,トランスポート層に渡します.
IPについて
IPはインターネット上のホストへデータを送信するための通信プロトコルというのが定義ですが,情報を送ったり受け取ったりするためのルールのようなものです.
ネットワーク層で押さえておくべきプロトコルであり,IPによってパケット化されたパケットのことをIPパケットと呼びます.
IPパケットは,制御情報を表すIPヘッダ,データそのものを表すIPペイロードで構成されています.
IPヘッダは以下のようにたくさんの情報を付加していますが,
今回はいくつかのフィールドをピックアップしていきます.
IPヘッダ
バージョン
バージョンは,IPのバージョンを表しています.
といっても,そのバージョンは2種類で,IPv4だったら'0100', IPv6だったら'0110'となります.
今回はIPv4の場合についてのみ扱います.
フラグメンテーション
フラグメンテーションとは,MTU(Maximum Transmission Unit)に収まらないサイズのIPペイロードを,MTUに収まるように分割することです.
識別子,フラグ,フラグメントオフセットは,パケットのフラグメンテーションに関連しています.
識別子
識別子は,パケットを作成するときランダムに割り当てるパケットのIDです.
フラグ
フラグは3ビットで構成されています.
上位1ビットは使用しません.
上位2ビットはフラグメントしてよいかどうかを表しており,DFビットと呼びます.
上位3ビットはフラグメントされたパケットが後ろに続くかどうかを表しており,MFビットと呼びます.
フラグメントオフセット
フラグメントオフセットは,フラグメントしたときにそのパケットがもとのパケットの先頭からどこに位置しているかを示しています.
値は8バイト単位で表され,例えば400なら3200バイト目以降のデータであることがわかる.
TTL
TTLはパケットの寿命を表しています.
パケットの寿命は経由するルータの数で表し,経由するルータの数をホップ数と呼びます.
TTLの数は,ルータを経由するたびに減っていき,0になると破棄されます.
TTLがあることで,IPパケットが同じところを回ってしまう現象(ルーティングループ)を防ぐことができます.
プロトコル番号
プロトコル番号は,IPペイロードがどんなプロトコルで構成されているかを表します.
例えばICMPだったら'1', UDPであれば'17'などです.
送信元/あて先IPアドレス
IPアドレスは32ビットで構成されていて,'192.168.100.1'のような10進数で表します.
送信元IPアドレスがネットワーク上の自分の住所を表します.
あて先IPアドレスは,相手の住所を表します.
IPアドレス
IPアドレスについてみていきます.
IPアドレスは以下の2つで構成されています.
- ネットワーク部
- ネットワークそのものを表します.どのネットワークかを示す情報です.
- ホスト部
- そのネットワークに接続しているノードそのものを表します.どのコンピュータかを示す情報です.
サブネットマスク
サブネットマスクは,ネットワーク部とホスト部を区切る目印です.
サブネットマスクの'1'の部分がネットワークアドレス,'0'の部分がホストアドレスです.
IPアドレスに'172.16.1.1'にサブネットマスク'255.255.0.0'が設定されていたら
'172.16'というネットワークの'1.1'というホストだということです.
IPアドレスとサブネットマスク
クラスフルアドレス
IPアドレスは使用用途に応じて,クラスAからクラスEまでに分類できます.
各クラスの詳細は以下のようになります.
アドレスクラスの詳細
アドレスクラスに基づいてIPアドレスを割り当てる方式を
クラスフルアドレスと呼びます.
クラスレスアドレス(サブネッティング)
クラスフルアドレスでは8ビットごとにIPアドレスを割り当てていました.
8ビットにとらわれずIPアドレスを割り当てる方式をクラスレスアドレスと呼びます.
ネットワーク部,ホスト部に加え,サブネット部を考えます.
サブネット部を加えることによって,新しいネットワーク部を作り出します.
たとえば'192.168.1.0'というクラスCをサブネット化することを考えます.
このネットワークを16個のネットワークにサブネット化したいならば,4bitをサブネット部として使用することで,
'192.169.1.0/28'から'192.168.1.240/28'までの新しいサブネット化されたネットワークを作ることができます.
グローバルIPアドレス
グローバルIPアドレスは,ICANNとその下部組織で世界的に管理された
自由に割り当てることができないIPアドレスです。
プライベートIPアドレス
プライベートIPアドレスは,組織内であれば自由に割り当ててよいIPアドレスです.
プライベートIPアドレスは,組織内だけで有効なIPアドレスなので,インターネットに接続するためには,プライベートIPアドレスをグローバルIPアドレスに変換する必要があります.
ネットワークアドレス
ネットワークアドレスは,ホスト部のビットがすべて'0'のIPアドレスで,ネットワークそのものを表します.
また,IPアドレスもサブネットマスクも'0'で構成されたものは,デフォルトルートアドレスとなります.
ブロードキャストアドレス
ブロードキャストアドレスは,ホスト部のビットがすべて'1'のIPアドレスで,同じネットワークに存在するノード全てを表します.
ループバックアドレス
ループバックアドレスは自分自身を表すIPアドレスです.
第1オクテットが'127'のIPアドレスで,'127.0.0.1/8'が一般的です.
ルータ
ルータは社内LANとWANを接続するための機器です.
L3スイッチ
L3スイッチは,LAN同士を接続するための機器です.
ルーティング
IPパケットの転送先を切り替える機能のことをルーティングと呼びます.
ルータやL3スイッチは,あて先アドレスの参照元(あて先ネットワーク)と,そのIPパケットを転送すべき隣接機器のIPアドレス(ネクストホップ)を管理することで,IPパケットの転送先を切り替えます.
あて先ネットワークとネクストホップを管理するテーブルのことをルーティングテーブルと呼びます.
ルーティングの例
ノードAがルータを経由してノードBとIPパケットをやり取りする例を取り上げます.
扱うネットワーク構成
1.デフォルトゲートウェイに送る
ノードAがノードBに対するIPパケットを作り,フレーム化してケーブルに流します.
ノードBは異なるネットワークなので自身のルーティングテーブルを検索します.
'192.168.2.1'はデフォルトルートアドレス'0.0.0.0'にマッチするので,
ネクストホップの'192.168.1.254'に転送
デフォルトルートアドレスのネクストホップをデフォルトゲートウェイと呼ぶ.
2.R1でルーティングテーブルを見て,どこに送信するか考える
R1はあて先IPアドレスを見て,ルーティングテーブルを検索します.
ルーティングテーブルに'192.168.2.0/24'があり,ネクストホップは'192.168.12.2'であることがわかるので,R2のe0/0にパケットを送信します.
3.R2でルーティングテーブルを見て,どこに送信するか考える
R2はあて先IPアドレスを見て,ルーティングテーブルを検索します.
ルーティングテーブルに'192.168.2.0/24'で直接接続であることがわかり,ノードBにパケットを送信します.
4.PC2でルーティングテーブルを見て,どこに送信するか考える
パケットを受け取ったノードBは,自分あてのパケットだと判断し,それに応答するためにノードAに対するパケットを作って,フレーム化してケーブルに流します.
ノードBからみてノードAは異なるネットワークにいるノードなので,デフォルトゲートウェイとして設定されているR2のe1/0にパケットを送信します.
5 戻りも同様にルーティングテーブルを使う
戻りのパケットも同じようにあて先IPアドレスを見て,ルーティングテーブルを検索し,ネクストホップに転送するという動きを繰り返します.
ルーティングテーブルの作り方
ルーティングテーブルの作り方は大きく分けて以下の二つがあります.
- 静的ルーティング
- 動的ルーティング
静的ルーティング
静的ルーティングは,手動でルーティングテーブルを作る方法です.
ひとつひとつあて先ネットワークとネクストホップを設定するので,小さなネットワーク環境のルーティングに適しています.
しかし,大きなネットワーク環境には適していません.
Ciscoルータの場合,「ip route (network) (subnetmask) (next hop)」コマンドで静的ルートを設定可能です.
動的ルーティング
動的ルーティングは,隣接するルータ同士で自分の持っているルート情報を交換して,自動でルーティングテーブルを作る方法です.
ルート情報を交換するプロトコルをルーティングプロトコルといいます.
ルート情報をやりとりして,自動でルーティングテーブルを作る
動的ルーティングの利点は,すべてのルータに設定が必要なわけでもないので,管理の手間がかからないことです.
さらに,あて先までのどこかで障害が発生しても,自動的に迂回ルートを探すので耐障害性も持ち合わせています.
ただし,しっかり設定をしなければ間違いなどがネットワーク全体に伝播してしまうので,しっかりとした設計をする必要があります.
ルーティングプロトコル
ルーティングプロトコルはAS(Autonomous System, 自立システム) によって以下の2種類に分けられます.
- IGP(Interior Gateway Protocol, 内部ゲートウェイプロトコル)
- EDP(Exterior Gateway Protocol, 外部ゲートウェイプロトコル)
IGP
IGPはAS内で使用するルーティングプロトコルです.
IGPを説明するにあたり,ルーティングアルゴリズムとメトリックが重要になります.
ルーティングアルゴリズム
ルーティングアルゴリズムは,どうやってルーティングテーブルを作るか,そのルールを表しており,そのアルゴリズムはディスタンスベクタ型とリンクステート型のどちらかです.
メトリック
メトリックはあて先ネットワークまでの距離を表しています.
具体的なIGP
IGPの代表的なものはRIPv2, OSPF, EIGRPのいずれかです.
以下の表がそれらの特徴となっています.
EGP
EGPは,ASとASをつなぐときに使用するルーティングプロトコルです.
EGPの具体的なルーティングプロトコルはBGPで,BGPを説明するにあたり,AS番号,ルーティングアルゴリズム,ベストパス選択アルゴリズムです.
NAT
パケットのIPアドレスを変換する技術をNATと呼びます.
もう少し具体的にすると,グローバルIPアドレスとプライベートIPアドレスを相互に変換する機能です.
NATを使用すると,IPアドレスの節約や,同じネットワークアドレスを持つシステム間で通信ができるようになります.
NATはNATテーブルとプロキシARPによって支えられています.
NATテーブルは,変換前と変換後のIPアドレス,あるいはポート番号を記録している表です.
プロキシARPは,ARP Requestに対して代理で応答する事です.
これは,NATで使用するIPアドレスはルータのインタフェースが持つIPアドレスとは異なるものなので,ルータはNATで使用するIPアドレスのARP Requestにも代理で応答する必要があります.
代理で応答し,NATで使用するIPアドレスのIPパケットを受け取り,NATテーブルの情報をもとに変換します.
以下がNATの例となります.
- 静的NAT
- NAPT(Network Address Port Translation)
- Twice NAT
静的NAT
静的NATは内部と外部のIPアドレスを1:1に紐づけて変換します.
静的NATは内部から外部にアクセスするとき,送信元IPアドレスを変換し,送信元IPアドレスに応じて,変換するIPアドレスを切り替えます.
外部から内部にアクセスするときは,あて先IPアドレスを変換し,あて先IPアドレスに応じて,変換するIPアドレスを変換します.
あるサーバを,特定のIPアドレスでインターネットに公開したいときなどで用います.
NAPT(Network Address Port Translation)
NAPTは内部と外部のIPアドレスをn:1に紐づけて変換します.
NAPTは内部から外部にアクセスするとき,送信元IPアドレスだけでなく送信元ポート番号まで変換します.
NAPTを使用することでグローバルIPアドレスが節約できます.
サーバでは,時刻同期やウイルス対策ソフトの定義ファイル更新などの,サーバからインターネットに対するアウトバウンド通信に適用するときなどで用います.
Twice NAT
Twice NATは送信元とあて先の両方を一気に変換します.
会社が合併したときや会社のシステムと接続するなど,アドレス空間が重複している構成を接続しなければならないときなどで用います.
最後に
IPアドレスやルーティングなどをまとめましたが,特にネットワークをつなげるときのルーティングの作業はしっかりと頭の中で,その流れを組み立てられるようになっておきたいです...!