пятница, 28 января 2011 г.

Особенности реализации TRACEROUTE на различных ОС


Принцип работы команды основан на отсылке серии 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). Все остальное аналогично.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.