TTL
IPv4ヘッダーにある、パケットがネットワーク上に存在できる期間を制限する値である。ルータが転送するときに少なくとも1減らし、0以下になったパケットは破棄する。
イマシルちゃんの解説
ネットワークの経路が輪になっていると、同じパケットが回り続けてしまうことがあるんだ。
これを防ぐために使うのが、IPv4のパケットの寿命を制限するTTLという値だよ。
パケットの先頭で宛先などを伝えるヘッダーに入っているんだ。
ルータは次の相手へ転送するときに、TTLを少なくとも1減らすよ。
値が0以下になったパケットは破棄するんだ。
経路の設定そのものを直すわけではないけれど、同じパケットがいつまでも回線を使い続けるのを防げるよ。
この解説はわかりやすかったですか?
より深い解説
定義
TTL(Time To Live:生存時間)は、IPv4ヘッダーにある8ビットのフィールドで、パケットがネットワーク上に存在できる期間を制限する。もともとは秒単位の時間として定義されていたが、実際には、ルータがパケットを転送するたびに1を引く「通過できるルータの数」として使われている。
IPv6では、実態に合わせて、同じ役割のフィールドの名前がホップリミット(Hop Limit)に変わった。
動作
1. 送信元が、TTLの初期値(OSによって64、128、255など)を設定する
- ルータは、パケットを転送する前にTTLを1減らす
- TTLが0になったら、ルータはパケットを破棄し、送信元にICMPの時間超過(Time Exceeded、タイプ11)メッセージを返す
TTLが変わるとヘッダーの内容が変わるため、IPv4のルータはヘッダーチェックサムも計算し直す。
traceroute
経路上のルータを調べるtraceroute(Windowsではtracert)は、TTLの仕組みを利用している。
1. TTLを1にしたパケットを送る → 1台目のルータで0になり、時間超過のICMPが返ってくる
- TTLを2にしたパケットを送る → 2台目のルータから返ってくる
- TTLを1ずつ増やしながら、宛先に届くまで繰り返す
返ってきたICMPの送信元アドレスを並べると、宛先までの経路がわかる。
TTLが含まれる場所
TTLは、IPヘッダーのフィールドであり、TCPやUDPのヘッダーにはない。
| ヘッダー | TTLに当たるもの |
|---|---|
| IPv4 | TTL |
| IPv6 | ホップリミット |
| TCP、UDP | なし |
| イーサネット | なし |
イーサネットのフレームにはTTLがないため、レイヤ2でループが起きると、フレームが消えずに回り続ける。これを防ぐのがスパニングツリープロトコルである。
DNSのTTL
DNSのリソースレコードにもTTLがあるが、これは別のもので、キャッシュの有効期間を秒単位で表す。
| TTL | 単位 | 意味 |
|---|---|---|
| IPのTTL | ホップ数(実質) | パケットが通過できるルータの数 |
| DNSのTTL | 秒 | 応答をキャッシュしておける時間 |
DNSのTTLを短くすると、通常のキャッシュを再利用できる期間が短くなり、期限後の問い合わせで変更後の情報を得やすくなる。一方で権威DNSサーバへの問い合わせは増えやすくなる。権威DNSサーバ側で値を変更しても、すでに配られたキャッシュの残り時間が一斉に短くなるわけではない。計画的な移転では元の長いTTLが残る期間を考慮して、切替えより前に短縮する。
DNSの更新だけで、すでに確立したTCP接続が新しいサーバへ移ることもない。情報の更新、接続先の再選択、新しい接続の確立を分けて考える。複数の接続先を登録する場合の切替えは、DNSラウンドロビンの記事で詳しく扱う。
参考資料
実際の試験ではここに出る!全13問
ネットワークスペシャリスト
- 午後Ⅱ
- 午前Ⅱ