Полезные... Интернет  Безопасность

Apr протокол. Протоколы ARP, RARP, IP, ICMP. Для чего используется протокол ARP? Шлюз по умолчанию

Оценка: 4.86 Голосов: 7 Комментарии: 10

Начнем с теории…

Что такое ARP и зачем это нам

ARP (“Address Resolution Protocol” - протокол определения адреса ) - использующийся в компьютерных сетях протокол низкого уровня, предназначенный для определения адреса канального уровня по известному адресу сетевого уровня. Наибольшее распространение этот протокол получил благодаря повсеместности сетей IP, построенных поверх Ethernet, поскольку практически в 100 % случаев при таком сочетании используется ARP.

ARP протокол работает с MAC адресами. Свой индивидуальный MAC адрес есть у каждой сетевой карты.

MAC-адрес (“Media Access Control” - управление доступом к среде ) - это уникальный идентификатор, сопоставляемый с различными типами оборудования для компьютерных сетей. Большинство сетевых протоколов канального уровня используют одно из трёх пространств MAC-адресов, управляемых IEEE: MAC-48, EUI-48 и EUI-64. Адреса в каждом из пространств теоретически должны быть глобально уникальными. Не все протоколы используют MAC-адреса, и не все протоколы, использующие MAC-адреса, нуждаются в подобной уникальности этих адресов.

Рис.1. Путь к ARP таблице.

Рис.2. ARP таблица.

На Рисунке 2 мы видим ARP таблицу. В ней три записи, они добавляются автоматически и имеют следующую структуру. IP Adress – это, собственно, IP адрес компьютера сети, MAC Adress – это mac адрес этого же компьютера, и Interface, который указывает за каким интерфейсом находится данный компьютер. Обратите внимание, что напротив всех записей есть буква D. Она означает то, что эта запись динамическая и будет изменена, если изменятся какие-то данные. То есть, если пользователь случайно введет неправильный IP адрес, то просто изменится запись в ARP таблице и больше ничего. Но нам это не подходит. Нам нужно застраховаться от таких случаев. Для этого в ARP таблицу вносятся статические записи. Как это сделать? Существует два способа.

Рис.3. Добавляем Статическую запись первым способом.

Способ первый. Как обычно нажимаем красный плюс. В появившемся окне вводим IP адрес, MAC адрес и выбираем интерфейс, за которым находится данный компьютер.

Рис.4. Добавляем Статическую запись вторым способом.

Способ второй. Выбираем нужную запись, кликаем два раза левой клавишей мыши, в появившемся окне нажимаем кнопку Make Statik . Статическая запись добавлена.

Рис.5. Таблица со статическими записями.

Как видно на рисунке 5 – напротив добавленной записи отсутствует буква D. Это говорит о том, что запись статическая.

Теперь, если пользователь случайно введет не свой адрес, Mikrotik , проверив соответствие IP и МАС адреса в ARP таблице и, не найдя нужной записи, не даст пользователю выйти в интернет, тем самым наведет пользователя на мысль о том, что он, возможно, был не прав и надо бы позвонить администратору.

Еще на что хотелось бы обратить ваше внимани е: эти записи применяются для пакетов проходящих через router.

Маршрутиза́тор или роутер - сетевое устройство, которое принимает решения о пересылке пакетов сетевого уровня (уровень 3 модели OSI) между различными сегментами сети на основании информации о топологии сети и определённых правил.

Если нужно, чтобы правила применялись к Bridge(бридж), то в Bridge нужно включить функцию Use IP Firewall (рис.6.).

Бридж - это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост.

Рис.6 . Включение функции Use IP Firewall.

Евгений Рудченко

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

Доброго времени суток, дорогие хабраюзеры. Этой статьей я хочу начать цикл повествования о протоколах, которые помогают нам прозрачно, быстро и надежно обмениваться информацией. И начать с протокола 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

Вывести записи 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. Эту статью писал я сам, никуда не подглядывая, основываясь только на своих знаниях, полученных в ходе изучения сетей.

ARP (Address Resolution Protocol - протокол определения адреса) - протокол в компьютерных сетях, предназначенный для определения MAC адреса по известному IP адресу. В данном примере рассмотрено получение ARP таблицы локального компьютера. Для этого используется свойство «StandardOutput » из класса «Process », которое позволяет получить поток, используемый для чтения вывода приложения. В качестве источника вывода данных используется командная строка с запуском команды «arp -a », которая отображает текущие ARP записи, опрашивая текущие данные протокола. Если ARP используют более одного сетевого интерфейса, то будут отображаться записи для каждой таблицы. public static StreamReader ExecuteCommandLine(String file, String arguments = "") { ProcessStartInfo startInfo = new ProcessStartInfo(); //Задаем значение, указывающее необходимость запускать //процесс в новом окне. startInfo.CreateNoWindow = true; //Устанавливаем скрытый стиль окна. Окно может быть видимым или скрытым. //Система отображает скрытое окно, не прорисовывая его. //Если окно скрыто, оно эффективно отключено. //Скрытое окно может обрабатывать сообщения от системы или //от других окон, но не может обрабатывать ввод от пользователя //или отображать вывод. Часто, приложение может держать новое окно //скрытым, пока приложение определит внешний вид окна, а затем //сделать стиль окна Normal. startInfo.WindowStyle = ProcessWindowStyle.Hidden; //Задаем значение, указывающее, что не нужно использовать //оболочку операционной системы для запуска процесса. startInfo.UseShellExecute = false; //Задаем значение, указывающее необходимость записывать выходные //данные приложения в поток System.Diagnostics.Process.StandardOutput. startInfo.RedirectStandardOutput = true; //Задаем приложение для запуска. startInfo.FileName = file; //Задаем набор аргументов командной строки, используемых при //запуске приложения. startInfo.Arguments = arguments; //Задаем предпочтительную кодировку для стандартного вывода. startInfo.StandardOutputEncoding = Encoding.GetEncoding(866); //Запускам ресурс процесса, с указанными выше параметрами и связываем //ресурс с новым компонентом System.Diagnostics.Process. Process process = Process.Start(startInfo); //Возвращаем System.IO.StreamReader, который может использоваться //для чтения потока стандартного вывода приложения. return process.StandardOutput; } Что бы воспользоваться приведенным выше методом и разобрать полученные данные, добавьте приведенный ниже листинг в метод «Form_Load » главной формы или в метод «Button_Click » элемента управления «Button ».
//Инициализируем новую таблицу DataTable dt = new DataTable(); //Создаем три колонки dt.Columns.Add("Адрес в интернете"); dt.Columns.Add("Физический адрес"); dt.Columns.Add("Тип"); //Заносим в переменную поток данных из консольного приложения var arpStream = WindowsFormsARPTable.Form1.ExecuteCommandLine("arp", "-a"); //Удаляем первые три строки, т.к они содержат //пустую строку //имя интерфейса //заголовки столбцов for (int i = 0; i < 3; i++) { arpStream.ReadLine(); } //Циклически проходим по входному потоку //Пока функция EndOfStream не вернет значение true //указывающая, что текущая позиция потока //находится в конце потока while (!arpStream.EndOfStream) { //Получаем одну строку из текущего потока var line = arpStream.ReadLine().Trim(); //Так как между столбцами есть несколько пробелов //их необходимо сократить до одного while (line.Contains(" ")) { line = line.Replace(" ", " "); } //Чтобы распределить полученные данные по столбцам таблицы их // необходимо разделить с помощью метода Split // который возвращает массив, элементы которого содержат //подстроки данного экземпляра, разделенные одним или более //знаками указанных в его значении. var parts = line.Split(" "); //Если значение первого столбца пустое, значит //данную строку необходимо пропустить if (parts.Trim() != string.Empty) { //Если первое значение не пустое //создаем строку с использованием трех параметров и //добавляем его в System.Data.DataRowCollection. dt.Rows.Add(new object { parts.Trim(), parts.Trim(), parts.Trim() }); } } Ниже приведен пример работы тестовой программы.

В TCP/IP не рассматриваются технологии канального и физического уровней, при реальной передаче данных все равно приходится отображать IP адрес на адрес канального уровня.

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

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

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

Пример ARP-таблицы в ОС Windowsпредставлен на рисунке.

В ARP-таблице, помимо IP и MAC адреса, еще указывается тип связи, существует два типа записей:

  • Статические записи создаются вручную, они существуют до тех пор, пока компьютер или маршрутизатор остается включенным.
  • Динамические записи должны периодически обновляться. Если запись не обновлялась в течении определенного времени (приблизительно 2 минуты), то она исключается из таблицы. В ARP-таблице содержаться записи не обо всех узлах сети. А только те, которые активно участвуют в сетевых операциях. Такой способ хранения называется ARP-кэшем.

В IPv6 функциональность ARP обеспечивает протокол NDP (Neighbor Discovery Protocol Протокол Обнаружения Соседей).

RARP (англ. Reverse Address Resolution Protocol - Обратный протокол преобразования адресов) - протокол третьего (сетевого) уровня модели OSI, выполняет обратное отображение адресов, то есть преобразует аппаратный адрес в IP-адрес.

Существует четыре типа ARP-сообщений:

  • ARP-запрос(ARPrequest);
  • ARP-ответ(ARP reply);
  • RARP-запрос(RARP-request);
  • RARP-ответ(RARP-reply).

Структура заголовка ARP

  • Hardware type (HTYPE) Каждый канальный протокол передачи данных имеет свой номер, который хранится в этом поле. Например, Ethernet имеет номер 0x0001
  • Protocol type (PTYPE) Код сетевого протокола. Например, для IPv4 будет записано 0x0800
  • Hardware length (HLEN) Длина физического адреса в байтах. Адреса Ethernet имеют длину 6 байт.
  • Protocol length (PLEN) Длина логического адреса в байтах. IPv4 адреса имеют длину 4 байта.
  • Operation Код операции отправителя: 1 в случае запроса и 2 в случае ответа.
  • Sender hardware address (SHA) Физический адрес отправителя.
  • Sender protocol address (SPA) Логический адрес отправителя.
  • Targethardwareaddress (THA) Физический адрес получателя. Поле пусто при запросе.
  • Target protocol address (TPA) Логический адрес получателя.

Рассмотрим структуру заголовка ARP запроса (request) на примере перехваченного пакета с помощью сетевого анализатора Wireshark

Рассмотрим структуру заголовка ARP ответа (reply) на примере перехваченного пакета с помощью сетевого анализатора Wireshark

Всем привет! Сегодня я расскажу, как посмотреть arp таблицу в Windows. Что такое arp - это протокол распознавания адреса, предназначен для преобразования IP-адресов в MAC-адреса, часто называемые также физическими адресами. Ранее я уже рассказывал, как выглядит arp таблица cisco . Думаю, что многим коллегам, кто только начинает знакомиться с сетевой инфраструктурой данной операционной системы, данная информация окажет хорошее подспорье, для формирования фундамента. Тут главное понимать принцип работы и назначения, все остальное уже нюансы различных вендоров.

Важной особенностью интерфейса Ethernet является то, что каждая интерфейсная карта имеет свой уникальный адрес. Каждому производителю карт выделен свой пул адресов в рамках которого он может выпускать карты. Согласно протоколу Ethernet, каждый интерфейс имеет 6-ти байтовый адрес. Адрес записывается в виде шести групп шестнадцатеричных цифр по две в каждой (шестнадцатеричная записи байта). Первые три байта называются префиксом, и именно они закреплены за производителем. Каждый префикс определяет 224 различных комбинаций, что равно почти 17-ти млн. адресам.

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

Как посмотреть arp таблицу

Вводим команду

Где вы слева видите ip адрес, а правее видите Физический адрес (mac адрес). Это и есть arp таблица windows.

По умолчанию данный кэш живет 300 секунд

очистка arp таблицы

Делается с помощью команды

И видим,произошла очистка arp таблицы

Как добавить свою запись в arp таблицу

Делается это с помощью команды

arp -s 157.55.85.212 00-aa-00-62-c6-09

Увеличиваем время жизни arp записи Windows 7 по 10

Давайте рассмотрим на примере Windows 8.1 как можно увеличить время жизни arp записей, для чего это может быть нужно, ну, чтобы разгрузить сеть лишним трафиком, если у вас в сети мало, что меняется. Делается это все через реестр Windows

Нажимаем Win+R и вводим regedit и переходим в ветку

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Тут вам для изменения периода хранения данных в кэше ARP, нужно создать Параметр DWORD, если у вас разрядность системы 32, то создаем 32, если 64, то такой же.

Задаем имя ArpCacheLife и ставим значение в секундах, после чего нужно перезагрузиться и у вас поменяется время жизни arp записи.

Вот полная справка команды arp

Отображение и изменение таблиц преобразования IP-адресов в физические,
используемые протоколом разрешения адресов (ARP).

ARP -s inet_addr eth_addr
ARP -d inet_addr
ARP -a [-N if_addr] [-v]

  • -a Отображает текущие ARP-записи, опрашивая текущие данные протокола. Если задан inet_addr, то будут отображены IP и физический адреса только для заданного компьютера. Если ARP используют более одного сетевого интерфейса, то будут отображаться записи для каждой таблицы.
  • -g То же, что и параметр -a.
  • -v Отображает текущие ARP-записи в режиме подробного протоколирования. Все недопустимые записи и записи в интерфейсе обратной связи будут отображаться.
    inet_addr Определяет IP-адрес.
  • -N if_addr Отображает ARP-записи для заданного в if_addr сетевого интерфейса.
  • -d Удаляет узел, задаваемый inet_addr. Параметр inet_addr может содержать знак шаблона * для удаления всех узлов.
  • -s Добавляет узел и связывает адрес в Интернете inet_addr с физическим адресом eth_addr. Физический адрес задается 6 байтами (в шестнадцатеричном виде), разделенных дефисом. Эта связь является постоянной eth_addr Определяет физический адрес.
  • if_addr - Если параметр задан, он определяет адрес интерфейса в Интернете, чья таблица преобразования адресов должна измениться. Если параметр не задан, будет использован первый доступный интерфейс.

RARP

Reverse ARP, обратный ARP протокол служит для того, чтобы по имеющемуся MAC адресу узнать IP адрес. Этот протокол используется в бездисковых машинах (https://ru.wikipedia.org/wiki/Бездисковая_рабочая_станция), загружающихся по сети. Первым делом такая машина должна узнать свой IP адрес, и параметры сети, чтобы она могла обратиться по сети, допустим к TFTP серверу, с которого она будет скачивать загрузочную запись. Единственное, что знает о себе эта машина - её MAC адрес.