マスタリングTCP/IP 入門編 第4版 勉強ログ(11)

たぶん一番苦手なところ。

経路制御(ルーティング)プロトコル

ネットワークの経路を設定する方法には、スタティックルーティング(静的経路制御)とダイナミックルーティング(動的経路制御)の2種類が存在する。

スタティックルーティングは手動で経路情報を設定する手法であり、
ダイナミックルーティングはRIPやOSPF等のプロトコルを用いることで自動的に経路情報を設定する方法。
(自動とはいえ、プロトコルの設定は必要)

小規模でルータの数も少ないネットワークであれば、スタティックルーティングでも問題ないが、
規模が大きくなり、ルータの数も増えてくると手動での設定には限界がある。
そういった場合にRIPやOSPF等のルーティングプロトコルが使用されることとなる。

ダイナミックルーティング

ダイナミックルーティングでは、隣り合うルータ間で自分が知っているネットワークの情報を教え合うことで、経路制御表を作成する。
これが各ルータで行われることにより、各ルータが正しくパケットを転送できるようになる。

EGPとIGP

ルーティングプロトコルはEGPとIGPに分けられるが、その前に自律システムについて話す必要がある。

自律システム(AS)とは、各組織の内部で経路制御に関するルールを決めて、それを基に運用する範囲をいう。
具体例としては、ISPなどが挙げられる。

この自律システム内で使用されるダイナミックルーティングプロトコルがIGP、
そして自律システム間の経路制御に使用されるのがEGPである。

EGPにより、自律システム間の経路制御が行われ、IGPにより、その中のホストに対する経路制御が行われる。

IGPでは、RIP、OSPFといったプロトコルが利用され、EGPではBGPが利用されている。

経路制御アルゴリズム

経路制御アルゴリズムとして代表的なものは、距離ベクトル型とリンク状態型がある。

距離ベクトル型

距離ベクトル型は、距離(メトリック)と方向によって目的のネットワークやホストの位置を決定する方法。
ルータ間で各ネットワークの向きと距離に関する情報が交換され、これらの情報から経路制御表が作成される。
単純であるが、複雑な構造になると情報が安定するまで時間がかかったり、経路にループが生じやすくなってしまう欠点がある。

リンク状態型

リンク状態型は、ルータがネットワーク全体の接続状態を理解して経路制御表を作成する方法。
各ルータが同じネットワークの地図を持つイメージである。
こうすることで、ネットワークが複雑になっても情報が安定するメリットがある。

一方で、経路制御表の作成は複雑な計算によって求められるので、それなりのリソースを必要とする。

BGP

BGPはEGPの1つで、組織間のパケット転送に使用するプロトコルである。

BGPでは、AS番号を使って経路制御を行う。
AS番号とは、自律システム(AS)にそれぞれ割り当てられる、16ビットの番号のことである。

AS番号を割り当てられた組織は、AS内部のネットワークの運営や管理についての決定権をもつ。
他のASと接続を行う場合は、交渉の後に接続契約を行う必要がある。
(他ネットワークに負荷をかけるため、それなりの料金を支払う)

BGPにおいては、経路制御情報を交換するルータをBGPスピーカーと呼び、各ASとBGPコネクションを確立する。

BGPでは、パケットのやり取りを行う中で、パケットが通過するASのリストを作成する。
これをAS経路リストと呼び、通過するAS数の短い経路が選択される。
つまり、BGPのメトリックは経由AS数といえる。

BGPでは、経由するAS番号がすべて分かるため、経路ベクトル型と呼ばれる。

また、BGPでは限定的ではあるが、経由するASを指定することもできる。
(AS接続契約もあるため)

マスタリングTCP/IP 入門編 第4版 勉強ログ(10)

Telnet

Telnet

遠隔ログイン時に使用する(今はほとんどSSHであるが)プロトコル
Telnetのサービスは、ネットワーク仮想端末の機能とオプションのやり取りをする機能の2つに分けることができる。

オプションとは、画面制御情報や行モード/透過モードの2つのモードといった情報をやり取りするのに用いられる。

行モードとは、クライアントにて改行キーが入力されるごとに1行分のデータをまとめて送る方法であり、
透過モードは、クライアントにて入力された1文字ごとにデータを送る方法である。

FTP

FTPでは、2つのTCPコネクションを使用する。
1つは制御用で、もう1つはデータの転送用である。

制御用コネクションはユーザ認証や、転送ファイル名や転送方法の指示に使用される。
データ転送用コネクションは、その名の通り、データ転送専用のコネクションとして使用される。

データ転送が終了すると、データ転送用のコネクションは切断される。
制御用コネクションは、ユーザから切断の指示があるまで接続されたままとなるが、
一定時間使用されていない場合、サーバ側で切断される設定となっていることが多い。

VPN

VPNの方式にはトランスポートモードと、トンネルモードがある。

トランスポートモードは、TCPヘッダとデータ部を暗号化する方式。IPヘッダは暗号化されない。
アプリケーション側での暗号化を行うため、特殊なルータは不要である。

トンネルモードは、IPヘッダを含めたパケット全体を暗号化する方式。
暗号化は途中のVPNルータで行われるため、専用のルータが必要となる。
ただ、両端のホストは暗号化処理を意識する必要はない。

マスタリングTCP/IP 入門編 第4版 勉強ログ(9)

WWW(World Wide Web)

URI(Uniform Resource Identifier)

URIはよくURLとごっちゃに説明されることがあるが、URIそのものはインターネットやそれ以外の資源を表す識別子である。
インターネット上以外にも当てはまるので、例えば電話番号やファックスの番号もURIに当てはまる。
従って、厳密にはURLはURIの一部となる。
まあ世の中URLを指してURIと言っちゃってる資料とかありますけれども

WWWを構成する要素

WWWは、URL、データ形式、転送プロトコルの3要素で構成される。
このうち、データ形式はHTML(XHTML)、転送プロトコルはHTTPとなる。

HTMLはWebページを記述するための言語であり、最近はXMLをベースにしたXHTMLが発展している。

HTTPはTCPコネクションを利用してデータのやり取りを行うプロトコル
クライアントからの要求コマンドは"GET"や"PUT"などのASCII文字列が利用され、
それに対する応答は"200"や"404"と3文字の数字をASCII文字列で表したものが利用される。

電子メール

電子メールもWWWと同じくメールアドレス、データ形式、転送プロトコルの3要素で構成される。
このうち、データ形式MIME、転送プロトコルSMTPとなる。

MIMEは電子メールで転送できるデータ形式を拡張したものである。
ヘッダと本文(データ)で構成され、ヘッダと本文をパートと呼ぶ。
複数のパートを定義したものをマルチパートと呼び、これによりテキストと画像を同時に送信することができる。

SMTPはメールを配送するプロトコル
HTTPと同じく、クライアントがテキストコマンドで要求を出し、サーバが3文字の数字を応答として返す。

POP

前述のSMTPはメールを配送するプロトコルであるが、通常、メールを送信する相手はPCの電源をONにしておく必要がある。
しかし、個人のPCを1日中つけるというのは現実的ではないため、通常はPOPサーバにメールを送信する。

POPサーバに到着したメールはそのまま保存され、クライアントからPOPでPOPサーバにアクセスすることで、
クライアントのPCにメールを保存することができる。
これは、よく郵便局と郵便ポストの動きに例えられる。

IMAP

IMAPはメールをサーバ側で管理するプロトコル
IMAPを使用することで、サーバ上のメールをダウンロードしなくても読むことができるため、
複数のコンピュータを使用する場合に便利である。

マスタリングTCP/IP 入門編 第4版 勉強ログ(8)

トランスポート層プロトコルTCPUDP

TCP

TCPはコネクション指向で、信頼性のあるストリーム型プロトコル
ストリームとは、切れ目のないデータ構造のことで、たとえば送信側のアプリケーションが
100バイトごとに10個のデータを送信した場合、受信側では1つにまとめられて1000バイトとして受信する。

TCPでは、信頼性提供のために順序性やふくそう制御などの多くの機能をもつ。

UDP

UDPは信頼性のないデータグラム型プロトコル
UDPでは、送信側のアプリケーションが100バイトごとにデータを送信した場合、
受信側のアプリケーションも100バイト単位でデータを受信する。
このとき、UDPではパケットの長さが伝えられるため、パケット内に区切りが不要となる。
ただし、プロトコルそのものに信頼性がないため、1つでもロストするとデータが失われる。

ポート番号

TCP/UDPにおける各通信は、以下5つのパラメータでそれぞれ区別される。
- 宛先IPアドレス
- 送信元IPアドレス
- 宛先ポート番号
- 送信元ポート番号
- プロトコル番号

これらの組み合わせで通信を識別するため、逆に言えば、どれか1つでも異なれば別の通信だと判断される。

マスタリングTCP/IP 入門編 第4版 勉強ログ(7)

明示的なふくそう通知

通信経路にてふくそうが発生した場合、通信量を減らす必要がある。
TCPプロトコルでもふくそうを制御する機能は存在するが、
TCPの場合はパケットがロストした場合にふくそうを検知する。
しかし、この方法ではパケットがロストしないとふくそうを検知できない。

これを解決するため、IPレイヤーでもふくそうを検知できる機能がある。
これが、ECNと呼ばれ、IPヘッダにECNフィールドを定義し、その中のCWRフラグ、ECEフラグによってふくそうを通知している。

実際にふくそうを通知する際、以下の流れとなる。
(1)あらかじめIPヘッダのECTフラグを1にしておき、パケットを送信する。
(2)通信経路にてふくそうが発生していた場合、IPヘッダのCEフラグを1に設定する。
(3)パケットを受信したホストにて、IPヘッダのCEフラグが1であるため、ふくそうが発生していたことを検知する。
応答パケットを送る際、ふくそうしていることを知らせるECEフラグを1にして送信する。
(4)受信したホストでは、通信経路がふくそうしていることが分かるため、パケットの送信速度を小さくする。

このように、ふくそうを知らせるパケットを新しく送信することなく、フラグの有無で通知する。

IPv6(IP version 6)

IPv6アーキテクチャ

IPv6では、主に3つの種類が存在する。
これらのIPアドレスは1つのNICに複数つけることができる。

グローバルユニキャストアドレス

全世界で一意に決まるIPアドレスを指す。
IPv4でいうところのグローバルIPアドレスのこと。

IPアドレスの一部はMACアドレスを元に決定されるが、情報秘匿のため、一時アドレスを使用することもできる。
これにより、IPアドレスから機器を特定しづらくなるメリットがある。

リンクローカルユニキャストアドレス

データリンクの同一リンク内で一意に決まるアドレス。
ルータを介さない同一リンク間の通信で使用される。

ユニークローカルアドレス

インターネットへ接続しないネットワーク内で使用するアドレス。
IPv4でいうところのプライベートIPアドレスのこと。

IPv6での分割処理

IPv6では、通信経路の途中にてパケットの分割が行われない。
これは、ルータの負荷を減らし、高速なインターネットを実現するためである。
したがって、IPv6では経路MTU探索がほぼ必須となっている。

ICMPv6

ICMPv6では、ICMP(IPv4)よりも進化しており、ARPDHCPの機能が組み込まれている。
ICMPv6では、ICMPを大きく2つに分類しており、それぞれエラーメッセージと情報メッセージに分かれている。

エラーメッセージはIPパケットが宛先ホストまで到達できなかった場合、
エラーが発生したホストやルーターによって送信されるメッセージとなる。
これは、タイプ0~127に分類される。

情報メッセージはタイプ128~255に分類される。
このうち、タイプ133~137は近隣探索メッセージとも呼ばれ、
IPv6アドレスとMACアドレスの対応関係を調べる際に使用される。

近隣探索

IPv6における近隣探索メッセージは、IPv6アドレスとMACアドレスの対応関係を調べるときに用いられる。
動きとしては、IPv4におけるARPに近く、近隣要請メッセージでMACアドレスを問い合わせ、近隣告知メッセージでMACアドレスを通知する。

また、IPv6ではDHCPの機能も備わっており、
ルーターがないネットワークであればリンクローカルアドレスを作成し、
ルーターがあるネットワークであればルータから情報を取得し、MACアドレスと組み合わせてIPv6アドレスを生成する。

マスタリングTCP/IP 入門編 第4版 勉強ログ(6)

IPプロトコル

ARP

ARPとは

ARPIPアドレスからMACアドレスを解決するためのプロトコル

同一リンク上のホストにパケットを送信する際、
対象ホストのMACアドレスが必要となるため、
送信元ホストが同一リンク上の全ホストにARPパケットをブロードキャストする。(ARP要求パケット)

パケットを受信した各ホストは、IPアドレスが自分のものであるかを確認し、
該当する場合は応答をホストに返却する。(ARP応答パケット)

通常、ARP要求パケット、ARP応答パケットによって取得したMACアドレスはキャッシュされる。
これにより、ARPパケットがネットワーク上に散乱することを防いでいる。

RARP

RARPARPの逆で、MACアドレスからIPアドレスを知りたい場合に使用される。
これには、MACアドレスIPアドレスの紐づけ情報を持つRARPサーバを構築しておく必要がある。

ICMP

IPは信頼性の無いプロトコルであるため、途中でパケットが破棄されたり、
目的ホストまで到着できない場合もある。

このように、IPプロトコルが何らかの原因で到達できなかった場合、
ICMPプロトコルにより障害の検知が行われる。

なお、ICMPによる情報はIPプロトコルを使用して配送される。

ICMPは大きくタイプによって、通知内容が分類されている。

ICMP到達不能メッセージ(タイプ3)

ルータがパケットを宛先に配送できない場合、送信元ホストに送るメッセージ。
この中でも更に、どのような理由で送れなかったのかを示すコード番号が存在する。

例えば、Host UnreachableはそのIPアドレスへの経路が存在しなかったか、
対象ホストがネットワーク的に通信不可能であった場合に送信される。

ICMPリダイレクトメッセージ(タイプ5)

送信元ホストが最適ではない経路を使用していた場合、
より最適な経路を送るためのメッセージ。
最適経路の情報と元々のデータが含まれている。

ただし、ルータ側の経路情報が間違っていた場合にはトラブルの元となるため、
無効とする場合もある。

ICMP時間超過メッセージ(タイプ11)

IPパケットには、TTLと呼ばれるルータを通過する度に1減算されるフィールドが存在する。
このTTLが0となった場合にこのメッセージを送信し、パケットを破棄する。

これにより、送信元ホストはパケットがループして破棄されたことが分かる。
(実際にはTTLで到達範囲を制限している場合もあるため、ループだけが原因とは限らない)

ICMPエコーメッセージ(タイプ0、8)

通信したいホストやルーターなどに、IPパケットが到達するかを確認したい場合に使用される。

相手にICMP Echo Request Message(タイプ8)を送信し、
相手からICMP Echo Reply Message(タイプ0)が返ってくることで、到達可能かを判別する。

DHCP

IPアドレスを動的に割り当てるためのプロトコル

DHCPを使用したIP取得までの流れ

DHCPでIPを取得するためには、以下の流れを行っている。

(1) IPアドレスを要求するホストがDHCPサーバを探すため、
ブロードキャストでDHCP発見パケットを送信する。

(2) DHCP発見パケットを受信したDHCPサーバが、送信元ホストに使用可能なネットワークの設定を通知する。
DHCPサーバが複数存在した場合は、複数から通知されることになる。

(3) ホストにて、(2)で最も早く応答のあったDHCPサーバに対し、通知された設定を使用したい旨を送信する。

(4) DHCPサーバが(3)の要求を許可する通知を送信する。

なお、(1)、(3)の時点では、ホストにIPアドレスが割り当てられていない。
この状態でIPパケットを送信する場合の送信元・送信先IPアドレスについては、
送信元IPアドレスについては、0.0.0.0、送信先IPアドレスは255.255.255.255となる。

NAT

NATとは、プライベートIPアドレスグローバルIPアドレスに変換する技術である。
これにより、1つのグローバルIPアドレスだけで、複数のホストが外部との通信が可能になる。

なお、TCPUDPのポートも付け替える技術はNAPTと呼ばれる。

まず、NATでは、プライベートIPアドレスを利用した通信が途中のNATにて、
グローバルIPアドレスに変換されて外部へと送信される。

ただし、これでは複数のホストから同時に通信が行われる場合には対応できないという欠点がある。
なぜなら、グローバルIPは限られており、送信先ポートも同じであった場合には
戻りの通信の変換ができないためである。

これを解決するためにNAPTと呼ばれる技術がある。

これは、IPアドレスの他にポート番号も含めて変換処理を行うもので、
変換時にグローバルIPアドレスとしての送信元のポートをずらすことで、
プライベートIPアドレスとの紐づけをうまく行っている。

IPトンネリング

IPトンネリングとは、IPヘッダの次にIPヘッダ、IPヘッダの次にIPv6ヘッダのように
ネットワーク層のヘッダの次に、またネットワーク層(あるいは下位層)が続く通信方法を指す。

用途としては、IPv4ネットワークでIPv6パケットを送信したり、
逆にIPv6ネットワークでIPv4パケットを送信する場面で利用される。

これにより、使用プロトコルが異なっていたとしても、IPトンネリングを用いることで通信が可能となる。

通信品質の制御

IPプロトコルで通信品質を制御するための仕組みとして、IntServとDiffServが存在する。

IntServ

特定のアプリケーション間の通信に対して、通信品質を優先させる仕組み。
特定のアプリケーションとは、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号、プロトコル番号の5つが同じものを指す。

このような「品質を優先させるべき通信」が始まった場合に、ルータにて優先制御の設定を行う。
これにより、優先すべき通信は優先して行われ、それ以外の通信は輻輳時に破棄されやすくなる。

プロトコルとしては、RSVPが使用され、通信時にパケットの受信側から送信側に制御パケットを送信する。
これにより、経路間のルータに品質制御のための設定が行われる。

IntServは仕組みが複雑で実用的ではないため、普及が進んでいない。

DiffServ

特定のネットワーク内でおおざっぱに優先制御を行う仕組み。

DiffServによる通信制御を行うネットワークはDiffServドメインと呼ばれる。
ドメインの境界にあるルータはドメインに入ってくるパケットのDSCPフィールドを書き換えることで、優先度を設定する。

この時、優先制御を行いたいネットワークには優先される値を設定し、
そうでないネットワークは優先されない値を設定する。

こうすることで、DiffServドメイン内のルータはDSCPフィールドを確認することで、
受信したパケットが優先されるべきなのか、そうでないのかを判断する。

もちろん、優先度の低いパケットは輻輳時に破棄される。

マスタリングTCP/IP 入門編 第4版 勉強ログ(5)

IPの基礎知識

用語関連

  • TCP/IPでは、パケットが流れるネットワークの1区間をホップと呼ぶ。

  • イーサネットのMTUは1500バイトであるが、ジャンボフレームと呼ばれる機能を使用することで、9000バイト前後のMTUを使用することができる。
    もちろん、各機器がジャンボフレームに対応していることが前提となる。

IPの分割処理

データリンクのプロトコル間で異なる性質として、MTU(最大転送単位)が存在する。
プロトコルごとにMTUは異なり、イーサネットでは1500バイト、PPPoEでは1492バイトとなる。

このようにデータリンクのプロトコルやMTUが異なっていたとしても、
IPプロトコルにおいては、違いを意識させずにデータを転送する必要がある。

そのために、IPレイヤにてパケットを分割する必要がある。

分割処理の流れ

基本的な分割処理の動きとしては、送信ホストから送信されたパケットは、
途中のルータにて、データリンクのプロトコルのMTUに合わせたサイズに分割される。

最終的に目的のホストに到着した後、分割されたパケットはホストにて再構築が行われる。
途中のルータはパケットの分割処理のみ行い、再構築は行わない。

これは、ルータの負荷を考慮した理由によるものである。

経路MTU探索

経路MTU探索は、ホストが自動的に最適なMTUを探索してくれる技術である。

ここでいう最適なMTUとは、宛先ホストまでパケットを送信した際にパケットが分割されないMTU、
つまり経路上最小のMTUである。

経路MTUは、以下のように処理される。

(1) 送信ホストがIPヘッダの分割禁止フラグを設定することで、ルータでのパケット分割を禁止する。

(2) 経路上の最小MTUを超えるパケットを送信した場合、パケットは破棄され、ICMPプロトコルにより次経路のMTUが通知される。

(3) プロトコルTCPであった場合は、TCPプロトコルにてデータを分割して再送する。
UDPの場合は、IP層にてデータを分割して送信する。(※データの再送は行わない)

(4) TCPプロトコルの場合は、データをそのままTCP層へ渡す。
UDPの場合は、IP層にてデータを再構築してUDP層へ渡す。

経路MTUの値は、多くの場合約10分間保持され、10分経過後は再度探索が行われる。