Skip to content

ICMP(v6)

Зачем нужен протокол ICMP

Это служебный протокол, использующийся устройствами для сообщения друг другу об ошибках или о некоторых событиях.

Существует 2 популярные команды, которые используют данный протокол:

  • ping - проверка доступности устройства,
  • traceroute - построение пути до адреса назначения.

Сообщения ICMP

Существует достаточно большое количество сообщений ICMP, но ниже приведены только наиболее часто встречающиеся:

  • Echo request - эхо-запрос,
  • Echo reply - эхо-ответ,
  • Timeout - время ожидания истекло,
  • Host unreachable - узел недостижим,
  • Network unreachable - сеть недостижима,
  • TTL expired - время жизни пакета истекло.

В версии ICMPv6 еще можно выделить:

  • RS - поиск соседнего маршрутизатора,
  • RA - объявление соседнего маршрутизатора,
  • NS - поиск соседнего узла,
  • NA - объявление соседнего узла.

Примеры

Пример 1 (Cisco)

Схема

img

Настройка

conf t

hostname R1

int e0/0
ip add 10.1.0.1 255.255.255.0
no sh

int e0/1
ip add 10.13.0.1 255.255.255.0
no sh
exit

ip route 0.0.0.0 0.0.0.0 10.13.0.3

end
wr mem
conf t

hostname R2

int e0/0
ip add 10.2.0.2 255.255.255.0
no sh

int e0/1
ip add 10.23.0.2 255.255.255.0
no sh
exit

ip route 0.0.0.0 0.0.0.0 10.23.0.3

end
wr mem
conf t

hostname R3

int e0/0
ip add 10.3.0.3 255.255.255.0
no sh

int e0/1
ip add 10.13.0.3 255.255.255.0
no sh

int e0/2
ip add 10.23.0.3 255.255.255.0
no sh
exit

ip route 10.1.0.0 255.255.255.0 10.13.0.1
ip route 10.1.0.0 255.255.255.0 10.23.0.2

end
wr mem
ip 10.1.0.10/24 10.1.0.1
save
ip 10.2.0.10/24 10.2.0.2
save
ip 10.3.0.10/24 10.3.0.3
save

Проверить таблицу маршрутизации можно с помощью команды

show ip route

Выполнить трассировку маршрута на ПК можно с помощью команды

trace {IP}

Пример 2 (Huawei)

Необходим эмулятор eNSP.

Дополнительно о статической маршрутизации на Huawei можно почитать здесь.

Схема

img

Настройка

system-view

sysname R1

int e0/0/0
ip add 10.1.0.1 24

int e0/0/1
ip add 10.12.0.1 24

int g0/0/0
ip add 10.13.0.1 24
quit

ip route-static 10.24.0.0 24 10.12.0.2
ip route-static 10.4.0.0 24 10.12.0.2
ip route-static 10.4.0.0 24 10.13.0.3
ip route-static 10.34.0.0 24 10.13.0.3
ip route-static 10.3.0.0 24 10.13.0.3

return
save
system-view

sysname R2

int e0/0/0
ip add 10.12.0.2 24

int e0/0/1
ip add 10.24.0.2 24
quit

ip route-static 10.3.0.0 24 10.12.0.1
ip route-static 10.3.0.0 24 10.24.0.4
ip route-static 10.1.0.0 24 10.12.0.1
ip route-static 10.4.0.0 24 10.24.0.4
ip route-static 10.13.0.0 24 10.12.0.1
ip route-static 10.34.0.0 24 10.24.0.4

return
save
system-view

sysname R3

int g0/0/0
ip add 10.13.0.3 24

int g0/0/1
ip add 10.34.0.3 24

int e0/0/0
ip add 10.3.0.3 24
quit

ip route-static 10.1.0.0 24 10.13.0.1
ip route-static 10.4.0.0 24 10.34.0.4
ip route-static 10.12.0.0 24 10.13.0.1
ip route-static 10.24.0.0 24 10.34.0.4

return
save
system-view

sysname R4

int e0/0/0
ip add 10.4.0.4 24

int e0/0/1
ip add 10.24.0.4 24

int g0/0/0
ip add 10.34.0.4 24
quit

ip route-static 10.1.0.0 24 10.24.0.2
ip route-static 10.1.0.0 24 10.34.0.3
ip route-static 10.12.0.0 24 10.24.0.2
ip route-static 10.13.0.0 24 10.34.0.3
ip route-static 10.3.0.0 24 10.34.0.3

return
save

Проверка

Посмотреть таблицу маршрутизации на R1

[R1]display ip routing-table 

Результат вывода команды

Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 12       Routes : 13       

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

       10.1.0.0/24  Direct  0    0           D   10.1.0.1        Ethernet0/0/0
       10.1.0.1/32  Direct  0    0           D   127.0.0.1       Ethernet0/0/0
       10.3.0.0/24  Static  60   0          RD   10.13.0.3       GigabitEthernet0/0/0
       10.4.0.0/24  Static  60   0          RD   10.12.0.2       Ethernet0/0/1
                    Static  60   0          RD   10.13.0.3       GigabitEthernet0/0/0
      10.12.0.0/24  Direct  0    0           D   10.12.0.1       Ethernet0/0/1
      10.12.0.1/32  Direct  0    0           D   127.0.0.1       Ethernet0/0/1
      10.13.0.0/24  Direct  0    0           D   10.13.0.1       GigabitEthernet0/0/0
      10.13.0.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
      10.24.0.0/24  Static  60   0          RD   10.12.0.2       Ethernet0/0/1
      10.34.0.0/24  Static  60   0          RD   10.13.0.3       GigabitEthernet0/0/0
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0

Посмотреть таблицу маршрутизации (статические записи) на R1

[R1]display ip routing-table protocol static 

Результат вывода команды

Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : Static
         Destinations : 4        Routes : 5        Configured Routes : 5

Static routing table status : <Active>
         Destinations : 4        Routes : 5

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

       10.3.0.0/24  Static  60   0          RD   10.13.0.3       GigabitEthernet0/0/0
       10.4.0.0/24  Static  60   0          RD   10.12.0.2       Ethernet0/0/1
                    Static  60   0          RD   10.13.0.3       GigabitEthernet0/0/0
      10.24.0.0/24  Static  60   0          RD   10.12.0.2       Ethernet0/0/1
      10.34.0.0/24  Static  60   0          RD   10.13.0.3       GigabitEthernet0/0/0

Static routing table status : <Inactive>
         Destinations : 0        Routes : 0

Резульатат проверки доступности R4 с R1

[R1]ping 10.4.0.4
  PING 10.4.0.4: 56  data bytes, press CTRL_C to break
    Reply from 10.4.0.4: bytes=56 Sequence=1 ttl=254 time=120 ms
    Reply from 10.4.0.4: bytes=56 Sequence=2 ttl=254 time=50 ms
    Reply from 10.4.0.4: bytes=56 Sequence=3 ttl=254 time=50 ms
    Reply from 10.4.0.4: bytes=56 Sequence=4 ttl=254 time=80 ms
    Reply from 10.4.0.4: bytes=56 Sequence=5 ttl=254 time=80 ms

  --- 10.4.0.4 ping statistics ---
    5 packet(s) transmitted
    5 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 50/76/120 ms

Если выполнить трассировку маршрута с PC3 до PC1, то получится следующий результат

PC2>tracert 10.1.0.10

traceroute to 10.1.0.10, 8 hops max
(ICMP), press Ctrl+C to stop
 1  10.3.0.3   15 ms  32 ms  15 ms
 2  10.13.0.1   47 ms  47 ms  31 ms
 3  10.1.0.10   78 ms  63 ms  62 ms

Получилось, что трафик идет по кратчайшему пути.

Теперь можно добавить еще один маршрут до сети, где PC1, который проходит через R4. При этом необходимо удалить маршрут на R4 в сторону сети, где PC1, который проходит через R3. На R3 также нужно удалить кратчайший маршрут либо отключить интерфейс. На R2 также нужно удалить маршурт в сторону PC2, проходящий через R1. На R1 добавить маршрут в сеть PC2, проходящий через R2.

system-view
ip route-static 10.3.0.0 24 10.12.0.2
int g0/0/0
shutdown
return
save
system-view
undo ip route-static 10.3.0.0 24 10.12.0.1
return
save
system-view
ip route-static 10.1.0.0 24 10.34.0.4
int g0/0/0
shutdown
return
save
system-view
undo ip route-static 10.1.0.0 24 10.34.0.3
return
save

Результат трассировки с PC2 до PC1

PC2>tracert 10.1.0.10

traceroute to 10.1.0.10, 8 hops max
(ICMP), press Ctrl+C to stop
 1  10.3.0.3   15 ms  32 ms  15 ms
 2  10.34.0.4   78 ms  47 ms  47 ms
 3  10.24.0.2   78 ms  63 ms  78 ms
 4  10.12.0.1   94 ms  93 ms  94 ms
 5  10.1.0.10   125 ms  125 ms  109 ms

Теперь трафик проходит через "верх".

Пример 3 (MikroTik)

Актуально для версии Router OS 7.8 stable. По умолчанию логин - admin, пароль - пустой.

Схема

Схема сети

Настройка

/system/identity/set name=R1

/ip/address/add address=10.1.0.1/24 interface=ether1 disabled=no
/ip/address/add address=10.12.0.1/24 interface=ether2 disabled=no

/ip/route/add dst-address=0.0.0.0/0 gateway=10.12.0.2 disabled=no
/system/identity/set name=R2

/ip/address/add address=10.12.0.2/24 interface=ether1 disabled=no
/ip/address/add address=10.23.0.2/24 interface=ether2 disabled=no

/ip/route/add dst-address=10.1.0.0/24 gateway=10.12.0.1 disabled=no
/ip/route/add dst-address=0.0.0.0/0 gateway=10.23.0.3 disabled=no
/system/identity/set name=R3

/ip/address/add address=10.34.0.3/24 interface=ether1 disabled=no
/ip/address/add address=10.23.0.3/24 interface=ether2 disabled=no

/ip/route/add dst-address=10.4.0.0/24 gateway=10.34.0.4 disabled=no
/ip/route/add dst-address=0.0.0.0/0 gateway=10.23.0.2 disabled=no
/system/identity/set name=R4

/ip/address/add address=10.4.0.4/24 interface=ether1 disabled=no
/ip/address/add address=10.34.0.4/24 interface=ether2 disabled=no

/ip/route/add dst-address=0.0.0.0/0 gateway=10.34.0.3 disabled=no
ip 10.1.0.10/24 10.1.0.1
save
ip 10.4.0.20/24 10.4.0.4
save

Результат трассировки маршрута от PC1 до PC2

PC1> trace 10.4.0.20 -P 1
trace to 10.4.0.20, 8 hops max (ICMP), press Ctrl+C to stop
 1   10.1.0.1   3.434 ms  1.462 ms  1.455 ms
 2   10.12.0.2   6.091 ms  4.187 ms  2.215 ms
 3   10.23.0.3   2.152 ms  1.944 ms  1.766 ms
 4   10.34.0.4   3.667 ms  3.056 ms  2.647 ms
 5   10.4.0.20   3.505 ms  3.015 ms  3.353 ms

Результат трассировки маршрута от R1 до R4

[admin@R1] > /tool/traceroute 10.34.0.4
Columns: ADDRESS, LOSS, SENT, LAST, AVG, BEST, WORST, STD-DEV
#  ADDRESS    LOSS  SENT  LAST   AVG  BEST  WORST  STD-DEV
1  10.12.0.2  0%       3  1.9ms  3.4  1.9   5.2    1.4    
2  10.23.0.3  0%       3  3.4ms  4.8  2.5   8.4    2.6    
3  10.34.0.4  0%       3  4.9ms  6.3  3.6   10.4   2.9

Если на R3 временно отключить маршрут в сторону PC2

[admin@R3] > ip route/print 
Flags: D - DYNAMIC; A - ACTIVE; c, s, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
#     DST-ADDRESS   GATEWAY    DISTANCE
0  As 0.0.0.0/0     10.23.0.2         1
1  As 10.4.0.0/24   10.34.0.4         1
  DAc 10.23.0.0/24  ether2            0
  DAc 10.34.0.0/24  ether1            0
[admin@R3] > ip route/disable numbers=1

то произойдет зацикливание маршрута, т.е. пакеты начинают блуждать от R2 до R3 до тех пор, пока не закончится TTL

PC1> trace 10.4.0.20 -P 1
trace to 10.4.0.20, 8 hops max (ICMP), press Ctrl+C to stop
 1   10.1.0.1   1.273 ms  0.881 ms  0.452 ms
 2   10.12.0.2   2.127 ms  1.531 ms  1.419 ms
 3   10.23.0.3   4.211 ms  2.218 ms  1.810 ms
 4   10.12.0.2   2.045 ms  2.220 ms  2.809 ms
 5   10.23.0.3   3.957 ms  2.665 ms  2.472 ms
 6   10.12.0.2   3.890 ms  2.884 ms  2.945 ms
 7   10.23.0.3   3.725 ms  3.841 ms  3.192 ms
 8   10.12.0.2   3.767 ms  3.561 ms  3.518 ms

Из-за чего происходит зацикливание маршрута в данном случае?

По умолчанию утилита trace в VPCS использует максимальное значение TTL = 8, поэтому вывод ограничен 8-ю строками. Если изменить максимальное значение, то результат будет другим

PC1> trace ?

trace HOST [OPTION ...]
  Print the path packets take to the network HOST. HOST can be an ip address or
  name.
    Options:
      -P protocol    Use IP protocol in trace packets
                       1 - icmp, 17 - udp (default), 6 - tcp
      -m ttl         Maximum ttl, default 8

PC1> trace 10.4.0.20 -P 1 -m 4
trace to 10.4.0.20, 4 hops max (ICMP), press Ctrl+C to stop
 1   10.1.0.1   0.885 ms  0.439 ms  0.506 ms
 2   10.12.0.2   2.617 ms  1.898 ms  1.112 ms
 3   10.23.0.3   3.426 ms  1.959 ms  2.563 ms
 4   10.12.0.2   2.953 ms  2.011 ms  1.743 ms

Если активировать маршрут обратно

[admin@R3] > ip route/pr
Flags: D - DYNAMIC; X, I, A - ACTIVE; c, s, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
#     DST-ADDRESS   GATEWAY    DISTANCE
0  Xs 10.4.0.0/24   10.34.0.4          
1  As 0.0.0.0/0     10.23.0.2         1
  DAc 10.23.0.0/24  ether2            0
  DAc 10.34.0.0/24  ether1            0
[admin@R3] > ip route/enable numbers=0
[admin@R3] > ip route/pr
Flags: D - DYNAMIC; A - ACTIVE; c, s, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
#     DST-ADDRESS   GATEWAY    DISTANCE
0  As 0.0.0.0/0     10.23.0.2         1
1  As 10.4.0.0/24   10.34.0.4         1
  DAc 10.23.0.0/24  ether2            0
  DAc 10.34.0.0/24  ether1            0

и задать при трассировке максимальное значение TTL = 2, то маршрут не будет построен до конца.

PC1> trace 10.4.0.20 -P 1 -m 2
trace to 10.4.0.20, 2 hops max (ICMP), press Ctrl+C to stop
 1   10.1.0.1   1.668 ms  1.961 ms  1.666 ms
 2   10.12.0.2   2.314 ms  1.583 ms  1.453 ms 

Пример 4 (MikroTik + Cisco + IPv6)

Актуально для версии Router OS 7.8 stable. По умолчанию логин - admin, пароль - пустой.

Схема

img

Настройка

/system/identity/set name=R1

/ipv6 address add address=10:1::1/64 interface=ether1 disabled=no
/ipv6 address add address=10:12::1/64 interface=ether2 disabled=no

/ipv6 route add dst-address=::/0 gateway=10:12::2 disabled=no
/system/identity/set name=R2

/ipv6 address add address=10:12::2/64 interface=ether1 disabled=no
/ipv6 address add address=10:23::2/64 interface=ether2 disabled=no

/ipv6 route add dst-address=10:1::/64 gateway=10:12::1 disabled=no
/ipv6 route add dst-address=::/0 gateway=10:23::3 disabled=no
conf t
hostname R3
ipv6 unicast-routing

int e0/1
ipv6 add 10:23::3/64
no sh

int e0/0
ipv6 add 10:34::3/64
no sh
exit

ipv6 route ::/0 10:23::2
ipv6 route 10:4::/64 10:34::4

wr mem
conf t
hostname R4
ipv6 unicast-routing

int e0/0
ipv6 add 10:4::4/64
no sh

int e0/1
ipv6 add 10:34::4/64
no sh
exit

ipv6 route ::/0 10:34::3

wr mem
ip 10:1::10/64
save
ip 10:4::20/64
save

Проверить доступность адреса и построить маршрут можно с помощью утилит ping и trace, соответственно, указав IPv6-адреса вместо IPv4.

🧰 Лабораторная работа

Ознакомиться перед выполнением любой лабораторной работы (список раскрывается)
  • Вместо ❔ или x нужно подставить свой номер по журналу
  • Выполнять задание без "отмашки" не стоит ⛔, т.к. задание здесь может существовать более актуальная версия
  • У каждой работы есть срок сдачи 📅, который озвучивается на занятии, после которого работа не может быть защищена на максимальный балл 📉
  • Дополнительные задания 📚 не являются обязательными, но по результатам сдачи лабораторной работы может быть выдано одно или несколько из них. Также дополнительное задание может быть сформулировано устно
  • Для каждой лабораторной работы должен быть отчет 📝 с описанием выполнения ваших действий, оформление должно соответствовать требованиям (см. на сайте учебного заведения)
  • Нужно уметь ответить на вопросы ❓ по теме, контрольные вопросы и другие связанные вопросы
  • Примеры могут быть выполнены по желанию, а также выданы в качестве дополнительного задания с изменениями или без в случае неуспешной 😢 защиты основной работы
  • Иногда в работах встречаются задания по IPv4 и IPv6 одновременно 🔗. Это считается как одна работа. Допускается сдача работы только с IPv4 или только с IPv6, но максимальный балл в таком случае получить невозможно

🌐 Схема

Схема сети

Внимание

  1. IPv4 и IPv6 выполнять на одной схеме.
  2. В качестве PC рекомендуется использовать Linux.
  3. Под trace понимается любая команда, выполняющая трассировку маршрута. На реальном оборудовании команда, вероятно, будет называться по-другому.

✔️ Условия

IPv4

  1. Исходная сеть IPv4 - 10.x.0.0/16. Разделить на необходимое количество (определить самостоятельно) подсетей и использовать их в схеме.
  2. Маршрутизация - статическая.
  3. Где разумно использовать маршрут по умолчанию.
  4. Где разумно использовать суммарный маршрут.
  5. С помощью команды trace (может называться по разному в разных ОС) изучить результаты трассировки маршрута.
  6. С помощью Wireshark изучить принцип работы трассировки маршрута.

IPv6

  1. Исходная сеть IPv6 - 2000:x::/48. Разделить на подсети с помощью идентификатора подсети и использовать их в схеме.
  2. Остальные условия аналогичны условиям IPv4.

📚 Дополнительные задания

  1. Повторить указанный пример. Использовать указанные маршрутизаторы (MikroTik, Linux, Cisco, ...). Адрес исходной сети - 10.x.0.0/20. При необходимости разделить сеть на подсети.
  2. Повторить указанный пример. Использовать указанные маршрутизаторы (MikroTik, Linux, Cisco, ...). Адрес исходной сети - 2000:x::/48. При необходимости разделить сеть на подсети.

🤔 Контрольные вопросы

Общие

  1. Какой принцип работы утилиты trace?
  2. Какие параметры принимает команда trace?
  3. В чем принципиальное отличие команды ping от trace?
  4. По какой причине при выполнении эхо-запроса может появится сообщение типа timeout?
  5. По какой причине при выполнении эхо-запроса может появится сообщение network unreachable?
  6. Можно ли, глядя на схему, точно предположить адреса (или сети), которые будут в выводе результата работы утилиты trace?
  7. Чем отличается трафик в Wireshark, создаваемый утилитой trace и утилитой ping с TTL = 1 (устройство должно находится дальше 1 "хопа")?
  8. Как, имея несколько таблиц с результатами утилиты trace, построить карту сети?
  9. Что такое рекурсивный поиск маршрута? Выполняется ли в данной работе такой поиск?
  10. Что такое маршрут по умолчанию?
  11. Для чего используется суммарный маршрут?
  12. Почему появляются * * * в выводе trace?
    1. Привести пример схемы, когда будут появляться * * * в выводе trace, но при этом все устройства будут "пинговаться".
  13. Какое минимальное значение TTL необходимо в trace, чтобы корректно построить маршрут?
    1. Что будет, если TTL будте меньше требуемого минимума?
  14. Что такое цикличный маршрут?
    1. Чем он хорош или плох?
    2. Продемонстрировать цикличный маршрут.

IPv6

  1. Можно ли не указывать шлюз по умолчанию на ПК в случае IPv6? Почему?
  2. Что является аналогом ARP-запроса и ARP-ответа в IPv6?
  3. Для чего нужны пакеты "RA", "RS", "ND", "NS"?