Top.Mail.Ru

Протокол ARP и команда arp: руководство по работе с ARP-таблицей в Linux

Протокол ARP и команда arp: руководство по работе с ARP-таблицей в Linux

Команды:

arp (address resolution protocol - протокол разрешения адресов)

arp -n (-numeric - числовой формат)

arp -d (delete) IP — удалить запись с указанным IP.

 

Мы уже знаем, что протокол DNS предназначен для того, чтобы преобразовывать человекочитаемые доменные имена в числовые значения IP адреса.

Так же, есть протокол ARP (Address Resolution Protocol) который предназначен для дальнейшего преобразования IP адреса в физического адрес устройства или MAC адрес. Он осуществляет широковещательный запрос по сети, чтобы найти MAC-адрес устройства по IP-адресу.

А, чтобы каждый раз не отправлять этот широковещательный запрос, изначально просматривается таблица соответствий, ARP-кэш или ARP-таблица, которая хранит уже известные пары IP-MAC и помогает быстро находить MAC-адреса.

Так вот, команда arp выводит как раз ARP-таблицу известных данной системе пар IP-MAC адресов

arp

Address                  HWtype  HWaddress           Flags Mask            Iface
_gateway                 ether   00:0c:29:10:8f:b3   C                     ens33

- Address — IP-адрес устройства или шлюза в локальной сети.

- HWtype — тип аппаратного адреса (ether означает Ethernet MAC-адрес).

- HWaddress — аппаратный адрес или MAC-адрес, соответствующий IP-адресу.

- Flags — флаги состояния записи; C (complete) означает, что соответствие IP и MAC найдено и работоспособно.

- Mask — обычно используется для протоколов с масками, в данном выводе не заполнено.

- Iface — сетевой интерфейс, для которого действует эта запись (ens33), т.е. наш локальный сетевой интерфейс.

В конкретном примере:

- _gateway с MAC 00:0c:29:10:8f:b3 — это шлюз по умолчанию для сети на интерфейсе ens33.

Чтобы у нас все записи отображались в числовом формате, добавим уже известный нам ключ из других сетевых утилит -numeric - числовой формат

arp -n (-numeric - числовой формат)

arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:0c:29:10:8f:b3   C                     ens33

Давайте, попробуем пропинговать какой-нибудь сетевой адрес, чтобы у нас добавилась запись в arp таблицу

ping 192.168.0.11

arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:0c:29:10:8f:b3   C                     ens33
192.168.0.11             ether   00:0c:29:5f:e4:a0   C                     ens33

Теперь в таблице появилась еще одна запись и мы видим, что устройство с адресом 192.168.0.11 имеет физический адрес 00:0c:29:5f:e4:a0

Давайте попробуем пропинговать внешнюю сеть

ping 8.8.8.8

arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:0c:29:10:8f:b3   C                     ens33
192.168.0.11             ether   00:0c:29:5f:e4:a0   C                     ens33

Но, тут никакой записи не появилось! Почему?

Дело в том, что в таблицу добавляются только соседние адреса, т.е. из этой же локальной сети. В таблицу не добавляются адреса устройств, находящиеся за шлюзом, т.е. в других сетях. 

Даже если мы попробуем пропинговать устройство, которое находится максимально близко к нам, но, так же находится за шлюзом (наш физический компьютер, подключенный к физическому роутеру)

ping 192.168.88.2

arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:0c:29:10:8f:b3   C                     ens33
192.168.0.11             ether   00:0c:29:5f:e4:a0   C                     ens33

Если мы изменим на машине 192.168.0.11 адрес на 192.168.0.15 и попробуем пропинговать старый адрес 192.168.0.11 у нас появится ошибка, что адрес не пингуется. Однако, в таблице появится запись

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.11                     (incomplete)                              ens33
192.168.0.15             ether   00:0c:29:5f:e4:a0   C                     ens33
192.168.0.1              ether   00:0c:29:10:8f:b3   C                     ens33

что говорит о том, что данная запись незавершенная, т.е. система не знает актуального физического адреса для этого устройства, так как она не получила ответ с этой информацией.

Однако, у нас появилась запись

192.168.0.15             ether   00:0c:29:5f:e4:a0   C                     ens33

т.е. актуальная запись для физического адреса 00:0c:29:5f:e4:a0

Откуда она взялась? Ведь мы же не пинговали устройство 192.168.0.15, чтобы появилась новая запись!?

А дело в том, что, когда устройство меняет свой IP адрес, оно отправляет в сеть ARP-оповещение (ARP announcements) целью которого является уведомить другие узлы в локальной сети об обновлённом сопоставлении IP и MAC, чтобы обновить их ARP-таблицы и избежать конфликтов или ошибок маршрутизации.

После перезагрузки машины, данная таблица очищается, в ситуации, если вы не добавляли какие-то записи вручную.

Чтобы вручную удалить нужную запись, можно воспользоваться командой:

arp -d (delete) IP — удалить запись с указанным IP.

sudo arp -d 192.168.0.11