ICMP プロトコルがネットワーク内で最も強力な補助手段であるのはなぜですか?

今日は ICMP プロトコルについて話しましょう。ICMP はネットワーク界で最も強力なサポートと言えます。IP データ パケットが途中で事故に遭遇した場合、ICMP に依存して通知されます。パケットは正常に送信されましたか? そうでない場合、その理由は何ですか?失敗?これらはすべて ICMP プロトコルによって通知されます。

ICMP は Internet Control Message Protocol (Internet Control Message Protocol) の略で、ネットワーク層の重要なプロトコルです。

ICMP は何のためにあるのでしょうか?

それはなんのためですか?なぜコントロール メッセージ プロトコルと呼ばれるのでしょうか?また、何を制御するのでしょうか?

ICMP は、クエリ メッセージとエラー メッセージの 2 つのカテゴリに分類されます。ping コマンドなどのクエリ メッセージは当社によって開始され、エラー メッセージはエラー発生後に送信元に送信され、これはインターネット プロトコル モデルで合意されています。

ICMP エラー メッセージのフィードバックは、通信環境で発生するさまざまな問題で発生します。この情報を通じて、管理者は問題を診断し、問題を解決するための適切な措置を講じることができます。

ICMP エラー メッセージは、データ伝送リンク全体の中で非常に重要なリンクです。たとえて言えば、エラー メッセージは悪いニュースだけを伝えるメッセンジャーであり、データ パケットがネットワーク内でずっと妨げられない場合、ICMP エラー メッセージはステルスのようなものであり、さまざまな障害に遭遇した場合にはその存在を知ることはできません。ネットワーク内でこのメッセンジャーが出てきて活動するのですが、その目的はただ一つ、このデータパケットに遭遇した事故を送信者に知らせることですが、単語(エラーコードに相当)は20種類以上しかありません。

たとえば、次の 2 つのシナリオはよく知られているはずです。

  • ルーターが IP データグラムを受信して​​も転送できない場合、ICMP「ホストに到達できません」エラー メッセージを送信します。

  • IP データグラムを別のルータに送信する必要がある場合、データグラムを受信したルータは IP データグラムの送信者に ICMP「リダイレクト」エラー メッセージを送信します。

ICMP プロトコルの説明

ネットワーク層で動作するため、IP プロトコルと並行して動作しているように見えますが、ICMP メッセージには IP ヘッダーが付加されており、一般に IP 層以上のプロトコル (TCP や UDP など) で使用されます。除いて、ICMP プロトコルを直接使用するアプリケーションはほとんどありません pingtraceroute

ICMPプロトコル形式

IP プロトコルや TCP プロトコルと比較すると、ICMP プロトコル形式は依然として非常に単純です。

タイプ

タイプ フィールドは 8 ビットを占め、主にメッセージの一般的なカテゴリを定義します。たとえば、タイプ 3 は Yes を意味し不可达、具体的な理由はコード フィールドによって決定されます。

コード

コード フィールドも 8 ビットを占めます。コード フィールドは、実際にはタイプの下のサブタイプです。たとえば、上記でタイプが 3 は到達不能、コードが 0、ネットワークが到達不能、コードが 1 であると述べています。ホストに到達できません。

チェックサム

これは、IP プロトコルのチェックサムと一致するエラー チェックに使用されます。

コンテンツ

タイプとコードが異なるということは、エラーの理由が異なることを意味し、エラーの理由ごとに対応する記述が必要であり、コンテンツ部分はエラーの理由を記述するために使用されます。

次にいくつかの例を示します。

下の図は、ICMP のクエリメッセージとエラーメッセージを分類したもので、オリジナルの Excel が必要な学生は、返信して ICMPソース ファイルを入手できます。

宛先に到達不能のエラー メッセージ

宛先に到達できないという問題は、ネットワーク伝送でよく発生する問題であり、開発プロセス中、特に間違った IP への接続や間違ったポートの設定などのネットワーク プログラミングを行っているときに遭遇したことがあるかもしれません。

上の表から、タイプが 3 の場合、それは到達不能エラーであり、コードの範囲は 0 から 15 まであります。つまり、到達不能には 16 の具体的な理由があることがわかります。この場合のプロトコルフォーマットは以下の通りです。

タイプ 3、コード 0 ~ 15。チェックサムの後には使用されない 4 バイトのスペースがありますが、理由はなく 0 でなければなりません。それだけです。

先ほども述べたように、種類やコードによってコンテンツ部分が異なります。宛先に到達できない場合、つまりタイプが 3 の場合、コンテンツは 2 つの部分、IP ヘッダーと元の IP データグラムのデータ部分の最初の 8 バイトに分割されます。

元の IP データグラムのデータ部分は、 TCP または UDP のネットワーク層より上のプロトコルを指します。TCP を例にとると、TCP はトランスポート層にあります。TCP データグラムがネットワーク層に到達すると、IP ヘッダーとIPデータパックになります。ここで言うデータ部分は TCP データグラムですが、このデータグラムは非常に大きい可能性があるため、最初の 8 バイトに含まれる情報で十分であるため、最初の 8 バイトだけで十分です。

TCP プロトコルの形式を思い出してください。最初の 8 バイトは、送信元ポート、宛先ポート、シリアル番号を含む、下図の赤いボックスです。

たとえば、コードが 3 の場合、ポートに到達できないというエラー メッセージが表示されます。TCP プロトコルの最初の 8 バイトを使用すると、エラーの原因となった元のデータ メッセージ内の宛先ポートと、到達不能なポートを知ることができます。このポートです。また、元のパケットの送信元ポートが何であるかを知ることもできます。送信元ポート番号を使用すると、どのユーザー プロセスがデータ パケットを送信したかがわかり、そのデータ パケットをこのプロセスに引き渡してエラーを適切に処理することができます。

ソース ポート番号は、関連するユーザー プロセスの重要な指標です。たとえば、2 つのポート 8888 と 8898 を占有するアプリケーションを開発しました。アプリケーションがインストールされているマシンがエラー メッセージを受信した場合、エラー メッセージの内容はその後元のデータ パケットの一部の最初の 8 バイトを分解すると、送信元ポートが 8898 であることがわかり、これが開発したアプリケーションによって処理されることがわかります。

以下は、WireSharek によって検出された形式のポート到達不能エラー メッセージです。

未開封のポートに Telnet を実行すると、ICMP ポート到達不能エラー メッセージが表示されます。

クエリメッセージ

ICMP がクエリ メッセージとして使用されるシナリオは比較的少数です。ICMP をクエリ メッセージとして使用する意味は、ARP プロトコルまたは TCP プロトコルを使用するのと同じです。これは弊社によって開始されますが、ICMP プロトコルが選択されます。

たとえば、 これら 2 つping について tracerouteは後ほど説明しますが、これら 2 つはさらに興味深いものであり、ICMP のアプリケーションにとって非常に賢いものです。

さらに、起動時に独自のサブネット マスクを取得するディスクレス システムとして使用できます。また、サードパーティ システムから現在のタイムスタンプをクエリするために使用することもできます。

それを知ってください。

一部のシナリオでは、エラー メッセージが送信されない

シナリオによっては、ICMP エラー パケットによって引き起こされるブロードキャスト ストームを防ぐために、エラー パケットは送信されません。

  1. ICMP エラー メッセージ自体にエラーが発生した場合、エラー メッセージは送信されません。読むのは少し複雑ですが、TCP、UDPエラーはエラーメッセージを送信しますが、ICMPエラーメッセージはエラーのソースに通知するプロセスで、その後は気にしないでください。そうでない場合は、ソースエンドなど、役に立たない可能性があります。ネットワークケーブルが切れています。ただし、ICMP クエリ メッセージは ICMP エラー メッセージを生成する場合があり、たとえば、ping コマンドの送信中にエラーが発生した場合、送信側はエラー メッセージを受信します。

  2. 宛先アドレスがブロードキャストアドレスまたはマルチキャストアドレス(クラスDアドレス)のIPデータグラムはエラーメッセージを送信しません。

  3. リンク層ブロードキャスト データグラムとして、エラー メッセージは送信されず、ARP は典型的なリンク層ブロードキャスト データグラムです。

  4. それが IP フラグメンテーションの最初の部分ではない場合、エラー メッセージは送信されません。データが長すぎる場合、ネットワーク層はデータを断片化します。これらの断片は実際には同じデータ パケットです。この場合、最初の断片だけがエラー メッセージとともに送信され、他の断片は無視されます。

  5. 送信元アドレスが単一ホストではないデータグラムの場合、エラー メッセージは送信されません。送信元アドレスは、ゼロ アドレス、ループバック アドレス、ブロードキャスト アドレス、またはマルチキャスト アドレスにすることはできません。

要約する

1. ICMP はネットワーク層にありますが、IP ヘッダーを追加する必要があります。

2. ICMP はクエリ メッセージとエラー メッセージに分かれており、主にエラー メッセージが使用されます。

3. ICMP エラーメッセージは、悪い知らせだけを通知するメッセージのようなもので、ネットワーク上でデータグラムに問題が発生した場合、その原因と元のデータグラムの必要な部分が通知内容に含まれます。エラーが発生しました。

4. 場合によっては、ICMP エラー メッセージが送信されません。これは、ネットワーク ストームを防ぐためです。

良いと思ったらオススメを教えてください!公開アカウント「Ancient Kite」、Java 開発者

おすすめ

転載: blog.csdn.net/Z__7Gk/article/details/131533835