next up previous contents
Next: 3.2.3.5 パラメータ問題 Up: 3.2.3 従来から引き継いだ機能 Previous: 3.2.3.3 パケットサイズ超過

3.2.3.4 時間超過

宛先に到達できずパケットが永遠にネットワーク上を彷徨うことがないように、 ある一定の数のルータを経由したらパケットは捨てられるようになっています。 IPv4ではこれをTTL(Time To Live)と言い、最初はルータの内部経過時間を パケットに最初に書き込まれた値から引くようになっていましたが、その後 実際にはルータ内部経過時間は常に1として扱われるようになりました。 IPv6では、この現行仕様を正式に採用し、最大ホップ数(Hop Limit)として 定義しています。パケットのヘッダに書かれる最大ホップ数の最大値は ヘッダに定義されたビット長で決まり、255(1byte長)になっています (勿論、ホストが255を使わなくても良く、64などでも構わない)。この最大 ホップ数は、ルータを通るごとに、ルータが1だけ減らすことになっているが、 この値が0になったパケットは破棄され、ICMPv6 時間超過メッセージが 送信元に送り返されることになっている。

ちなみに、traceroute6はこの仕組みを巧みに利用し、最初は Hop Limit を1に して宛先に向かってUDPパケットを送信します。勿論、宛先が1ホップ以上遠方 ならば、最初のルータでこの値は0になるために、ICMPv6時間超過メッセージ を送信元は受け取ることになります。そして、このメッセージの送信アドレスは まさしくルータそのものであるために、宛先に至る経路の最初のルータが 発見できる訳です。traceroute6はこのようにして、順にHopLimitを大きくしながら 、宛先に到達するまでこの手続きを繰り返し、宛先への経路上のルータを 調査します。但し、この仕組みから分かるとおり、あくまでも往路であり、 復路が異なっている場合には、宛先から送信側にtraceroute6を行わない限り、 復路は分かりません。また、往路であっても、負荷分散のために経路が 自動的に変わるような場合には、正しくない結果が得られる場合があります。



Noriyo Kanayama