Протокол ARP и «с чем его едят» (дополнено)

    Спасибо хабраюзеру hardex за публикацию первоначальной статьи, а также всем, кто плюсанул в карму для возможности моей собственноручной публикации. Теперь дополненная версия с учетом пожеланий и дополнений. Добро пожаловать под кат.



    Доброго времени суток, дорогие хабраюзеры. Этой статьей я хочу начать цикл повествования о протоколах, которые помогают нам прозрачно, быстро и надежно обмениваться информацией. И начать с протокола ARP.

    Как известно, адресация в сети Internet представляет собой 32-битовую последовательность 0 и 1, называющихся IP-адресами. Но непосредственно связь между двумя устройствами в сети осуществляется по адресам канального уровня (MAC-адресам).

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

    ARP состоит из двух частей. Первая – определяет физический адрес при посылке пакета, вторая – отвечает на запросы других станций.

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

    Пример ARP-таблицы.

    192.168.1.1 08:10:29:00:2F:C3
    192.168.1.2 08:30:39:00:2F:C4


    Слева – IP-адреса, справа – MAC-адреса.

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

    Записи ARP-таблицы бывают двух вид видов: статические и динамические. Статические добавляются самим пользователем, динамические же – создаются и удаляются автоматически. При этом в ARP-таблице всегда хранится широковещательный физический адрес FF:FF:FF:FF:FF:FF (в Linux и Windows).

    Создать запись в ARP-таблице просто (через командную строку):

    arp –s <IP-адрес> <MAC-адрес>

    Вывести записи ARP-таблицы:

    arp –a

    После добавления записи в таблицу ей присваивается таймер. При этом, если запись не используется первые 2 минуты, то удаляется, а если используется, то время ее жизни продлевается еще на 2 минуты, при этом максимально – 10 минут для Windows и Linux (FreeBSD – 20 минут, Cisco IOS – 4 часа), после чего производится новый широковещательный ARP-запрос.

    Сообщения ARP не имеют фиксированного формата заголовка и при передаче по сети инкапсулируются в поле данных канального уровня

    Формат сообщения ARP.

    • тип сети (16 бит): для Ethernet – 1;
    • тип протокола (16 бит): h0800 для IP;
    • длина аппаратного адреса (8 бит);
    • длина сетевого адреса (8 бит);
    • тип операции (16 бит): 1 – запрос, 2 — ответ;
    • аппаратный адрес отправителя (переменная длина);
    • сетевой адрес отправителя (переменная длина);
    • аппаратный адрес получателя (переменная длина);
    • сетевой адрес получателя (переменная длина).


    А вот как происходит определение маршрута с участием протокола ARP.

    Пусть отправитель A и получатель B имеют свои адреса с указанием маски подсети.

    1. Если адреса находятся в одной подсети, то вызывается протокол ARP и определяется физический адрес получателя, после чего IP-пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу, соответствующему IP-адресу назначения.
    2. Если нет – начинается просмотр таблицы в поисках прямого маршрута.
    3. Если маршрут найден, то вызывается протокол ARP и определяется физический адрес соответствующего маршрутизатора, после чего пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу.
    4. В противном случае, вызывается протокол ARP и определяется физический адрес маршрутизатора по умолчанию, после чего пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу.


    Главным достоинством проткола ARP является его простота, что порождает в себе и главный его недостаток – абсолютную незащищенность, так как протокол не проверяет подлинность пакетов, и, в результате, можно осуществить подмену записей в ARP-таблице (материал для отдельной статьи), вклинившись между отправителем и получателем.

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

    Существуют еще протоколы InARP (Inverse ARP), который выполняет обратную функцую: по заданному физическому адресу ищется логический получателя, и RARP (Reverse ARP), который схож с InARP, только он ищет логический адрес отправителя.

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

    P.S. Эту статью писал я сам, никуда не подглядывая, основываясь только на своих знаниях, полученных в ходе изучения сетей.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 19

      +6
      помню когда-то в общаге, когда интернет канал был узким и один на всех, мы развлекались тем, что посылали на все остальные компьютеры в сети ARP пакет с левой информацией о mac-адресе шлюза. в итоге интернет оставался только у нас :)
        –1
        зря вы не становились полноценными шлюзами :) и не снифали мейлрушечки с БКашечками :)
          0
          в той сети это было возможно и без перенаправления маршрутов. все пакеты были видны с любого компьютера
        • НЛО прилетело и опубликовало эту надпись здесь
          +4
          Все же слово «надежно» применительно к протоколу ARP вызывает вопросы. Его проблема в том, что он разрабатывался для использования в доверенных сетях.
          А иначе arp-spoofing и усе.
          Причем лет 8-10 назад даже статическое прописывание маршрута на винде не помогало: все равно удавалось ее обмануть полсылкой нужных arp-сообщений.
            0
            Использование свитчей вместо хабов спасет вас.
            • НЛО прилетело и опубликовало эту надпись здесь
                +1
                Это вы мне говорите? Я несколько лет провайдерстовал в общаге :)
                Использование свитчей никак не спасет, т.к. свитч так же использует arp-таблицу, и его так же можно обмануть арп-спуфингом.
                Единственный вариант использовать управляемые свитчи, где можно жестко прописать какой мак на каком порту должен сидеть.
                  0
                  Или, как вариант (для небольшой сетки), поставить Arpwatch, переписать все маки в сети и в случае хулиганства по кумполу стучать :)
                    0
                    Да и такой способ применялся.
                    Регулярно приходили письма о том, что кто-то опять вылез с чужим маком.
              +2
              чего-то вы недоизучили…
                0
                «Если нет – начинается просмотр таблицы в поисках прямого маршрута.» — уточните пожалуйста, что начинается просмотр таблицы маршрутизации, а то не понятно что за таблица. И еще замечание, не хватает пункта 5 — ситуация когда шлюз по умолчанию не задан.

                  +1
                  Как известно, адресация в сети Internet представляет собой 32-битовую последовательность 0 и 1, называющихся IP-адресами. Но непосредственно связь между двумя устройствами в сети осуществляется по адресам канального уровня (MAC-адресам).

                  Исправте меня, если я не прав, но, по-моему, будет ошибкой ставить словосочетания «сеть Интернет» и «MAC-адресация» в одном абзаце. Я имею в виду, что MAC-адресация используется только на уровне локальных сетей. В масштабах Интернета адресация называется маршрутизацией.
                    0
                    Маршрутизация — поиск оптимального маршрута для передачи данных.

                    На сетевом уровне, которым, по сути и является интернет (в стеке tcp/ip он так и называется, кстати) адресация осуществляется по ip. А непосредственно обращение к конкретному устройству осуществляется по его физическому адресу.

                    Для этого и нужен протокол arp: разрешать логический адрес в физический.
                      +1
                      «На сетевом уровне, которым, по сути и является интернет» — вы не правы. Интернет — это объединение сетей. Именно сетей, а не сетевых уровней.
                        0
                        Простите выразился неправильно. Я к тому, что адресация в интернете происходит на сетевом уровне. А вот в стеке tcp/ip сетевой уровень называется Интернет.
                          0
                          Быть может я не прав, но Вы не путаете Интернет и Интранет?
                            0
                            Нет, не путаю.
                    +1
                    «Прежде, чем подключиться к одному из устройств, IP-протокол проверяет» плохо звучит для протокола в котором нет такого понятия как установление соединения.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое