
ping コマンドを使用すると、次の結果が得られます (Windows):
C:\>ping example.microsoft.com
Pinging example.microsoft.com [192.168.239.132] with 32 bytes of data:
Reply from 192.168.239.132: bytes=32 time=101ms TTL=124
...
このようなユーティリティのドキュメントでは、TTLは次のように測定されます。ホップICMP仕様によるとRFC792 の翻訳:
有効期間。 生きる時間秒; このフィールドはデータグラムが処理される各マシンで減算されるため、このフィールドの値は少なくともこのデータグラムが通過するゲートウェイの数と同じ大きさである必要があります。
つまり、すべてのホストはTTLを少なくとも1減らす。2番何も言われていないホップではなぜホップが使われるのでしょうか?例えば、MSホストがデータグラムを高速に処理するとどうなるのか?そして仕様ではなぜ何も言及されていないのか?ホップ?
答え1
TTL は、ルーティング ループがある場合にパケットが永久に存続 (およびリソースの消費) するのを停止するように設計されています。
本来、ルータがパケットを処理するのに 1 秒以上かかる場合があります。
ルーターの速度が大幅に向上し、1 秒未満でパケットを処理できるようになった場合、TTL をゼロに減らすのは愚かなことです。そうするとループが止まらなくなるからです。
代わりに、TTL を 1 秒減らします。
この変更は、RFC 1716セクション5.3.1。
IP ヘッダーの Time-to-Live (TTL) フィールドは、データグラムの存続期間を制限するタイマーとして定義されています。これは 8 ビットのフィールドで、単位は秒です。パケットを処理する各ルーター (または他のモジュール) は、経過時間が 1 秒よりはるかに短い場合でも、TTL を少なくとも 1 減らす必要があります。これはよくあるケースであるため、TTL は事実上、データグラムがインターネットを介して伝播できる距離のホップ カウント制限となります。
ルータがパケットを転送する場合、TTL を少なくとも 1 減らす必要があります。パケットを 1 秒以上保持する場合は、1 秒ごとに TTL を 1 減らしてもかまいません。
参照:
TTL フィールドはデータグラムの送信者によって設定され、宛先までのルート上のすべてのホストによって削減されます。
パケットが通過する各ルータは、TTL フィールドから少なくとも 1 カウントを減算する必要があります。