到達不可能

ICMP : 目的地到達不可能

 目的地到達不可能というメッセージは、フレームが最終目的地に到達しなかったために捨てられた、ということを示しています。 通信経路上にあるルータがフレームを捨てたか、あるいは、最終目的地のコンピュータがフレームを処理しなかった結果、生じます。 また、宛先ホストのプログラムが利用可能でないという場合も考えられます。例えば、Telnet を提供していないファイルサーバに Telnet しようとしたような場合や、 NFS を提供していないホストに NFS をしようとした場合に生じます。こういったことが目的地到達不可能メッセージの発生源となります。 目的地到達不可能メッセージが送られるということは、送信側が指定した目的地に到達しなかったということです。 このメッセージによって障害解決の機会が生まれます。ICMP 目的地到達不可能メッセージが送られてきたところが、障害発生地点となります。

 このメッセージ発生には6つの理由があります。その内の3つはありふれていますが、重要なものです。残り3つは滅多に起こらず、それほど重要でもありません。

  1. ネットワーク到達不可能
  2. ホスト到達不可能
  3. ポート到達不可能
  4. プロトコル到達不可能
  5. フラグメントが必要なのにフラグメント禁止ビットが設定されてる
  6. 始点で指定した経路の障害

 まず重要な3つのメッセージについて説明します。

ネットワーク到達不可能−ルータのどれかによって送られた
ホスト到達不可能−経路の最後のルータによって送られた
ポート到達不可能−目的地ネットワークの目的ホストによって送られた


ネットワーク到達不可能


 宛先 IP アドレスで指定されたネットワークやサブネットへ到達する経路がないとき、ルータはネットワーク到達不可能というメッセージを送ります。 宛先とは、ルータに設定されたアドレスマスクを使って計算されるアドレスの位置決め部分のことです。 つまりネットワーク到達不可能メッセージは、ルータのマスク値の誤設定の結果生じることがあります。 ユーザがコマンドラインやアプリケーションから、ありえないネットワークを指定するということは、愚かなことではありますが、起こりうることです。 140.6.0.0 というネットワークがないのに、140.6.15.3 に対して Telnet を行えば、ルータは最終的にはそのネットワークがないということを示すため、ネットワーク到達不可能メッセージを返します。 フレームは、デフォルトゲートウェイからデフォルトゲートウェイへ送られ、ついにはどこへも行き場所がないことがわかります。
最後のルータが目的地到達不可能−ネットワーク到達不可能メッセージを送ります。 リンクがダウンしているか、インターフェイスが障害(障害ポート)であるような場合、そのリンクやポートの先につながっているネットワークは、 到達不可能になります(他の経路を通って到達することができないとするならばです)。

要約:ネットワーク到達不可能

  1. 指定された目的地アドレスは有効なものですか?
  2. ルータの先のリンクがネットワーク到達不可能メッセージを送っているのでしょうか?
  3. ルータのポートに正しいアドレスマスク値が設定されていますか?


ホスト到達不可能


 ホスト到達不可能メッセージを送るルータというのは、目的のホストが存在するネットワークに直接接続されているルータのことです。 フレームは発信元を出てルータからルータへと渡され、経路の最後のルータ−目的のネットワークがどポートのどれかに接続されている−へ到達したということです。 すると、この最後のルータはホストのデータリンクアドレスを探すために ARP フレームをブロードキャストします。 ルータが ARP を送信したにもかかわらず応答が得られなかった場合に、ルータは発信元に目的地到達不可能−ホスト到達不可能メッセージを返します。 ホスト到達不可能メッセージは、途中の通信インフラは適切に動作していることを示しています。 フレームは相互接続された経路を転送されて行き、経路の最後のルータまで、きちんと到着しました。 ルータはネットワークケーブルに ARP を出し、出すことには成功しました。 けれど、ARP に対する答えはありませんでした。 最後のインターフェイスと最後のネットワークセグメントを含むすべての通信経路は、適切に動作しています。 ホストがそこにないだけなのです。

 ホスト到達不可能メッセージは、ユーザが間違った IP アドレスを指定した結果起こることがあります。 ホストがダウンしているか、オフライン状態であるかもしれません。目的ホストが接続されているネットワーク上の物理エラーの割合が高いのかもしれません。 (けれどこの推測は、ルータが ARP を出しているところをみると当たってないかもしれません。) どちらにせよ、障害を解決するためには、ホストの位置するネットワークにプロトコルアナライザを設置し、何が起こっているのかを見ることが必要です。

要約:ホスト到達不可能

  1. 間にある通信インフラは適切に動作していると言えます。
  2. アドレスはホストの正しいアドレスでしょうか?
  3. ホストは現在オンラインでしょうか?動作中でしょうか?
  4. 目的地ネットワークに、何らかの物理的障害があるのでしょうか?


ポート到達不可能


 ネットワーク到達不可能とホスト到達不可能メッセージがルータから来るのとは違って、ポート到達不可能メッセージはホストから来ます。 フレームは通信インフラを通って転送は成功しました。最後のルータはホストに対して ARP を出し、応答を受取りました。 その上、宛先ホストはオンラインであり、フレームを通信バッファに取り込まれました。 そしてフレームが TCP、UDP、RIP、OSPF その他のプロトコルによって処理されました。 プロトコル( TCP または UDP )が、データを宛先ポート番号( TCP または UDP ポート)へ送ろうとしたところ、そのポートがありませんでした。 そこでプロトコルハンドラが、目的地到達不可能−ポート到達不可能メッセージを報告しました。

 ポート到達不可能は、SNMP がネットワーク上のたくさんのデバイスにポーリングをかけたときに、発生することが多いようです。 SNMP ホストが、ネットワーク管理データに基づいて IP アドレス群に対しポーリングをかけるように設定されているとします。 それぞれの管理対象デバイスは、SNMP エージェントプログラムによって割り当てられたポート番号で管理されます。 標準的な SNMP のポート番号は 161 です。つまり「ポート番号 161 に対して到達不可能である」というメッセージを見かけたら、 それは SNMP エージェントが実装されていないデバイスにポーリングをかけている、と考えることができます。

 NetBIOS(ポート番号 513 )の提供されていないサーバにコネクションを張ろうとしてもポート到達不可能となります。 NFS のないサーバのファイルをマウントしようとしても同じ結果になります。

 ポート到達不可能の障害を解決するためには、指し示されたポート番号について知る必要がああります。 どのポート番号が何に使われているのかは、RFC 1700(ウェルノウンポート表)を見れば簡単にわかります。 アプリケーションプログラムに固有のポート番号を知るのは簡単ではありません。

 ポート到達不可能のせいだろうと思われる奇妙なエラーがあります。それはポート到達不可能によって、それまで正常だったやりとりが中断するというものです。 やり取りを観察してみると、到達不可能のポートが問題なく動作しているのがわかります。 フレームはそのポート番号を使って正常に通信をしているのに−急にそのポートが使えなくなります。 これはそのホストが過負荷状態にあったか、または優先順位をつけて処理を行うことによって生じた問題であることを示しています。 問題のプロセスはメモリ上にスワップアウトされましたが、到達不可能を避けるほど早くスワップから戻ってこなかったということを示しています。

 途中の通信インフラが適切な動作していることや、宛先ホストのプロセッサ状態の確認ができるのが、このメッセージのよいところです。

要約:ポート到達不可能

  1. ホストと通信インフラは適切に動作しています。
  2. ICMP ポート到達不可能メッセージはホストで作られます。ルータでではありません。
  3. そのポートは動作していないか、スワップアウトされたことを示します。SNMP( 161 )に関するメッセージはよく見られるものです。
  4. 何のためのポートで、なぜ利用不可能かを見付け出すようにしましょう。


他の ICMP 目的地到達不可能メッセージの理由


 以下は滅多に見られないので、これを見かけたら注意すべきです。以下がそれです。

プロトコル到達不可能
フラグメントが必要なのにフラグメント禁止ビットが設定されている
始点で指定した経路の障害

 プロトコル到達不可能メッセージは、第3層の特定プロトコルに到達しないという点が、ポート到達不可能メッセージと異なります。 たとえば、OSPF フレームが RIP で動作しているルータに送られたような場合に発生します。 そのルータは第4層の OSPF 機能を持っていないので、プロトコル全体が到達不可能となります。 ICMP フレームを調べて、どのようなプロトコルが使おうとしたのかを知ることが必要です。 そのデバイスは−正常なのかもしれませんし、障害があるのかもしれませんが−そのプロトコルを提供していないということです。

 ポート到達不可能メッセージは、第4層プロトコルで使われているポートがないということを言っているのですが、 プロトコルそのものは動作していることを思い出しましょう。プロトコル到達不可能メッセージは第4層のプロトコルそのものがないということです。

 ルータがフラグメントが必要なのにフラグメント禁止ビットが設定されていると言うことは、 発信元のステーションが発信元ステーションだけが知る何らかの理由で IP のフラグフィールドのフラグメント禁止ビットを設定したということです。 このフレームが通信インフラを経由し、フラグメントを必要とするルータに到着しました。 (これはおそらくフレームが、最大フレームサイズの設定値が、それまでよりも小さな値になっているルータに到着したということです。) しかし設定されたビットがフラグメントを禁止しているので、フラグメントができません。 そこでフレームは捨てられ、ICMP が発信元に返されました。