アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

こちらを読めば解決しますよ。


http://www.tef-room.net/main/icmp.html
下のほうにある「TTLってなに?」を読んでください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!