IP 基本认识#
ネットワーク層の主な役割は、ホスト間の通信を実現することで、これをポイントツーポイント(end to end)通信とも呼びます。
ネットワーク層とデータリンク層の関係は?#
MAC の役割は「直接接続」された 2 つのデバイス間の通信を実現することであり、IP は「直接接続されていない」2 つのネットワーク間での通信伝送を担当します。
ネットワーク内でのデータパケットの伝送において、送信元 IP アドレスと宛先 IP アドレスは伝送中に変わることはありません(前提:NAT ネットワークを使用していない場合)、送信元 MAC アドレスと宛先 MAC アドレスのみが変化し続けます。
IP アドレスの基礎知識#
TCP/IP ネットワーク通信において、正常に通信を行うためには、各デバイスが正しい IP アドレスを設定する必要があります。そうでないと、正常な通信を実現できません。
IP アドレス(IPv4 アドレス)は 32 ビットの正の整数で表され、コンピュータでは二進数の形式で処理されます。
人間は記憶を容易にするために、ドット区切りの 10 進数表記を採用しています。つまり、32 ビットの IP アドレスを 8 ビットごとにグループ化し、4 つのグループに分け、各グループを「.」で区切り、各グループを 10 進数に変換します。
IP アドレスの分類#
IP アドレスは 5 種類に分類され、A クラス、B クラス、C クラス、D クラス、E クラスがあります。
A、B、C クラスのアドレスとは何ですか?
A、B、C クラスは主にネットワーク番号とホスト番号の 2 つの部分に分かれています。
A、B、C クラスの最大ホスト数はどのように計算されますか?
最大ホスト数は、ホスト番号のビット数によって決まります。たとえば、C クラスのアドレスのホスト番号が 8 ビットの場合、C クラスの最大ホスト数は:
なぜ 2 を引くのですか?
IP アドレスには、ホスト番号がすべて 1 またはすべて 0 の 2 つの特別な IP があります。
- ホスト番号がすべて 1 は、特定のネットワーク内のすべてのホストを指定し、ブロードキャストに使用されます。
- ホスト番号がすべて 0 は、特定のネットワークを指定します。
したがって、割り当ての過程では、これらの 2 つのケースを除外する必要があります。
ブロードキャストアドレスは何に使用されますか?
ブロードキャストアドレスは、同じリンク内で相互接続されたホスト間でデータパケットを送信するために使用されます。
ホスト番号がすべて 1 のとき、そのネットワークのブロードキャストアドレスを示します。たとえば、172.20.0.0/16 を二進数で表すと次のようになります:
10101100.00010100.00000000.00000000
このアドレスのホスト部分をすべて 1 に変更すると、ブロードキャストアドレスが形成されます:
10101100.00010100.11111111.11111111
このアドレスを 10 進数で表すと、172.20.255.255 になります。
ブロードキャストアドレスは、ローカルブロードキャストと直接ブロードキャストの 2 種類に分けられます。
- 同じネットワーク内でのブロードキャストはローカルブロードキャストと呼ばれます。たとえば、ネットワークアドレスが 192.168.0.0/24 の場合、ブロードキャストアドレスは 192.168.0.255 です。このブロードキャストアドレスの IP パケットはルーターによって遮断されるため、192.168.0.0/24 以外の他のリンクには到達しません。
- 異なるネットワーク間のブロードキャストは直接ブロードキャストと呼ばれます。たとえば、ネットワークアドレスが 192.168.0.0/24 のホストが 192.168.1.255/24 の宛先アドレスに IP パケットを送信します。このパケットを受け取ったルーターは、データを 192.168.1.0/24 に転送し、すべての 192.168.1.1〜192.168.1.254 のホストがこのパケットを受信できるようにします(直接ブロードキャストには一定のセキュリティ上の問題があるため、ほとんどの場合、ルーターで転送しないように設定されます)。
D、E クラスのアドレスとは何ですか?
D クラスと E クラスのアドレスにはホスト番号がないため、ホスト IP には使用できません。D クラスはマルチキャストに一般的に使用され、E クラスは予約された分類で、現在は未使用です。
マルチキャストアドレスは何に使用されますか?
マルチキャストは、特定のグループ内のすべてのホストにパケットを送信するために使用されます。
マルチキャストに使用される D クラスアドレスの最初の 4 ビットは 1110 であり、これはマルチキャストアドレスを示します。残りの 28 ビットはマルチキャストグループ番号です。
224.0.0.0〜239.255.255.255 はマルチキャストの利用可能範囲であり、次の 3 つのカテゴリに分けられます:
- 224.0.0.0〜224.0.0.255 は予約されたマルチキャストアドレスで、ローカルエリアネットワーク内でのみ使用され、ルーターは転送しません。
- 224.0.1.0〜238.255.255.255 はユーザーが利用できるマルチキャストアドレスで、インターネット上で使用できます。
- 239.0.0.0〜239.255.255.255 はローカル管理マルチキャストアドレスで、内部ネットワーク内で使用され、特定のローカル範囲内でのみ有効です。
IP 分類の利点
ルーターでもホストでも、IP アドレスを解析する際に、IP アドレスの最初のビットが 0 かどうかを判断します。0 であれば A クラスアドレスであるため、ネットワークアドレスとホストアドレスをすぐに見つけることができます。
IP 分類の欠点
欠点 1:
同じネットワーク内にアドレス階層がないため、たとえば、ある会社が B クラスアドレスを使用している場合、環境に応じてアドレス階層を分ける必要があるかもしれませんが、この IP 分類にはアドレス階層の分割機能がないため、アドレスの柔軟性が欠けています。
欠点 2:
A、B、C クラスには厄介な状況があり、現実のネットワークと適切に一致しません。
- C クラスアドレスが含む最大ホスト数は非常に少なく、254 台しかなく、ネットカフェでも足りないかもしれません。
- B クラスアドレスが含む最大ホスト数は非常に多く、6 万台以上のマシンが同じネットワークに配置されることは一般的な企業では達成できず、未使用のアドレスは無駄になります。
これらの 2 つの欠点は、CIDR 無分類アドレスで解決できます。
無分類アドレス CIDR#
IP 分類には多くの欠点があるため、無分類アドレスの提案がなされました。つまり CIDR です。
この方式では、分類アドレスの概念はなく、32 ビットの IP アドレスは 2 つの部分に分けられ、前半がネットワーク番号、後半がホスト番号です。
ネットワーク番号とホスト番号はどのように分けられますか?
表記形式は a.b.c.d/x で、/x は前の x ビットがネットワーク番号に属することを示し、x の範囲は 0〜32 です。これにより、IP アドレスはより柔軟になります。
ネットワーク番号とホスト番号を分ける別の方法は、サブネットマスクです。マスクの意味はホスト番号を隠すことで、残りがネットワーク番号になります。
サブネットマスクと IP アドレスをビットごとに AND 計算すると、ネットワーク番号が得られます。
なぜネットワーク番号とホスト番号を分離するのですか?
2 台のコンピュータが通信するためには、まず同じブロードキャストドメイン内にいるかどうか、つまりネットワークアドレスが同じかどうかを判断する必要があります。ネットワークアドレスが同じであれば、受信者は同じネットワーク内にいることを示し、データパケットを直接ターゲットホストに送信できます。
ルーターのアドレッシング作業も、この方法で対応するネットワーク番号を見つけ出し、データパケットを対応するネットワーク内に転送します。
サブネットの分割はどのように行いますか?
上記のように、サブネットマスクを使用してネットワーク番号とホスト番号を分割できることがわかりましたが、実際にはサブネットマスクにはもう 1 つの役割があります。それはサブネットを分割することです。
サブネット分割は、ホストアドレスを 2 つの部分に分けることを意味します:サブネットネットワークアドレスとサブネットホストアドレス。形式は次のとおりです:
- サブネット分割を行っていない IP アドレス:ネットワークアドレス+ホストアドレス
- サブネット分割後の IP アドレス:ネットワークアドレス+(サブネットネットワークアドレス+サブネットホストアドレス)
C クラスアドレスをサブネット分割すると仮定し、ネットワークアドレス 192.168.1.0 をサブネットマスク 255.255.255.192 でサブネット分割します。
C クラスアドレスの最初の 24 ビットはネットワーク番号で、最後の 8 ビットはホスト番号です。サブネットマスクから、8 ビットのホスト番号から 2 ビットをサブネット番号として借用することがわかります。
公有 IP アドレスと私有 IP アドレス#
A、B、C 分類アドレスには、実際には公有 IP アドレスと私有 IP アドレスの区別があります。
公有 IP アドレスは誰が管理していますか?
私有 IP アドレスは通常内部の IT 担当者が管理し、公有 IP アドレスは ICANN 組織が管理しています。中国語では「インターネット名称と数字アドレス割り当て機関」と呼ばれています。
IP アドレスとルーティング制御#
IP アドレスのネットワークアドレス部分は、ルーティング制御に使用されます。
ルーティング制御テーブルには、ネットワークアドレスと次に送信すべきルーターのアドレスが記録されています。ホストとルーターには、それぞれのルーター制御テーブルがあります。
IP パケットを送信する際、まず IP パケットのヘッダー内の宛先アドレスを確認し、そのアドレスと同じネットワークアドレスを持つレコードをルーティング制御テーブルから見つけます。そのレコードに基づいて、IP パケットを対応する次のルーターに転送します。ルーティング制御テーブルに同じネットワークアドレスのレコードが複数存在する場合、最もビット数が多いネットワークアドレス、つまり最長一致を選択します。
- ホスト A が IP パケットを送信する場合、送信元アドレスは 10.1.1.30、宛先アドレスは 10.1.2.10 です。ホスト A のルーティングテーブルに宛先アドレス 10.1.2.10 と同じネットワークアドレスが見つからないため、パケットはデフォルトルート(ルーター 1)に転送されます。
- ルーター 1 が IP パケットを受信すると、ルーター 1 のルーティングテーブルで宛先アドレスと同じネットワークアドレスのレコードを照合し、一致するものが見つかると、IP データパケットを 10.1.0.2 というルーター 2 に転送します。
- ルーター 2 が受信した後、同様に自身のルーティングテーブルを照合し、一致するものが見つかると、IP パケットをルーター 2 の 10.1.2.1 というインターフェースから出力し、最終的にスイッチを経由して IP データパケットをターゲットホストに転送します。
ループバックアドレスはネットワークに流れません
ループバックアドレスは、同じコンピュータ上のプログラム間でネットワーク通信を行うために使用されるデフォルトのアドレスです。
コンピュータは特別な IP アドレス 127.0.0.1 をループバックアドレスとして使用します。このアドレスと同じ意味を持つのは、localhost というホスト名です。この IP またはホスト名を使用すると、データパケットはネットワークに流れません。
IP フラグメンテーションと再構成#
IP データパケットのサイズが MTU を超えると、IP データパケットはフラグメント化されます。
フラグメント化された IP データグラムは、再構成されるときにターゲットホストによってのみ行われ、ルーターは再構成を行いません。
IPv6 基本認識#
IPv6 のアドレスは 128 ビットで、割り当て可能なアドレスの数は驚異的です。冗談を言うと、IPv6 は地球上のすべての砂粒に IP アドレスを割り当てることができます。
しかし、IPv6 はより多くのアドレスを持つだけでなく、より良いセキュリティと拡張性も提供します。簡単に言えば、IPv6 は IPv4 に比べてより良いネットワーク体験をもたらします。
しかし、IPv4 と IPv6 は互換性がないため、私たちのコンピュータやスマートフォンなどのデバイスがサポートするだけでなく、ネットワークプロバイダーが既存のデバイスをアップグレードする必要があるため、これが IPv6 の普及率が遅い理由の 1 つかもしれません。
IPv6 のハイライト
IPv6 は単に割り当て可能なアドレスが増えただけでなく、非常に多くのハイライトがあります。
- IPv6 は自動構成が可能で、DHCP サーバーがなくても自動的に IP アドレスを割り当てることができます。本当にプラグアンドプレイの便利さです。
- IPv6 のパケットヘッダーの長さは固定値の 40 バイトで、パケットヘッダーのチェックサムが削除され、ヘッダー構造が簡素化され、ルーターの負荷が軽減され、伝送性能が大幅に向上しました。
- IPv6 には、IP アドレスの偽造に対処するネットワークセキュリティ機能や、回線の盗聴を防ぐ機能があり、セキュリティが大幅に向上しました。
IPv6 アドレスの識別方法
IPv4 アドレスの長さは 32 ビットで、8 ビットごとにグループ化され、ドット区切りの 10 進数で表現されます。
IPv6 アドレスの長さは 128 ビットで、16 ビットごとにグループ化され、各グループはコロン「:」で区切られます。
連続する 0 がある場合、これらの 0 を省略し、2 つのコロン「::」で区切ることができます。ただし、1 つの IP アドレス内で 2 つの連続するコロンが現れるのは 1 回だけ許可されています。
IPv6 アドレスの構造
IPv6 のアドレスには主に以下のタイプがあります:
- ユニキャストアドレス:1 対 1 の通信に使用されます。
- マルチキャストアドレス:1 対多の通信に使用されます。
- アンキャストアドレス:最近のノードとの通信に使用され、最近のノードはルーティングプロトコルによって決定されます。
- ブロードキャストアドレスはありません。
IPv6 ユニキャストアドレスのタイプ
1 対 1 通信の IPv6 アドレスは、主に 3 つのタイプに分類され、それぞれの有効範囲が異なります。
- 同じリンク内でのユニキャスト通信は、ルーターを介さずに行われ、リンクローカルユニキャストアドレスを使用できます。IPv4 にはこのタイプはありません。
- 内部ネットワークでのユニキャスト通信には、ユニークローカルアドレスを使用できます。これは IPv4 のプライベート IP に相当します。
- インターネット通信には、グローバルユニキャストアドレスを使用できます。これは IPv4 の公有 IP に相当します。
IPv4 ヘッダーと IPv6 ヘッダー#
IPv6 は IPv4 のヘッダーを改善しました:
- ヘッダーのチェックサムフィールドが削除されました。データリンク層とトランスポート層でチェックが行われるため、IPv6 は IP のチェックを直接削除しました。
- フラグメンテーション / 再構成に関連するフィールドが削除されました。フラグメンテーションと再構成は時間のかかるプロセスであり、IPv6 は中間ルーターでのフラグメンテーションと再構成を許可しません。この操作はソースとターゲットホストでのみ行われ、ルーターの転送速度が大幅に向上します。
- オプションフィールドが削除されました。オプションフィールドはもはや標準 IP ヘッダーの一部ではありませんが、消えてしまったわけではなく、IPv6 ヘッダー内の「次のヘッダー」で示された位置に現れる可能性があります。このオプションフィールドを削除することで、IPv6 のヘッダーは固定長の 40 バイトになります。
IP プロトコル関連技術#
DNS ドメイン名解決#
DNS ドメイン名解決では、DNS はドメイン名の URL を自動的に具体的な IP アドレスに変換できます。
ドメイン名の階層関係
DNS 内のドメイン名はすべてピリオドで区切られています。たとえば、www.server.com では、ここでのピリオドは異なる階層間の境界を表します。
ドメイン名内では、右側に近い位置が階層が高いことを示します。
ルートドメインは最上位にあり、その次の階層が com トップレベルドメインで、その下が server.com です。
したがって、ドメイン名の階層関係は木構造に似ています:
- ルート DNS サーバー
- トップレベルドメイン DNS サーバー(com)
- 権威 DNS サーバー(server.com)
ドメイン名解決の作業フロー
ARP と RARP プロトコル#
IP データグラムを転送する際、送信元 IP アドレスと宛先 IP アドレスが決定されると、ホストの「ルーティングテーブル」を通じて IP パケットの次のホップを決定します。しかし、ネットワーク層の次の層はデータリンク層であるため、「次のホップ」の MAC アドレスも知る必要があります。
ホストのルーティングテーブルには次のホップの IP アドレスが見つかるため、ARP プロトコルを使用して次のホップの MAC アドレスを取得できます。
では、ARP はどのように相手の MAC アドレスを知るのですか?
ARP は ARP リクエストと ARP レスポンスの 2 種類のパケットを使用して MAC アドレスを特定します。
- ホストはブロードキャストで ARP リクエストを送信します。このパケットには、知りたい MAC アドレスのホスト IP アドレスが含まれています。
- 同じリンク内のすべてのデバイスが ARP リクエストを受信すると、ARP リクエストパケットの内容を確認します。ARP リクエストパケット内の宛先 IP アドレスが自分の IP アドレスと一致する場合、そのデバイスは自分の MAC アドレスを ARP レスポンスパケットに挿入してホストに返します。
オペレーティングシステムは通常、最初に ARP を介して取得した MAC アドレスをキャッシュしておき、次回はキャッシュから対応する IP アドレスの MAC アドレスを直接見つけることができます。
ただし、MAC アドレスのキャッシュには有効期限があり、その期限を超えるとキャッシュの内容はクリアされます。
RARP プロトコルは何か知っていますか?
RARP プロトコルは、既知の MAC アドレスから IP アドレスを取得するためのものです。たとえば、プリンタサーバーなどの小型組み込みデバイスをネットワークに接続する際によく使用されます。
通常、RARP サーバーを設置し、このサーバーにデバイスの MAC アドレスとその IP アドレスを登録します。その後、このデバイスをネットワークに接続し、次に:
- デバイスは「私の MAC アドレスは XXXX です。私の IP アドレスは何ですか?」というリクエストメッセージを送信します。
- RARP サーバーはこのメッセージを受信すると、「MAC アドレスが XXXX のデバイスの IP アドレスは XXXX です」という情報をそのデバイスに返します。
最後に、デバイスは RARP サーバーから受け取った応答情報に基づいて自分の IP アドレスを設定します。
DHCP 動的 IP アドレス取得#
私たちのコンピュータは通常、DHCP を介して動的に IP アドレスを取得し、IP 情報の設定の煩雑なプロセスを大幅に省略します。
まず一点説明しますが、DHCP クライアントプロセスは 68 ポートをリッスンし、DHCP サーバープロセスは 67 ポートをリッスンしています。
この 4 つのステップ:
- クライアントは最初に DHCP 発見メッセージ(DHCP DISCOVER)の IP データグラムを発信します。クライアントには IP アドレスがなく、DHCP サーバーのアドレスもわからないため、UDP ブロードキャスト通信を使用し、ブロードキャスト宛先アドレスは 255.255.255.255(ポート 67)で、ソース IP アドレスは 0.0.0.0(ポート 68)を使用します。DHCP クライアントはこの IP データグラムをリンク層に渡し、リンク層はフレームをネットワーク内のすべてのデバイスにブロードキャストします。
- DHCP サーバーは DHCP 発見メッセージを受信すると、DHCP 提供メッセージ(DHCP OFFER)でクライアントに応答します。このメッセージも IP ブロードキャストアドレス 255.255.255.255 を使用し、メッセージにはサーバーが提供するリース可能な IP アドレス、サブネットマスク、デフォルトゲートウェイ、DNS サーバー、および IP アドレスのリース期間が含まれています。
- クライアントは 1 つまたは複数のサーバーからの DHCP 提供メッセージを受信した後、1 つのサーバーを選択し、選択したサーバーに DHCP リクエストメッセージ(DHCP REQUEST)を送信して、設定されたパラメータをエコーします。
- 最後に、サーバーは DHCP ACK メッセージで DHCP リクエストメッセージに応答し、要求されたパラメータを返します。
クライアントが DHCP ACK を受信すると、インタラクションは完了し、クライアントはリース期間内に DHCP サーバーから割り当てられた IP アドレスを使用できるようになります。
リースされた DHCP IP アドレスの期限が近づくと、クライアントはサーバーに DHCP リクエストメッセージを送信します:
サーバーがリースを続けることに同意すれば、DHCP ACK メッセージで応答し、クライアントはリース期間を延長します。
サーバーがリースを続けることに同意しなければ、DHCP NACK メッセージを使用し、クライアントはリースされた IP アドレスの使用を停止しなければなりません。
DHCP インタラクション全体で、常に UDP ブロードキャスト通信が使用されていることがわかります。
ブロードキャストを使用しているので、DHCP サーバーとクライアントが同じローカルネットワーク内にない場合、ルーターはブロードキャストパケットを転送しないため、各ネットワークに DHCP サーバーを配置する必要がありますか?
この問題を解決するために、DHCP リレーエージェントが登場しました。DHCP リレーエージェントがあれば、異なるサブネットの IP アドレス割り当ても 1 つの DHCP サーバーで統一的に管理できます。
- DHCP クライアントは DHCP リレーエージェントに DHCP リクエストパケットを送信し、DHCP リレーエージェントはこのブロードキャストパケットを受信した後、ユニキャスト形式で DHCP サーバーに送信します。
- サーバーはこのパケットを受信した後、DHCP リレーエージェントに応答を返し、DHCP リレーエージェントはこのパケットを DHCP クライアントにブロードキャストします。
したがって、DHCP サーバーは同じリンク上にいなくても、IP アドレスの統一的な割り当てと管理を実現できます。
NAT ネットワークアドレス変換#
IPv4 のアドレスは非常に不足しているため、ネットワークアドレス変換 NAT の方法が提案され、IPv4 アドレスの枯渇問題を再び緩和しました。
IP アドレスとポート番号を一緒に変換します。
これにより、1 つのグローバル IP アドレスで済むようになります。この変換技術はネットワークアドレスとポート変換 NAPT と呼ばれます。
図には、2 つのクライアント 192.168.1.10 と 192.168.1.11 が同時にサーバー 183.232.231.172 と通信しており、これらの 2 つのクライアントのローカルポートは 1025 です。
このとき、2 つのプライベート IP アドレスは公有アドレス 120.229.175.121 に変換されますが、異なるポート番号で区別されます。
したがって、NAPT ルーターの変換テーブルが生成され、アドレスとポートの組み合わせを正しく変換できるようになり、クライアント A と B がサーバー間で同時に通信できるようになります。
この変換テーブルは NAT ルーター上で自動的に生成されます。たとえば、TCP の場合、TCP 接続の最初のハンドシェイク時の SYN パケットが送信されると、このテーブルが生成されます。その後、接続を閉じる際に発信される FIN パケットの確認応答とともにテーブルから削除されます。
NAT の欠点は?
NAT/NAPT は自分の変換テーブルに依存しているため、以下の問題が発生します:
- 外部から NAT 内部のサーバーに対して能動的に接続を確立することができません。なぜなら、NAPT 変換テーブルには変換記録がないからです。
- 変換テーブルの生成と変換操作には性能オーバーヘッドが発生します。
- 通信中に NAT ルーターが再起動すると、すべての TCP 接続がリセットされます。
NAT の潜在的な問題を解決するにはどうすればよいですか?
- IPv6 に切り替える
- NAT トラバーサル技術
これにより、ネットワークアプリケーションは自動的に自分が NAT デバイスの後ろにいることを発見し、NAT デバイスの公有 IP を自動的に取得し、自分のポートマッピングエントリを作成します。これらはすべて NAT デバイスの後ろのアプリケーションによって自動的に完了します。
ICMP インターネット制御メッセージプロトコル#
ICMP は Internet Control Message Protocol の略で、インターネット制御メッセージプロトコルです。
ネットワークパケットは複雑なネットワーク伝送環境で、さまざまな問題に直面することがよくあります。そのため、何が問題であるかを報告するメッセージを送信する必要があります。これにより、伝送戦略を調整し、全体の状況を制御できます。
ICMP の機能は何ですか?
ICMP の主な機能には、IP パケットが宛先アドレスに正常に届いたかどうかの確認、送信中に IP パケットが破棄された理由の報告、ネットワーク設定の改善などがあります。
IP 通信中に、特定の IP パケットが何らかの理由で宛先アドレスに到達できなかった場合、その具体的な理由は ICMP が通知します。
上の図の例では、ホスト A がホスト B にデータパケットを送信しましたが、何らかの理由で途中のルーター 2 がホスト B の存在を検出できなかった場合、ルーター 2 はホスト A に ICMP 宛先到達不能データパケットを送信し、ホスト B へのパケットが成功しなかったことを示します。
ICMP のこの通知メッセージは IP を使用して送信されます。
したがって、ルーター 2 から返される ICMP パケットは、通常のルーティング制御に従ってルーター 1 を経由してホスト A に転送されます。ICMP パケットを受信したホスト A は、ICMP のヘッダーとデータ領域を分解し、具体的な問題の原因を知ります。
ICMP のタイプ
ICMP は大きく 2 つのカテゴリに分けられます:
- 一つは診断用のクエリメッセージ、つまり「クエリパケットタイプ」です。
- もう一つはエラーの原因を通知するエラーメッセージ、つまり「エラーパケットタイプ」です。
クエリパケットタイプ#
エコーメッセージ —— タイプ 0 と 8
エコーメッセージは、通信するホストやルーター間で、送信されたデータパケットが相手に成功裏に到達したかどうかを判断するためのメッセージであり、ping コマンドはこのメッセージを利用して実現されています。
ping#
ping の送信と受信のプロセスを見てみましょう。
- ping コマンドが実行されると、送信元ホストは最初に ICMP エコー要求メッセージデータパケットを構築します。
- 次に、ICMP プロトコルはこのデータパケットをアドレス 192.168.1.2 と共に IP 層に渡します。IP 層は 192.168.1.2 を宛先アドレスとして、本機の IP アドレスを送信元アドレスとして、プロトコルフィールドを 1 に設定して ICMP プロトコルを示し、他の制御情報を加えて IP データパケットを構築します。
- 次に、MAC ヘッダーを追加する必要があります。- ARP
- ホスト B はこのデータフレームを受信した後、まずその宛先 MAC アドレスを確認し、自分の MAC アドレスと比較します。一致すれば受信し、そうでなければ破棄します。
受信後、データフレームを確認し、IP データパケットをフレームから抽出して本機の IP 層に渡します。同様に、IP 層は確認後、有用な情報を抽出して ICMP プロトコルに渡します。
ホスト B は ICMP エコー応答メッセージデータパケットを構築し、エコー応答データパケットのタイプフィールドは 0、シーケンス番号は受信した要求データパケットのシーケンス番号となり、再びホスト A に送信します。 - 規定の時間内に、送信元ホストが ICMP の応答パケットを受信しなければ、ターゲットホストに到達できないことを示します。ICMP エコー応答メッセージを受信した場合は、ターゲットホストに到達可能であることを示します。
この時、送信元ホストは現在の時刻からこのデータパケットが最初に送信された時刻を引き算し、ICMP データパケットの遅延時間を求めます。
エラーパケットタイプ#
- 宛先到達不能メッセージ —— タイプ 3
IP ルーターが IP データパケットを宛先アドレスに送信できない場合、送信元ホストに宛先到達不能の ICMP メッセージを返し、このメッセージには到達不能の具体的な理由が示されます。理由は ICMP パケットヘッダーのコードフィールドに記録されます。
- 原点抑制メッセージ —— タイプ 4
低速広域回線を使用している場合、WAN に接続されたルーターはネットワークの混雑問題に直面することがあります。
ICMP 原点抑制メッセージの目的は、この混雑状況を緩和することです。
ルーターが低速回線にデータを送信する際、送信キューのキャッシュがゼロになり、送信できなくなると、IP パケットの送信元アドレスに ICMP 原点抑制メッセージを送信することができます。
このメッセージを受け取ったホストは、全体の回線のどこかで混雑が発生していることを理解し、IP パケットの送信間隔を増やし、ネットワークの混雑を減少させます。
ただし、この ICMP は不公平なネットワーク通信を引き起こす可能性があるため、一般的には使用されません。 - リダイレクトメッセージ —— タイプ 5
ルーターが送信元ホストが「最適でない」経路を使用してデータを送信していることを発見した場合、そのホストに ICMP リダイレクトメッセージを返します。
このメッセージには最適なルーティング情報と送信元データが含まれています。これは主にルーターがより良いルーティング情報を持っている場合に発生します。ルーターはこのような ICMP メッセージを通じて送信元に通知し、次回は別のルーターに送信するように指示します。 - タイムアウトメッセージ —— タイプ 11
IP パケットには TTL(Time To Live、生存期間)というフィールドがあり、その値はルーターを通過するたびに 1 減少し、0 になるとその IP パケットは破棄されます。
この時、ルーターは送信元ホストに ICMP タイムアウトメッセージを送信し、そのパケットが破棄されたことを通知します。
IP パケットの生存期間を設定する主な目的は、ルーティング制御で問題が発生し、ループ状況が発生した場合に、IP パケットが無限にネットワーク上で転送されるのを防ぐことです。
traceroute#
作用 1:特別な TTL を故意に設定し、目的地に向かう途中で通過するルーターを追跡します。
この作用はどのように機能しますか?
その原理は、IP パケットの生存期間を 1 から順に増加させながら UDP パケットを送信し、ICMP タイムアウトメッセージを強制的に受信する方法です。
たとえば、TTL を 1 に設定すると、最初のルーターに到達した時点でパケットが破棄され、ICMP エラーパケットが返されます。このエラーパケットのタイプはタイムアウトです。
次に TTL を 2 に設定すると、最初のルーターを通過し、2 番目のルーターに到達した時点で再びパケットが破棄され、ICMP エラーパケットが返されます。このプロセスを繰り返し、目的のホストに到達するまで続きます。
このようなプロセスを通じて、traceroute はすべてのルーターの IP を取得できます。
もちろん、一部のルーターはこの ICMP を返さないため、一部の公衆アドレスでは中間のルーターを確認できないことがあります。
送信者は、送信した UDP パケットが目的のホストに到達したかどうかをどのように知るのですか?
traceroute は UDP パケットを送信する際、33434 という不可能なポート番号を UDP の宛先ポート番号として設定します。次の各プローブに対して、このポート番号は 1 ずつ増加します。これらのポートは通常使用されないと考えられていますが、特定のアプリケーションがこれらのポートをリッスンしている場合に何が起こるかは誰にもわかりません。
目的のホストが UDP パケットを受信すると、ICMP エラーパケットメッセージが返されますが、このエラーパケットメッセージのタイプは「ポート到達不能」です。
したがって、エラーパケットのタイプがポート到達不能である場合、送信者が送信した UDP パケットが目的のホストに到達したことを示します。
作用 2:故意にフラグメンテーションを行わず、パスの MTU を特定します。
これはなぜ行われるのですか?
目的はパス MTU の発見です。
時には、ルーターの MTU サイズがわからないことがあります。イーサネットのデータリンク上の MTU は通常 1500 バイトですが、非イーサネットの MTU 値は異なるため、MTU のサイズを知る必要があります。これにより、送信するパケットのサイズを制御できます。
その作業原理は次のとおりです:
最初に送信元ホストが IP データグラムを送信する際、IP パケットヘッダーのフラグメンテーション禁止ビットを 1 に設定します。このビットに基づいて、途中のルーターは大きなデータパケットをフラグメント化せず、パケットを破棄します。
その後、ICMP の到達不能メッセージがデータリンク上の MTU の値と共に送信元ホストに送信されます。到達不能メッセージのタイプは「フラグメンテーションが必要だがフラグメンテーション禁止ビットが設定されている」です。
送信元ホストは ICMP エラーパケットを受信するたびにパケットのサイズを減少させ、適切な MTU 値を特定して目的のホストに到達できるようにします。
IGMP インターネットグループ管理プロトコル#
前述のように、マルチキャストアドレス、つまり D クラスアドレスがあります。マルチキャストである以上、特定のグループのホストのみがデータパケットを受信でき、グループに属さないホストはデータパケットを受信できません。これを管理するために IGMP プロトコルが必要です。
IGMP はインターネットグループ管理プロトコルで、ホスト(マルチキャストメンバー)と最終ホップルーターの間で機能します。上の図の青い部分です。
- IGMP メッセージはルーターにマルチキャストグループへの参加と退出を要求します。デフォルトでは、ルーターは接続されたホストにマルチキャストパケットを転送しません。ホストが IGMP を介してマルチキャストグループに参加する場合、ルーターは IGMP ルーター表を記録し、ルーターはその後、マルチキャストパケットを対応するホストに転送します。
- IGMP メッセージは IP でカプセル化され、IP ヘッダーのプロトコル番号は 2 であり、TTL フィールドの値は通常 1 です。なぜなら、IGMP はホストと接続されたルーターの間で機能するからです。
IGMP の動作メカニズム
IGMP は 3 つのバージョンに分かれており、IGMPv1、IGMPv2、IGMPv3 があります。
次に、IGMPv2 を例にとり、通常のクエリと応答、マルチキャストグループからの退出の 2 つの動作メカニズムについて説明します。
- 通常のクエリと応答の動作メカニズム
- マルチキャストグループからの退出の動作メカニズム
状況 1、ネットワークセグメントにまだそのマルチキャストグループが存在する場合:
状況 2、ネットワークセグメントにそのマルチキャストグループが存在しない場合: