• ベストアンサー

ttlについて…

学校の課題でc++でpingを作れと言われました。プログラムを作って表示するところでWindowsで普通にpingを通すとReply form bytes time ttlを表示するので、自分のプログラムもこれらを表示するようにしました。ですが、先生にttlは何故必要なのか?と言われあんまり考えていなかったので答えられませんでした。なぜttlは必要なのですか?少し噛み砕いて教えていただけたら幸いです

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

こちらを読めば解決しますよ。 http://www.tef-room.net/main/icmp.html 下のほうにある「TTLってなに?」を読んでください。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答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が表示されていれば「届くか、届かないか」と同時に「届かない場合、どうして届かないのか」も推測する事が可能になるのです。

すると、全ての回答が全文表示されます。

関連するQ&A