vansickle's shared items

Monday, October 19, 2009

How it's made - Traceroute

Эта утилита используются вами очень часто, но догадываетесь ли вы как она работает, приговаривая "сейчас проверим трасертом"? По сути traceroute - это тот же пинг (не зря они часто совмещены в одной программе), т.е. программа, посылающая ICMP-пакеты, но использующий такой параметр IP-пакета как TTL.

Этот числовой параметр пакета каждый роутер при прохождении пакета через себя уменьшает на 1, а в случае если TTL пакета при этом становится равным 0 (т.е. весь лимит израсходован) - посылает сообщение ICMP Time Exceeded в ответ.

image

Таким образом меняя это число мы можем изучить все шлюзы, через которые лежит путь до хоста. Сначала задаем 1 - таким образом наш локальный роутер при прохождении пакета уменьшает значение до 0 - и посылает нам Time Exceeded - смотрим источник ответа - это первый шлюз.

Tracing route to yandex.ru [213.180.204.11]

over a maximum of 30 hops:

  1    <1 ms    <1 ms    <1 ms  router [192.168.1.1]

Далее посылаем новый запрос - уже с 2 в TTL - теперь наш роутер успешно пропустит пакет, а провайдерский - вернет Time Exceeded со своим адресом – это  второй:

  2    <1 ms    <1 ms    <1 ms  10.2.1.1

И так далее:

  3    <1 ms    <1 ms    <1 ms  81.200.10.1

  4     1 ms     1 ms     1 ms  h-210.core.superlannet.ru [81.200.12.210]

  5    18 ms    11 ms     1 ms  ix2-m9.yandex.net [193.232.244.93]

  6     1 ms     1 ms     1 ms  rhodium-vlan309.yandex.net [77.88.56.126]

  7     1 ms     1 ms     1 ms  hummer-vlan2.yandex.net [87.250.228.136]

  8     2 ms     2 ms     2 ms  yandex.ru [213.180.204.11]

Trace complete.

Т.е. столь распространенная утилита использует свойство протокола, предназначенное совсем для других целей - согласно википедии, TTL был введен чтобы избавиться от блуждающих пакетов, которые не могут быть доставлены:

The purpose of the TTL field is to avoid a situation in which an undeliverable datagram keeps circulating on an internet system, and such a system eventually becoming swamped by such immortal datagrams.

А его рекомендуемое значение по умолчанию – 64 (RFC 1700):

The current recommended default time to live (TTL) for the
Internet Protocol (IP) [45,105] is 64.

No comments:

Post a Comment