Поле TTL в заголовке IP пакета

Dependences: IP, IPv4, Routing

TTL (Time To Live) — поле в заголовке IPv4 пакета. Оно задает «время жизни» пакета. Каждый маршрутизатор должен уменьшать значение поля TTL при прохождении пакета на единицу. Это приведет к изменению заголовка пакета, следовательно, маршрутизатор должен пересчитать контрольную сумму IP-заголовка.

Изначально поле TTL должно было дополнительно уменьшаться на единицу каждую секунду, пока пакет обрабатывается маршрутизатором. Но в последствии от ежесекундного уменьшения отказались и не всегда упоминают этот факт (факт присутствия в протоколе данного правила). Причина отказа проста — большинство маршрутизаторов, как правило, обрабатывают поток пакетов настолько быстро, что они не задерживаются на секунду.

Когда значение поля TTL достигает 0, маршрутизатор должен отбросить такой пакет. Следовательно имеет место правило: маршрутизатор не пропускает пакеты с нулевым значением поля TTL. В этом действии кроется основное предназначение этого поля — избежание петель маршрутизации. В случае ошибочной маршрутизации, пакет не будет ходить бесконечно по сети, а отбросится через некоторое время.

Пересмотрев предназначение поля TTL, в протоколе IPv6 вместо него было введено новое поле Hop Limit. Hop Limit уже означает не время жизни пакета, а максимальное количество хопов, которое может пройти пакет, перед уничтожением.

На принципе работы маршрутизаторов с полем TTL основывается утилита traceroute. Ее задача — отобразить все хопы по пути следования пакета от источника к назначению. Это достигается следующим образом: утилита начинает отправлять UDP-сегменты на несуществующий порт хоста назначения, в которых значение поля TTL в IP-пакете начинается с 1 и с каждым разом увеличивается на единицу. С каждым разом последующий маршрутизатор откидывает пакет, отправляя уведомление отправителю. Утилита traceroute получает уведомление, откуда берет адрес отправителя (адрес маршрутизатора). Когда же сегмент достигает назначения, то хост отправляет уведомление, что порт недоступен.

Некоторые системы настроены таким образом, что они не отправляют ICMP трафик. В таком случае мы видим time out в выводе утилиты traceroute. Это происходит из-за того, что не приходит уведомление об уничтожении (отбросе) пакета.

Задание 1: Рассмотреть вывод утилиты traceroute в двух случаях: когда параметром передается существующий адрес и когда несуществующий. Почему, в случае несуществующего хоста, traceroute выдает информацию про маршрутизаторы (ведь назначения не существует)? Какими основными принципами маршрутизации это объясняется?
Задание 2: В TCP/IP стеке старой ОС BSD была ошибка, из-за которой система пропускала пакеты со значением TTL=0. В случае, когда на одном из промежуточных маршрутизаторов поставить данную ОС, как изменится вывод утилиты traceroute?

Разные операционные системы могут отправлять пакеты с разным начальным значением поля TTL. Например, Linux берет по умолчанию значение 64, а Windows — 128. Таким образом можно бегло отличить кто является источником трафика (если конечно в сети только ОС с разным значением TTL по умолчанию).

Задание 3: Как определить Internet-провайдеру, что непосредственный клиент раздает свой канал другим машинам своей сети посредством NAT?

Благодарим за статью: Дмитрия Подгорного

Войти