Выгрузка протокола arp что это
Протокол 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-таблицы:
После добавления записи в таблицу ей присваивается таймер. При этом, если запись не используется первые 2 минуты, то удаляется, а если используется, то время ее жизни продлевается еще на 2 минуты, при этом максимально – 10 минут для Windows и Linux (FreeBSD – 20 минут, Cisco IOS – 4 часа), после чего производится новый широковещательный ARP-запрос.
Сообщения ARP не имеют фиксированного формата заголовка и при передаче по сети инкапсулируются в поле данных канального уровня
Формат сообщения ARP.
А вот как происходит определение маршрута с участием протокола ARP.
Пусть отправитель A и получатель B имеют свои адреса с указанием маски подсети.
Главным достоинством проткола ARP является его простота, что порождает в себе и главный его недостаток – абсолютную незащищенность, так как протокол не проверяет подлинность пакетов, и, в результате, можно осуществить подмену записей в ARP-таблице (материал для отдельной статьи), вклинившись между отправителем и получателем.
Бороться с этим недостатком можно, вручную вбивая записи в ARP-таблицу, что добавляет много рутинной работы как при формировании таблицы, так и последующем ее сопровождении в ходе модификации сети.
Существуют еще протоколы InARP (Inverse ARP), который выполняет обратную функцую: по заданному физическому адресу ищется логический получателя, и RARP (Reverse ARP), который схож с InARP, только он ищет логический адрес отправителя.
В целом, протокол ARP универсален для любых сетей, но используется только в IP и широковещательных (Ethernet, WiFi, WiMax и т.д.) сетях, как наиболее широко распространенных, что делает его незаменимым при поиске соответствий между логическими и физическими адресами.
ARP: определение MAC адресов в локальной сети
ARP (англ. Address Resolution Protocol — протокол определения адреса) — протокол в компьютерных сетях, предназначенный для определения MAC-адреса по IP-адресу другого компьютера. Существуют следующие типы сообщений ARP: запрос ARP (ARP request) и ответ ARP (ARP reply). Система-отправитель при помощи запроса ARP запрашивает физический адрес системы-получателя. Ответ (физический адрес узла-получателя) приходит в виде ответа ARP.
Компьютер А (IP-адрес 192.168.1.1) и компьютер Б (IP-адрес 192.168.1.2) соединены сетью Ethernet. Компьютер А желает переслать пакет данных на компьютер Б, IP-адрес компьютера Б ему известен. Компьютеру А для осуществления передачи через Ethernet требуется узнать MAC-адрес компьютера Б в сети Ethernet. Для этой задачи и используется протокол ARP.
Протокол имеет буферную память (ARP-таблицу), в которой хранятся пары адресов (IP-адрес, MAC-адрес) с целью уменьшения количества посылаемых запросов, следовательно, экономии трафика и ресурсов. Записи ARP-таблицы бывают двух вид видов: статические и динамические. Статические добавляются самим пользователем, динамические же — создаются и удаляются автоматически. При этом в ARP-таблице всегда хранится широковещательный физический адрес FF:FF:FF:FF:FF:FF.
Команда arp в Windows
Позволяет просмотреть ARP-таблицу, добавить в нее новую запись или удалить существующую:
Создать запись в ARP-таблице:
Вывести записи ARP-таблицы:
Команда arp в Linux
Позволяет просмотреть ARP-таблицу, добавить в нее новую запись или удалить существующую:
Создать запись в ARP-таблице:
Вывести записи ARP-таблицы:
Альтернативный способ просмотра записей таблицы — команда
Что такое ARP? Объясняем на пальцах
Powered by модель OSI
ARP-протокол
Многие называют его протоколом «2,5 уровня»: ARP должен работать поверх уровня ethernet (это условие выполняется), но поверх ARP должен работать хотя бы один протокол сетевого уровня. Однако в ARP не инкапсулируется ни один из протоколов третьего уровня модели OSI. Таким образом получается подобие уровня 2.5, что-то среднее между канальным и сетевым.
Что за ARP-таблица?
Здесь можно обратить внимание на широковещательный адрес ( broadcast ). Поле «адрес назначения Ethernet» заполняется единицами ( ff:ff:ff:ff:ff:ff ). Коммутатор, получив такой широковещательный фрейм, отправляет его всем компьютерам сети, как бы обращаясь ко всем с вопросом: «если Вы владелец этого ip адреса (ip адреса назначения), пожалуйста сообщите мне Ваш mac адрес».
Как это работает?
Один из хостов, которые получили этот широковещательный пакет, видит, что IP-адрес принадлежит ему. И в ответ шлет свой MAC-адрес. Соответственно запись связки IP-MAC заносится в ARP-таблицу. В следующий раз, понятное дело, это операция (для конкретного устройства с этим IP) уже не понадобится.
Наглядно:
Итак. у нас есть два ПК1 и ПК2. Придумаем им IP и MAC-адрес
Давайте из ПК1 запустим команду Ping
ping 192.168.1.2
Pinging 192.168.1.2 with 32 bytes of data:
Reply from 192.168.1.2: bytes=32 time=15ms TTL=57
Reply from 192.168.1.2: bytes=32 time=15ms TTL=57
Reply from 192.168.1.2: bytes=32 time=14ms TTL=57
Reply from 192.168.1.2: bytes=32 time=17ms TTL=57
Ping statistics for 192.168.1.2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 14ms, Maximum = 17ms, Average = 15ms
Это очень краткое и поверхностное изложение протокола ARP — далеко не все аспекты работы лежат на поверхности. Дальше — самостоятельная работа. Stay Tuned!
Что такое протокол определения адреса (ARP)?
Протокол определения адреса (ARP) — это протокол или процедура, которая соединяет постоянно изменяющийся адрес интернет-протокола (IP) с фиксированным физическим адресом оборудования, также известным как адрес контроля доступа к медиаинформации (MAC), в локальной сети (LAN).
Эта процедура сопоставления важна, потому что длина IP- и MAC-адресов различается, и требуется преобразование, чтобы системы могли распознавать друг друга. Сегодня наиболее часто используемым IP-адресом является IP-версия 4 (IPv4). IP-адрес имеет длину 32 бита. Однако MAC-адреса имеют длину 48 бит. ARP преобразует 32-битный адрес в 48-битный и наоборот.
Существует сетевая модель, известная как сетевая модель стека сетевых протоколов (OSI). Модель OSI, впервые разработанная в конце 70-х годов, использует слои, чтобы дать специалистам ИТ-отделов визуализацию того, что происходит с конкретной сетевой системой. Это может быть полезно при определении того, какой уровень влияет на тип приложения, устройства или программного обеспечения, установленного в сети, а также на то, за управление каким уровнем отвечает ИТ-специалист или инженер.
MAC-адрес также известен как уровень канала передачи данных, который устанавливает и завершает соединение между двумя физически подключенными устройствами для осуществления передачи данных. IP-адрес также называется сетевым уровнем или уровнем, ответственным за пересылку пакетов данных через различные маршрутизаторы. ARP работает между этими уровнями.
Как работает ARP?
Когда новый компьютер подключается к локальной сети, ему назначается уникальный IP-адрес для идентификации и обмена данными.
Пакеты данных поступают на шлюз, предназначенный для конкретного хост-компьютера. Шлюз или аппаратное обеспечение в сети, которое позволяет передавать данные из одной сети в другую, спрашивает программу ARP, чтобы найти MAC-адрес, соответствующий IP-адресу. Кэш ARP ведет запись каждого IP-адреса и его совпадающего MAC-адреса. Кэш ARP является динамическим, но пользователи сети также могут настраивать статическую таблицу ARP, содержащую IP-адреса и MAC-адреса.
Кэш ARP хранится на всех операционных системах в сети Ethernet IPv4. Каждый раз, когда устройство запрашивает MAC-адрес для отправки данных на другое устройство, подключенное к локальной сети, оно проверяет кэш ARP, чтобы узнать, завершилось ли соединение IP-адреса с MAC-адресом. Если оно существует, то новый запрос не требуется. Однако, если преобразование не было выполнено, отправляется запрос на сетевые адреса и выполняется ARP.
Размер кэша ARP специально ограничен, и адреса, как правило, остаются в кэше всего несколько минут. Он регулярно очищается, чтобы освободить пространство. Эта разработка также предназначена для обеспечения конфиденциальности и безопасности, чтобы предотвратить кражу или подделку IP-адресов кибератаки. В то время как MAC-адреса фиксированы, IP-адреса постоянно изменяются.
В процессе очистки неиспользуемые адреса удаляются; также удаляются любые данные, связанные с неудачными попытками связи с компьютерами, не подключенными к сети или даже не включенными.
Какова функциональная разница между ARP, DHCP и DNS?
ARP — это процесс подключения динамического IP-адреса к MAC-адресу физической машины. Поэтому важно ознакомиться с некоторыми технологиями, связанными с IP.
Как упоминалось ранее, IP-адреса, разработанные по проекту, предназначены для постоянного изменения по простой причине, что это обеспечивает безопасность и конфиденциальность пользователей. Однако IP-адреса не должны быть полностью случайными. Должны быть правила, которые выделяют IP-адрес из определенного диапазона номеров, доступных в конкретной сети. Это помогает предотвратить проблемы, такие как два компьютера, получающие один и тот же IP-адрес. Правила известны как DHCP или протокол динамической настройки узла.
IP-адреса важны как идентификационные данные для компьютеров, поскольку они необходимы для поиска в интернете. При поиске доменного имени или унифицированного указателя ресурса (URL) пользователи используют алфавитное имя. Компьютеры, с другой стороны, используют числовой IP-адрес, чтобы связать доменное имя с сервером. Для их подключения сервер системы доменных имен (DNS) используется для преобразования IP-адреса из непонятной цепочки чисел в более читаемое, легко узнаваемое доменное имя и наоборот.
Каковы типы ARP?
Существуют различные версии и примеры использования ARP. Давайте рассмотрим несколько из них.
Proxy ARP
Proxy ARP — это метод, при помощи которого прокси-устройство в данной сети отвечает на запрос ARP для IP-адреса, который отсутствует в этой сети. Прокси-сервер имеет местоположение пункта назначения трафика и предлагает свой собственный MAC-адрес в качестве пункта назначения.
Самообращенные запросы ARP
Самообращенные запросы ARP похожи на административную процедуру, выполняемую хостом в сети для простого объявления или обновления его IP-адреса на MAC-адрес. Самообращенные запросы ARP не вызваны запросом ARP на преобразование IP-адреса в MAC-адрес.
Протокол разрешения обратного адреса (RARP)
ост-компьютеры, которые не знают свой собственный IP-адрес, могут использовать протокол разрешения обратного адреса (RARP) для обнаружения.
Обратный ARP (IARP)
В то время как ARP использует IP-адрес для поиска MAC-адреса, IARP использует MAC-адрес для поиска IP-адреса.
Почему ARP необходим?
ARP необходим, поскольку программный адрес (IP-адрес) хоста или компьютера, подключенного к сети, должен быть переведен на аппаратный адрес (MAC-адрес). Без ARP хост не сможет определить аппаратный адрес другого хоста. В локальной сети хранится таблица или каталог, который сопоставляет IP-адреса с MAC-адресами различных устройств, включая конечные точки и маршрутизаторы в этой сети.
Эта таблица или каталог не поддерживается пользователями или даже системными администраторами. Вместо этого протокол ARP создает записи в процессе. Если устройство пользователя не имеет аппаратный адрес принимающего хоста, оно отправит сообщение на каждый хост сети с запросом этого адреса. Когда соответствующий принимающий хост узнает о запросе, он ответит своим аппаратным адресом, который затем будет сохранен в каталоге или таблице ARP.
Если ARP не поддерживается, можно вводить данные в этот каталог вручную.
Что такое спуфинг ARP/отравление ARP?
Спуфинг ARP также известен как маршрутизация отравлений ARP или отравление кэша ARP. Это вид атаки, при которой киберпреступник отправляет поддельные сообщения ARP в локальную сеть с целью связать MAC-адрес с IP-адресом законного устройства или сервера в сети. Ссылка позволяет отправлять данные с компьютера жертвы на компьютер злоумышленника вместо исходного места назначения.
Атаки спуфинга ARP могут оказаться опасными, поскольку конфиденциальная информация может передаваться между компьютерами без ведома жертвы. Спуфинг ARP также позволяет использовать другие формы кибератак, включая:
Атаки посредника (MITM)
Атака посредника (MITM) — это вид подслушивания, при котором злоумышленник перехватывает, передает и изменяет сообщения между двумя сторонами, которые не знают, что третья сторона вовлечена в кражу информации. Злоумышленник может попытаться контролировать и манипулировать сообщениями одной из сторон или обеих сторон для получения конфиденциальной информации. Поскольку эти типы атак используют сложное программное обеспечение для имитации стиля и тона разговоров, в том числе и те, которые основаны на тексте и голосе, атаку MITM сложно перехватить и предотвратить.
Атака MITM происходит при распространении вредоносного ПО и получении контроля над веб-браузером жертвы. Сам браузер не важен для злоумышленника, но данные, которыми жертва делится, очень важны, потому что они могут включать имена пользователей, пароли, номера учетных записей и другую конфиденциальную информацию, передаваемую в чатах и онлайн-обсуждениях.
После получения контроля злоумышленник создает прокси между жертвой и законным сайтом, обычно с поддельным сайтом, чтобы перехватить любые данные между жертвой и законным сайтом. Злоумышленники используют интернет-банкинг и сайты электронной коммерции для сбора личной информации и финансовых данных.
Атаки типа «отказ в обслуживании»
Атака типа «отказ в обслуживании» (DoS) — это атака, при которой злоумышленник пытается перегружать системы, серверы и сети трафиком, чтобы пользователи не могли получить к ним доступ. Масштабная DoS-атака известна как распределенная атака типа «отказ в обслуживании» (DDoS), при которой для заполнения системы трафиком используется гораздо большее количество источников.
Эти типы атак используют известные уязвимости в сетевых протоколах. Когда большое количество пакетов передается в уязвимую сеть, сервис может легко перегрузиться, а затем стать недоступным.
Перехват сеанса
Перехват сеанса происходит, когда злоумышленник крадет идентификатор сеанса пользователя, берет на себя его веб-сеанс и маскирует его. Имея в своем распоряжении идентификатор сеанса, злоумышленник может выполнять любую задачу или деятельность, которую пользователь имеет право выполнять в этой сети.
Проверка подлинности происходит, когда пользователь пытается получить доступ к системе или войти на сайт или веб-сервис с ограниченным доступом. Идентификатор сеанса хранится в cookie-файле в браузере, злоумышленник перехватывает процесс аутентификации и вмешивается в работу в режиме реального времени.
Как Fortinet может помочь
Управление доступом к сети (NAC) Fortinet обеспечивает улучшенную видимость сети, чтобы предотвращать постоянно меняющиеся угрозы. NAC — это часть модели доступа к сети с нулевым доверием для обеспечения безопасности, в которой доверие не относится к пользователям, приложениям или устройствам, независимо от того, подключены они к сети или нет, но должно быть установлено.
Каждое устройство в сети сохраняет копию кэша ARP, кэш очищается каждые несколько минут. Таким образом, все устройства, подключенные к этой сети, должны быть защищены, чтобы важные данные, включая IP-адреса, не были взломаны. Для дополнительной защиты сетевых устройств и серверов коммутаторы локальной сети Ethernet Fortinet защищают инфраструктуру организации и даже включают в себя инструмент выбора для определения наилучшего коммутатора в соответствии с требованиями сети.
Семейка протокола ARP
Многие думают, что если протокол мелкий и незаметный, то про него не надо ничего знать. Нетрудно догадаться, что это не так, и именно детальное знание подобных низкоуровневых и “простых” технологий является тем, что отличает профессионала от гуглоиксперта или фанатика, верующего, что в его любимой ОС всё работает “само по себе и априори идеально”.
Чуть-чуть поговорим о протоколах семейства ARP – обычно они не изучаются, и лишь поверхностно проводится обзор протокола ARP, на уровне рамочного понимания функционала – ну, а мы посмотрим, какие ещё варианты бывают.
Семейка протоколов ARP
Как работает протокол ARP
Протокол Address Resolution Protocol (ARP) используется для простой задачи – выяснить по известному адресу сетевого уровня (IPv4) неизвестный адрес канального уровня (обычно это MAC-адрес 802.3, но возможны и другие варианты).
Данные ARP вкладываются в протокол канального уровня (что напрямую, что через SNAP-заголовок) и являются, если рассуждать по логике “уровень протокола определяется по глубине вложения”, уже не протоколом канального уровня, а вот по функционалу ARP остаётся протоколом канального уровня, т.к. работает в пределах домена широковещания. Это я к тому, что модель OSI надо знать не хорошо, а очень хорошо, и различать два варианта определения “на каком уровне работает данный протокол”.
Например протокол RIPv2 занимается передачей маршрутной информации. Данные этого протокола вкладываются внутрь UDP, и по “глубине вложения” RIP будет “внутри транспортного уровня”. Только вот решать задачу он будет сетевого уровня – маршрутизацию. А допустим его коллега OSPF будет для передачи своих данных использовать не UDP или какой-либо другой протокол транспортного уровня, а напрямую вкладывать свои данные в IP-датаграммы, имея свой личный код вложения. Но при этом заниматься опять-таки будет задачей сетевого уровня – маршрутизации.
Так что будьте внимательны в терминологии – и “протокол выполняет задачи уровня N модели OSI” – это одно, а “протокол технически реализуется как вложение уровня N модели OSI” – другое.
Задачи, стоящие перед протоколом, достаточно прозрачны. Как он будет настраиваться?
Базовые настройки и операции с ARP на Windows-системах
Почистить локальный кэш ARP или удалить отдельную запись
Добавить статическую ARP-запись
Детально посмотреть кэш
Будут видны все типы записей – и static, и dynamic, и invalid. Сам вывод будет разбит по критерию привязки записей к интерфейсам – в начале каждого раздела будет выводиться primary IP интерфейса, а потом его внутренний идентификатор (Вы можете посмотреть табличку интерфейсов и их ID командой netsh int ipv4 sh int).
Есть и более современный вариант отображения кэша:netsh interface ipv4 show nei. В этой команде вывод также разбит по интерфейсам (правда, пишутся их человеческие названия, а не primary IP), статические и системные записи будут называться Permanent, обычные – Reachable (если доступны), Unreacheable (если нет) и Stale (если запись устарела).
Базовые операции с ARP на оборудовании Cisco
Как добавить статическую запись
(config)#arp ip-адрес или “vrf имя-vrf” mac-адрес тип-вложения тип-интерфейса
Из интересного тут разве что тип вложения – можно указать, какой именно вариант вложения (из реально возможных сейчас – ARPA или SNAP) будет у записи. Параметр “Тип интерфейса” можно не указывать.
Настроить включение-выключение ARP и его тип
(config-if)#arp arpa или frame-relay или snap
Как понятно, обычно тип ARP будет ARPA и в модификации нуждаться тоже особо не будет. Внимание – типы не являются взаимоисключающими – т.е. можно сделать и arp arpa и arp snap, и это лишь покажет, что на данном интерфейсе надо обрабатывать и тот и тот варианты.
Настроить время нахождения записи в ARP-кэше
(config-if)#arp timeout секунды
Настройка идёт на интерфейсе, т.к. данный тайм-аут будет только у записей в ARP-кэше, сделанных через этот интерфейс.
Очистить кэш ARP
#clear arp-cache
#clear arp-cache ip-адрес
Все записи, привязанные к конкретному интерфейсу:
#clear arp-cache интерфейс
Настроить работу с incomplete ARP records
Данные настройки будут нужны, чтобы задать поведение системы в случае “Я точно знаю, что есть сосед с таким IP-адресом, но у меня нет его MAC-адреса”.
Вы можете задать общее число таких адресов, находящихся “в процессе поиска”, а также количество попыток
(config)#ip arp incomplete enable
(config)#ip arp incomplete entries число
(config)#ip arp incomplete retry число
Базовый тюнинг ARP – тайм-ауты и кэш
ARP и QoS
ARP и NLB
Чтобы ARP дружил с NLB, он должен обрабатывать ситуацию, когда придёт ARP-запрос с не-юникастового адреса. То есть, смотрите ситуацию. Допустим, есть NLB, который работает в мультикастовом режиме. Два хоста, соответственно, прикидываются одним IP-адресом, отвечая на ARP-запросы про этот адрес общим мультикастовым MAC’ом, и потом договариваясь друг меж другом, что делать с пришедшим трафиком. Вот чтобы эта схема работала, надо, чтобы когда этот “общий виртуальный узел”, который обладает виртуальным IP и мультикастовым MAC, решил узнать через ARP чей-то MAC, ему вообще ответили. Потому что есть тонкость – у мультикастового MAC есть характерный вид, по которому понятно, что он мультикастовый. А не-юникастовые source MAC в общем-то не являются нормальной ситуацией и нуждаются в особой обработке. Соответственно, для этого надо явно включить обработку ситуации “к нам пришёл ARP-запрос от товарища, у которого обратный MAC-адрес не-юникастовый”. Делается это путём установки параметра:
в единицу. Если она будет в нуле – в ряде ситуаций поимеете проблемы с NLB.
ARP и SNAP
По умолчанию, ARP вкладывается в 802.3 кадр простым, Ethernet II способом. Это можно поменять в случае, если необходима поддержка SNAP-механизма, который, как известно, нужен для мультиплексирования потоков данных на канальном уровне. Напомню, что по RFC 1042 данные IP и ARP всегда передаются поверх 802.x сетей используя связку LLC+SNAP, за исключением обычного Ethernet (802.3), где они вкладываются напрямую (см. RFC 894). Примечание: Если не известно, то надо задуматься об изучении базовых курсов по сетевым технологиям, потому что детальное рассмотрение “что такое SNAP, зачем, почему, когда, с кем” не входит в спектр задач по изучению ARP.
Для этой задачи есть ключ:
По умолчанию он в нуле, установив в единицу Вы получите ситуацию, что ARP-запросы будут вкладываться в SNAP (притом в LLC+SNAP, что увеличит суммарный размер кадра на 3+5=8 байт).
ARP и NUD
NUD – это Neighbor Unreachability Detection. По умолчанию включается на интерфейсах, которые смотрят в broadcast-среды, и выключается на других. Помогает узнать о том, что сосед (что обычный, что шлюз) перешёл в нефункциональное состояние до времени, пока его запись в ARP-кэше стала Stale. Механизм полезный, поэтому его рекомендуется включать в явном виде. Делается это командой:
netsh int ipv4 set int имя интерфейса nud=enabled
ARP и DAD
DAD – это Duplicate Address Detection. То самое, что не даёт взять себе адрес, который уже есть у кого-то. Проводится путём отправки Gratuious ARP, про который чуть ниже. Тюнингуется достаточно просто, двумя параметрами:
netsh int ipv4 set int имя интерфейса retransmittime=миллисекунды
netsh int ipv4 set int имя интерфейса dadtransmits=попытки По умолчанию retransmittime – т.е. время между попытками обнаружить соседа, который уже занял адрес – 1 секунда, количество попыток dadtransmits – 3. Можете сократить их, если уверены, что все соседи отвечают достаточно быстро, это уменьшит время инициализации интерфейса – система не будет ждать “вдруг кто проснётся и скажет, что адрес уже занят”.
ARP и WOL
Протокол RARP
Примечание: Если код вложения будет от RARP, а коды – 1 или 2 (т.е. как у обычного ARP), то RARP-сервер отдаст данный пакет на обработку ARP-стеку.
Вообще, RARP сейчас практически не используется, но если хотите почитать – есть RFC 903.
Примечание: А если хотите почитать, и чтобы накрыло – почитайте про Dynamic RARP, это RFC 1931.
Реализация RARP-сервера в Windows
Реализация RARP-сервера на оборудовании Cisco
Она есть. Конфигурируется в несколько этапов. По порядку:
Шаг первый: Добавляем запись для потенциального RARP-клиента (т.е. того, кто хочет получить IP-адрес). В глобальной конфигурации:
(config)#arp ip-адрес mac-адрес-клиента arpa
Шаг второй: Разрешаем на интерфейсе, в качестве параметра – тот адрес на интерфейсе, от которого отправляем RARP-ответы.
(config-if)#ip rarp-server ip-адрес
Протокол InARP (Inverse ARP)
InARP – специальная модификация ARP для не-broadcast сетей (например, Frame Relay или ATM). Суть проста – в сетях, где нет широковещания, обычный ARP работать не сможет, а задачи, которые им решаются, никуда не пропадают. Соответственно, нужна схема работы. Она будет достаточно интересна и проста. Узел, который поддерживает InARP, будет самостоятельно с указанной периодичностью отправлять в субинтерфейсы, поддерживающие InARP (например, в FR’овские), InARP-сообщения, в которых будет указано что-то вида “привет, я от узла с сетевым адресом таким-то”. Соответственно, принимающая сторона, получая такое сообщение из-под субинтерфейса с DLCI=abc, будет записывать у себя в таблицу – “За DLCI abc живёт товарищ с IP xyz“. В общем-то и всё.
Другие отличия будут состоять в использовании других кодов операций – 8 для запроса InARP, 9 для ответа. Ну и в механизме вложения – понятное дело, в Q.922 вкладываться – это не в 802.3
Протокол UnARP
Предлагался в RFC 1868. Суть проста – сам формат пакета ARP не менялся, добавлялся лишь новый тип сообщения – сообщение вида “Я ушёл из сети”. Т.е. задачей дополнения UNARP являлось то, что узлы, которые отключаются, могут послать сообщение “Стирайте меня все из ARP-кэшей”, чтобы остальные не ждали время окончания кэширования записей. К сожалению, не поддерживается (основная причина – небезопасен, т.к. такое сообщение легко подделать).
Протокол SLARP (Serial Line ARP)
Специальный субпротокол, работающий внутри цисковского варианта HDLC (который обычно cHDLC). Используемый код вложения – 0x8035. Протокол простой, но интересный тем, что может делать две штуки – проверять состояние канала, периодически передавая кадры, и назначать IPv4-адреса в случае, если с одной стороны serial link адрес IPv4 есть, а с другой – нет. Адрес назначается по логике “Если у меня последний бит адреса 1, предложить такой же, но с нулём, и наоборот”. Маска предлагается такая же, как у себя.
Протокол DirectedARP
Протокол описан в RFC 1433. Сейчас как отдельный протокол не используется, хотя многие мысли, высказанные в этом RFC, достаточно дельные и повлияли, например, на формирование современного IPv6.
Безопасность ARP
ip arp entry learn количество
Есть, в общем-то, множество доп.механизмов безопасности ARP – тот же DAI или ARP ACL, про которые, возможно, я тоже допишу сюда.
Механизм Proxy ARP
Суть механизма Proxy ARP, детально обозначенного в RFC 1027, проста – дать возможность узлу, который в силу каких-то причин (например, у него не указан шлюз по умолчанию) не может понять, куда маршрутизировать трафик для других сетей, всё же сделать это. Притом сделать просто – используя то, что в сегменте с этим узлом присутствует добрый узел, на котором включен Proxy ARP, и который, увидев что узел пытается через ARP-запрос найти получателя трафика, “прикинется” этим получателем и ответит на запрос.
Т.е. вот есть маршрутизатор, на котором включен Proxy ARP. Он получает ARP-запрос на разрешение адреса узла, который находится в другом сегменте относительно спрашивающего и помогает – просто отвечает ему от имени этого узла. Соответственно, этот роутер и будет передавать трафик между данными узлами, а отправитель будет думать, что отправляет трафик напрямую.
Данный механизм включен “по умолчанию” на большинстве систем и нуждается в отключении – т.е. описанная ситуация, в общем-то, по производственной необходимости возникает довольно-таки редко.
Пример: Например, у хоста A адрес 10.1.1.1/24, а у хоста B – 10.1.1.2/16. Технологически они в разных сетях, и между ними даже есть роутер – у него в сторону хоста A смотрит интерфейс 10.1.1.254/24, в сторону хоста B – 10.1.255.254/16. Но вот проблема в том, что хост A не понимает, что хост B – в другой сети, а думает, что B – его сосед. И пытается найти его, отправляя ARP-запрос. Вот в этом случае если роутер будет поддерживать Proxy ARP, то всё будет хорошо – связь между A и B будет.
Как включить Proxy ARP на оборудовании Cisco
Зайдите на нужный интерфейс и введите там команду:
(config-if)#ip proxy-arp
Выключить глобально – (config)#ip arp proxy disable.
Как включить Proxy ARP в Windows
В случае, когда у Вас используется RRaS, proxy ARP работает автоматически.
Что такое и как работает Gratuitous ARP
Это страшное слово переводится как “самопроизвольный” ARP. Суть события в следующем. Любой узел, который инициирует новый интерфейс, на котором есть поддержка ARP, должен при завершении процесса конфигурирования IP-адреса (статически ли, по DHCP, через APIPA’у – без разницы) уведомить соседей о том, что он появился. Делается это при помощи отправки одиночного ARP Reply, в котором указывается, что логично, связка “мой MAC – мой новый IP”. Т.е. выглядит этот ARP-ответ несколько странно с точки зрения классической схемы работы ARP – узел рассылает на броадкастовый MAC и свой IP информацию о своём настоящем MAC и своём же IP. Т.е. совпадают SRC IP и DST IP.
Примечание: По сути, этот механизм – это “форсированное” обновление ARP-кэша соседей новой информацией – “теперь я по этому MAC-адресу”. Заодно, именно благодаря этому механизму, происходит обнаружение дублирующихся IP-адресов – тот, кто пытается присвоить себе IP-адрес, рассылая это уведомление “засветится”.
Но, в общем-то, мы и договорились, что это – исключительная и разовая ситуация. Казалось бы, в чём проблема-то?
Проблема в том, что когда такое происходит на сервере удалённого доступа, к которому подключено несколько клиентов (более 1, по сути), то этот сервер при подключении каждого своего клиента получает от него данный стартовый запрос ARP и ретранслирует запрос далее, выступая, по сути, прокси. В результате, допустим, порт коммутатора, в который включен этот сервер, впадает в тягостные размышления о здоровье сервера, который постоянно сообщает всей сети о том, что за его MAC-адресом интерфейса (того, который воткнут в коммутатор) очень много IP-адресов, и все они разные. И каждый раз, когда клиент будет подключаться (например, VPN-канал переподключит, или другим способом вызовет переход через NCP-фазу PPP), такой ARP-ответ будет создаваться и отправляться серверу, а тот будет отдавать его дальше – чтобы уведомить сеть, что трафик на такой-то IP-адрес надо отправлять на его, сервера, MAC, а дальше он уж сам разберется.
Соответственно, в ряде ситуаций (например, много клиентов, краткие сессии) такой механизм надо отключать. Зачастую проще привязать статически целую пачку ARP-соответствий (например, когда на сервере удалённого доступа выделен пул в 20 адресов, и абоненты подключаются, делают какую-то краткую операцию и отключаются), чем постоянно форвардить в сеть эти ARP Reply.
Примечание: На самом деле, делать это надо с умом, как и всё остальное. Есть ситуации, когда gratuitous ARP является штатным и нужным. Например, у Вас сделан HSRP-балансировщик. Активный узел упал – второй становится активным. И в этот момент он тоже “просто так, внезапно” отправит gratuitous ARP – чтобы сразу уведомить всю сеть, что теперь у виртуального IP новый MAC, а не ждать, пока у всех узлов кончится тайм-аут кэша.
Как настроить Gratuitous ARP на оборудовании Cisco
router(config)#ip gratuitous-arps
Если добавить в конце команды слово non-local, то будет обрабатываться вышеописанная ситуация с PPP.
Отключить приём всех gratuitous ARP’ов:
router(config)#ip arp gratuitous none
Включить приём только gratuitous ARP’ов, source которых из connected-сетей:
router(config)#ip arp gratuitous local
Как настроить Gratuitous ARP на Windows Server
Для указанного сценария с RRaS – никак. Ваш RRaS-сервер не будет передавать стартовый ARP-запрос, полученый от PPP-клиента, в другие сети, поэтому ситуация, описанная выше, просто не возникнет.
Управлять же Gratuitous ARP со стороны узла вполне можно. Для этого есть ключ реестра:
HKLM\System\CurrentControlSet\Services\TcpIp\Parameters
а в нём – параметр ArpRetryCount типа DWORD32. Если поставить этот параметр в нуль, то механизм будет выключен. По умолчанию Windows-хосты делают Gratuitous ARP три раза – сразу после инициализации адреса, потом через 1/2 секунды, потом через ещё 1/10 секунды. Можете поставить единицу, если уверены в качестве работы сети и её не-критичной загруженности на момент выхода ARP Reply – “сэкономите трафик”.
Примечание: Считаются фактически отправленные ARP, а не попытки. Т.е. если среда была недоступна, то все равно отправят три, просто чуть позже.
Примечание: Если поставить нуль, то вдобавок отвалится функция обнаружения конфликтов DHCP, но это будет в другой истории.
Cisco ARP Optimization Feature – что это?
Это достаточно полезное архитектурное изменение, появившееся в релизах IOS 12.0 – 12.2 и закрепившееся в более поздних. Идея проста. Устройство хранит информацию о связках IP-MAC-интерфейс в отдельной таблице. Эта таблица организована для быстрого поиска информации по известному IP-адресу. Соответственно, этот механизм эффективен, когда надо обработать единичный пакет. В ситуации же, когда интерфейс попеременно переходит из состояния включения в выключенное и наоборот (interface flapping), надо сразу же обработать в этой таблице все ARP-записи, относящиеся ко всем IP и MAC, находящимся за данным интерфейсом. Вот фича Cisco ARP Optimization как раз умеет делать эту операцию – например, очистить все записи за соответствующий интерфейс. Выигрыш – резко сниженная загрузка CPU, которому надо обработать событие “падение интерфейса”.
Как настроить Cisco ARP Optimization Feature
Никак – это просто другая структура хранения данных ARP в оперативной памяти, используемая в современных версиях IOS.
Заключение
Если я вспомню ещё что-то, или меня наведут на мысль, то обязательно напишу сюда в качестве дополнения к статье.