Информация честно взята с http://www.cisco.com/en/US/tech/tk364/technologies_tech_note09186a00801ae32a.shtml
Принцип работы команды основан на отсылке серии IP пакетов с возрастающим параметром Time To Live (TTL) от 1 до максимум 30 (по умолчанию). Каждый маршрутизатор на пути следования пакета, приняв пакет с TTL=1 отсылает источнику сообщение ICMP type 11 , code 0 (time exceeded, TTL exceeded). Таким образом, у источника есть шанс узнать путь к хосту назначения. При условии, конечно, что для всех отосланных пакетов путь был одинаковым, т.е. маршруты стабильными и предопределенными. На разных операционках команда реализована разными способами.
Cisco IOS и Linux
Используются udp пакеты с начальным TTL по умолчанию равным 1 и с начальным портом назначения по умолчанию 33434. Порт источника выбирается случайным образом выше 0x8000 (32768). Каждый следующий пакет высылается на следующий UDP порт, а порт источника снова выбирается случайным образом. Т.н. расширенная (extended) traceroute позволяет задавать параметры, отличные от параметров по умолчанию.
Каждый маршрутизатор на пути следования пакетов, получивший пакет с TTL=1 отсылает источнику ICMP сообщение type 11, code 0 (time exceeded, TTL exceeded).
По достижении пакетом хоста назначения, последний отправляет ICMP type3, code 3 (destination unreachable, port unreachable).
В Linux команда работает похожим образом, только порт источника остается постоянным.
На Cisco маршрутизаторах коды ответов команды traceroute в CLI:
! -- success
* -- time out
N -- network unreachable
H -- host unreachable
P -- protocol unreachable
A -- admin denied
Q -- source quench received (congestion)
? -- unknown (any other ICMP message)
Для предотвращения DoS атак на Cisco маршрутизаторах установлено ограничение на отправку сообщений ICMP ureachable не чаще, чем раз в 500 ms. Это объясняет "пропадающие" ответные пакеты. В версиях IOS 12.1 и выше 'njn параметр можно поменять командой
no ip icmp rate-limit unreachable
Microsoft Windows
Для трассировки использует ICMP type=8, code=0 (echo request) вместо UDP. Соответственно, хост назначения высылает ICMP type=0, code=0 (echo reply). Все остальное аналогично.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.