目次
1はじめに
「IPプロトコル詳細説明」の紹介記事では、IPプロトコルは信頼できるプロトコルではなく、データが配信されることを保証するものではありません。当然、データ配信を確実にする作業は他のモジュールで行う必要があります。重要なモジュールの1つは、インターネット制御メッセージプロトコル(ICMP)です。
まず第一に、ICMPはデータが確実に配信されるようにするための重要なモジュールにすぎず、IPプロトコルの信頼性の欠如を完全に解決するわけではありません。ICMPによって解決される問題は次のとおりです。
1. IPプロトコル自体は、データグラム配信の有効性を確保するためのエラー報告およびエラー制御メカニズムを提供しません。ルーターがデータグラムを配信できない場合、またはデータグラムの有効期間が0の場合、ルーターはデータグラムを直接破棄します。ルーターのIP層は、このような処理は妥当であると考えていますが(データグラム処理の効率を向上させることができます)、多くの場合、送信元ホストは、再送信またはその他の処理のための異常なデータグラム配信の場合に関連する障害情報を取得することを期待します。
2. IPプロトコルには、補助メカニズム、つまりホストの管理およびクエリメカニズムがありません。場合によっては、送信元ホストは別のホストまたはルーターがアクティブかどうかを判断する必要があります。非アクティブなホストの場合、これは無駄なので、データグラムを送信する必要はありません。その他の場合、ホストの管理者は、ホスト自体を構成し、この情報に基づいてデータグラム送信を制御するために、別のホストまたは古いルーターに関する情報を取得することを期待します。
TCP / IPの階層構造の観点からは、IPプロトコルのようにネットワーク層にありますが、ICMPプロトコルには独自のメッセージ形式のセットがあり、メッセージを配信するにはIPプロトコルを使用する必要があります。 ICMPメッセージはPデータグラムのデータ領域に配置されて送信されます。この観点から、ICMPメッセージの目的は宛先ホスト上のアプリケーションではないため、ICMPプロトコルはトランスポート層プロトコルに少し似ています。アプリケーションに伝送サービスを提供しません。ICMPメッセージの目的は、宛先ホスト上のネットワーク層処理ソフトウェアです。
この時点で、さまざまな資料からさまざまな意見を見つけました。これはこの記事の焦点ではありません。この記事では、ICMPプロトコルデータのどの層についての見解を持っていません。
02、合意構造
ICMPデータパケットは、8ビットエラータイプと8ビットコードおよび16ビットチェックサムで構成されています。チェックサムアルゴリズムは、IPヘッダーチェックサムアルゴリズムと同じです。最初の16ビットは、ICMPによって送信される情報を構成します。
機能区分から、ICMPメッセージは2つのカテゴリに分類できます。ICMPエラーレポートメッセージとICMPクエリメッセージで、上記の2つの問題を解決するために使用されます。
エラーレポートメッセージは、主にIPデータグラムの送信元ホストにエラーレポートメッセージを返すために使用されます。このエラーレポートメッセージの理由は、ルーターまたはホストが現在のデータグラムを正常に処理できないためです。たとえば、データグラムを配信できません。有効なプロトコルに変換します。上位層では、存続時間TTLが0であるため、データグラムが削除されます。
クエリメッセージは、特定の情報について別のホストにクエリを実行するために1つのホストによって使用されます。通常、クエリメッセージはペアで表示されます。つまり、ソースホストがクエリメッセージを開始します。宛先ホストがメッセージを受信すると、合意されたクエリ形式に従います。メッセージは、送信元ホストが応答メッセージを返すことです。
ほとんどの場合、間違ったパケット送信でICMPメッセージが表示されますが、特別な場合には、ICMPエラーメッセージは生成されません。次のように
-
ICMPエラーメッセージはICMPエラーメッセージ(IMCPクエリメッセージ)を生成しません(IMCPの無制限の生成と送信を防ぐため)
-
宛先アドレスは、ブロードキャストアドレスまたはマルチキャストアドレスを持つIPデータグラムです。
-
リンク層でブロードキャストされるデータグラムとして。
-
IPフラグメンテーションの最初の部分ではありません。
-
送信元アドレスは、単一のホストのデータグラムではありません。これは、送信元アドレスをゼロアドレス、ループバックアドレス、ブロードキャストアドレス、またはマルチキャストアドレスにすることはできないことを意味します。
現在、一部の規制はあまり明確ではありませんが、これらの規制はすべて、ICMPメッセージの無制限の伝播を防ぐために定義されています。
03、エラーメッセージ
上の図からわかるように、エラーメッセージにはさまざまな種類があります。この記事では、宛先の到達不能メッセージとデータグラムタイムアウトメッセージに焦点を当てます。
3.1 。宛先ステーションに到達できません
ルータがデータグラムに適したルーティングパスを見つけられない場合、またはホストがデータグラムを上位層プロトコルに配信できない場合、対応するIPデータグラムは破棄され、宛先ステーションに到達できないエラー制御メッセージが送信元ホストに返されます。 。宛先ステーション到達不能エラーは、ネットワーク到達不能、ホスト到達不能、プロトコル到達不能、ポート到達不能など、多くの要因によって引き起こされる可能性があります。特定の理由は、メッセージヘッダーのコードフィールドで指摘できます。
コードフィールドはエラーの原因を記録します.ICMP宛先到達不能メッセージのデータ領域に、IPデータグラムのヘッダーと宛先ステーションが到達不能になった原因となったデータグラムデータ領域の最初の8バイトがロードされます。ソースホストがこれを受信すると、ICMPメッセージの後に、メッセージのデータ領域のデータに基づいて、どのデータグラムに問題があるかを判断できます。エラーの原因となったデータグラムのデータ領域の最初の8バイトをロードする必要があるのはなぜですか?これらの8バイトはTCPメッセージまたはUDPメッセージのポート番号フィールドをカバーしているだけなので、IP層はそれに応じてICMPを配置できますこのポート番号へメッセージは処理のために特定の上位層に渡されます。
次の図は、宛先ステーションの到達不能コードフィールドの一般的な値と意味を示しています。
速達に似た、いくつかの鮮やかなことわざがあります
-
ネットワークに到達できません:コミュニティが見つかりませんか?
-
ホストに到達できません:コミュニティは見つかりましたが、家番号が見つかりませんか?
-
合意に達することはできません。コミュニティを見つけ、家番号を見つけますが、名前は正しくありません。私の名前はWang Xiaoerで、宅配便の名前はWangXiaosanです。
-
ポートにアクセスできません。コミュニティを見つけ、家番号を見つけ、名前は正しいですが、問題があります。宅配便をオンにして、誰かがテレビを購入しました。これは冷蔵庫です。
3.2データグラムタイムアウト
データグラムタイムアウトを使用して、データグラムがネットワークにルーティングされないようにすることができます。Pヘッダーには存続可能時間カウンター(TTL)があります。データグラムが転送されるたびに、TTL値は1ずつ減少します。 TTL値は0に減少すると、データグラムはネットワークによって破棄され、ICMPタイムアウトメッセージが送信元ホストに返されます。
データグラムタイムアウトコードフィールドの値と意味
04、クエリメッセージ
一般的なICMPクエリメッセージは次のとおりです。エコー要求または応答、ルーターのクエリとアナウンス、タイムスタンプ要求または応答、情報要求または応答、アドレスマスク要求または応答。
クエリメッセージの目的は次のとおりです。
-
pingクエリ
-
サブネットマスククエリ
-
タイムスタンプクエリ(時刻の同期に使用できます)
その中で、サブネットマスククエリは主にホストの起動時に使用されていましたが、ホストはネットワーク環境で自身のIPアドレス、アドレスマスク、ルーターのステータスなどの情報を確認できます。これで、DHCPプロトコルはこれらの機能を完全に実装できるようになります。記事はそれを説明しません。
4.1 、ping
pingはICMPの最も有名なアプリケーションと言えます。pingという言葉はソナーポジショニングに由来し、このプログラムの機能も同様です。ICMPプロトコルパケットを使用して、別のホストが到達可能かどうかを検出します。ブラウザを開かず、ホストが特定のWebサイトにアクセスできるかどうかを確認したい場合は、通常、このWebサイトにpingを実行します。pingはいくつかの有用な情報をエコーします。一般的な情報は次のとおりです。
pingの原則は、タイプコード8のICMPで要求を送信することであり、要求されたホストはタイプコード0のICMPで応答します。pingプログラムは、間隔時間を計算し、配信されたパケットの数を計算します。その後、ユーザーはネットワークの一般的な状況を判断できます。pingが送信時間とTTLデータを提供していることがわかります。ルートが少なく、パケット損失がなく、遅延が少ないため、真上でBaiduにpingを実行しました。興味がある場合は、sf.NETなどの外部Webサイトにpingを実行し、パケット損失現象を観察して、プログラムを実行しています。時間が長くなります。
Wiresharkはパケットをキャプチャし、pingで使用されるICMPプロトコルを分析します
ここでwiresharkのキャプチャファイルを共有してください。自分で分析できます。
クリックしてダウンロードします。ダウンロードコインをお持ちでない場合は、記事の最後にある公式アカウントをフォローして入手できます。
pingを使用すると、ホストから宛先ホストまでのルートを確認することもできます。これは、ICMP ping要求データグラムがルーターを通過するたびに、ルーターが独自のIPをデータグラムに配置するためです。宛先ホストは、このIPリストを応答ICMPパケットにコピーして、ホストに送り返します。ただし、いずれの場合も、IPヘッダーが記録できるルーティングリストは非常に限られています。ルーティングを監視する場合でも、Traceroute(Windowsの下の名前はtracertと呼ばれます)というより優れたツールを使用する必要があります。
4.2 、Traceroute
Tracerouteは、ホストと宛先ホスト間のルーティング状況を検出するために使用される重要なツールであり、最も便利なツールでもあります。VanJacobsonによって作成されたTracerouteプログラムは、TCP / IPプロトコルをより詳細に調査できる便利で使いやすいツールです。送信元から宛先に送信される2つの連続するIPデータグラムが同じルートを持つという保証はありませんが、ほとんどの場合、これが当てはまります。Tracerouteプログラムを使用すると、IPデータグラムが1つのホストから別のホストにたどるルートを確認できます。Tracerouteプログラムでは、IPソースルーティングオプションを使用することもできます。
前述のように、pingツールは検出も実行できますが、IPヘッダーの制限により、pingは通過するルーターを完全に記録することはできません。したがって、Tracerouteはこの欠点を埋めるだけです。
Tracerouteの原理は非常に興味深いものです。宛先ホストのIPを受信した後、最初にTTL = 1のUDP(UDP)パケットを宛先ホストに送信し、通過する最初のルーターがこのパケットを受信します。将来的には、TTLは自動的に1減少し、TTLが0になると、ルーターはパケットを破棄すると同時に、ホストがホストに到達できないというICMPデータグラムを生成します。このデータグラムを受信した後、ホストはTTL = 2のUDPデータグラムを宛先ホストに送信し、次に2番目のルーターを刺激してICMPデータグラムをホストに送信します。宛先ホストに到達するまで、この方法を繰り返します。このようにして、tracerouteはすべてのルーターIPを取得します。これにより、ipヘッダーが限られたルーティングIPしか記録できないという問題を回避できます。
オフィスの私のネットワーク
IP192.168.0.105のPCで実行すると
tracert 192.168.2.1
以下に示すように
Wireharkはパケットをキャプチャし、IP192.168.0.105のPCが最初にTTL1のICMPパケットを送信したことを示します。
備考:
tracertコマンドの実行時間が長いため、wiresharkはPCの他の通信のデータパケットを取得しました。これは、icmpでフィルタリングする必要があります。
PCのデータパケットのみを取得しました。条件があれば、192.168.0.1のゲートウェイを使用してWANポートのデータを取得できます。ポートミラーリングを備えたスイッチを備えた別のPCを使用して、PCのデータを取得できます。 WANポート。
ここでは、wiresharkのキャプチャファイルを共有します。他のキャプチャされたデータを分析できます。
クリックしてダウンロードします。ダウンロードコインをお持ちでない場合は、記事の最後にある公式アカウントをフォローして入手できます。
上記の私のテストには2つのレベルのルーティングしかないため、Baiduを直接テストできます。
最終的なIPをテストできます。このIPはBaiduサーバーのIPです。このIPは、異なるホストおよび異なるリージョンに存在する必要があります。試してみることができます。
赤いボックスのアスタリスクは、一部のルーターがこのICMPをまったく返さないためです。これは、Tracerouteを使用してパブリックネットワークアドレスをテストするときに中間ルートが表示されない理由でもあります。
誰かが尋ねるかもしれません、UDPが宛先ホストに到達していないことをどうやって知ることができますか?これにはスキルの問題が伴います。TCPおよびUDPプロトコルにはポート番号の定義がありますが、通常のネットワークプログラムは、23などの80などの小さい番号のいくつかのポートのみを監視します。Tracerouteは、ポート番号が30000を超える(実際には異常な)UDPパケットを送信するため、宛先ホストに到達すると、宛先ホストは、到達不能なポートを持つICMPデータグラムのみをホストに送信できます。このレポートを受信した後、ホストはホストが到着したことを認識しているため、Tracerouteが嘘つきであると言っても過言ではありません。
05、ICMPフラッド
「IPプロトコル詳細説明」ではIP攻撃について説明し、「ARPプロトコル」ではARP攻撃について説明しました。ICMPフラッドについて話しましょう。
十分に速いデータパケット速度+十分な帯域幅、これはフラッドです。洪水は、その名前が示すように、非常に高速です。プログラムが1秒あたり1,000を超える速度でデータパケットを送信すると、その性質は洪水ジェネレータになります。洪水データは洪水ジェネレータから取得されますが、それでも十分ではありません。十分な帯域幅がなければ、どんなに激しい洪水でも、道路の渋滞のようにゆっくりとしか移動できず、味のないものになります。実際のフラッドを実行するには、ICMP要求を許可するのに十分な幅の高速道路で、各要求を処理して応答を送信するためのサーバーリソースが必要です。要求には、着信メッセージ(要求への応答)と発信応答(応答応答)の両方の帯域幅も必要です。
ICMPフラッドが全能であるとは思わないでください。実際、フラッド攻撃を開始すると、攻撃プログラムは相手の帯域幅とリソース、および帯域幅とリソースを消費します。これは、誰がそれを維持できるかを確認するための単なる攻撃です。
ICMPフラッドを防ぐ方法:
-
ルータ上のICMPパケットの帯域幅を制限し、ICMPが占有する帯域幅を特定の範囲内に制御して、ICMP攻撃があったとしても、占有する帯域幅が非常に制限され、ネットワーク全体への影響が大きくなるようにします。非常に少ない;
-
ホストにICMPパケット処理ルールを設定します。許可されている場合は、すべてのICMPパケットサービスを拒否できます。
この記事が掲載されているアルバム、STM32F207ネットワーク開発を表示するにはクリックしてください
公式アカウントに注意を払い、できるだけ早く記事の更新を受け取ります。