No.2
- 回答日時:
ICMPは、ルータを経由するたび、TTL(Time To Live)フィールドの値が1つ減る事が期待されています。
ICMP Echo Requestを受け取った相手は、ICMP Echo ReplyのTTL(Time To Live)フィールドに、以下の何れかの値をセットしてping元に返送します。
・Echo RequestのTTLフィールドの値をそのままセット(古いBSD Unix)
結果「ping元がセットしたTTLの値-往復で通過したルータの個数」が返って来ます。
・255をセット(今のBSD Unix、Linuxなど)
結果「255-復路(帰り)で通過したルータの個数」が返って来ます。往路(行き)のルータの個数は含まれません。
・128をセット(Windowsなど)
結果「128-復路(帰り)で通過したルータの個数」が返って来ます。往路(行き)のルータの個数は含まれません。
・60をセット(ルータ、ネットワーク機器などや、一部のBSD Unix)
結果「60-復路(帰り)で通過したルータの個数」が返って来ます。往路(行き)のルータの個数は含まれません。
TCP/IP規格では、TCPパケットのTTLフィールドは60に設定すべきとしている為、ICMPのTTLフィールドも60に設定している機器が多い為。
・30をセット(一部のBSD Unix)
結果「30-復路(帰り)で通過したルータの個数」が返って来ます。往路(行き)のルータの個数は含まれません。
一部のBSD UnixなどではTCP/IPのTCPパケットのTTLフィールドを30に設定しているシステムが多く、ICMPのTTLフィールドも30に設定しているシステムがある為。
・32とか64とか、その他の値をセット(特殊な機器、一部のBSD Unix)
結果「その他の値-復路(帰り)で通過したルータの個数」が返って来ます。往路(行き)のルータの個数は含まれません。
「その他の値」が幾つなのかがping元に判らない場合、幾つのルータを経由して来たかは判りません。
このように、ping先の正体が判明しないと、相手がTTLフィールドに幾つの値をセットして来たか判りません。
例えば、pingした結果「TTL=126」と表示されても「相手がLinuxで、応答時にTTLに255がセットされ、その後、129個のルータを経由して返って来た」のか「相手がWindowsで、応答時にTTLに128がセットされ、その後、2個のルータを経由して返って来た」のか、どっちなのか区別できません。
こういう場合は、pingを打つ際のICMP Echo RequestのTTLを、5とか10とか、極端に小さい値にして試します。
もし「相手がLinuxで、応答時にTTLに255がセットされ、その後、129個のルータを経由して返って来た」のなら、pingを打つ際のTTLが5とか10とかにすれば、途中の130個近くのルータを経由する前に、途中で「相手に届きませんでした」と言う応答が返って来ます。
もし「相手がWindowsで、応答時にTTLに128がセットされ、その後、2個のルータを経由して返って来た」のなら、pingを打つ際のTTLが5とか10とかであっても、途中のルータがたった2個なら乗り越えられる筈で、相手から正しい応答が返って来る筈です。
このように、TTLとは「経路上のルータの個数など、途中の経路の状態を知る手掛かり」として必要なのです。
TCP/IPパケットが相手に届かない理由を調べる時、pingでのTTL表示を見れば、途中の経路のルータ数が予測出来ます。
その時、もし「どうやら、途中に30個を超えるルータが入っているようだ」と予測出来たら「TCP/IPパケットのTTLが30になっているのが相手に届かない原因らしい」と推測出来ます。
そして「TCP/IPのTTLを30から60に変更して送ってみる」と言う対処を行う事が可能です。
pingにTTLの表示が無ければ「届くか、届かないか」しか判りませんが、TTLが表示されていれば「届くか、届かないか」と同時に「届かない場合、どうして届かないのか」も推測する事が可能になるのです。
No.1ベストアンサー
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- HTML・CSS ホームページにブログ記事をサムネイル付きで掲載する方法 2 2022/11/25 14:55
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つ目のレコードの値を取得す...
-
DataTableに特定のフィールドが...
-
日付と文字列を条件としてDLook...
-
Access VBA 添付型フィールド
-
criteria の読み方
-
Access 2010で実行時エラー3061
-
Accessの画像挿入のVBAコード
-
テーブルのデータ型の変更がで...
-
ACCESSで日別集計をする場合
-
Accessのフィールド名に半角括...
-
クリスタルレポートで困ってい...
-
ACCESSのエラー
-
NULLを含む文字列の結合で...
-
2次元のdictionary
-
アクセス 横スクロールの分割
-
accessでフィールド追加のあと...
-
VB6+ADO(EXCEL)についてお教え...
-
ACCESSで視覚的タイムテーブル...
-
VBA 変数名に変数を使用したい。
-
WORD VBA プログラム修正をお願...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
accessでフィールド追加のあと...
-
INT64対応のprintf系関数はあり...
-
2つ目のレコードの値を取得す...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
AccessのDAOでフィールド名を配...
-
SQLで複数のテーブルと結合した...
-
テーブルのデータ型の変更がで...
-
フィールド名をループの添え字...
-
クリスタルレポート(8.5)の書式...
-
AccessVBAで他テーブルのデータ...
-
アクセスでADO 並べ替えが適用...
-
Accessの画像挿入のVBAコード
-
NULLを含む文字列の結合で...
-
クリスタルレポートで文字列の...
-
ACCESSデータベースにV...
-
ノーツ:ユーザ名から別名を取...
-
Access クエリで変数を参照する...
おすすめ情報