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

Введение

Проблема, которую мы будем обсуждать в этой главе, заключается в том, что IP адреса имеют какое-либо значение только в семействе протоколов TCP/IP. Канальные уровни, такие как Ethernet или Token ring, имеют собственную схему адресации (в основном 48-битные адреса); сетевые уровни, в свою очередь, используют эти канальные уровни. Сеть Ethernet, может быть использована различными сетевыми уровнями в одно и то же время. Компьютеры использующие разные сетевые протоколы могут находиться на одном и том же физическом кабеле.

Когда фрейм Ethernet отправляется от одного хоста по локальной сети к другому, по его 48-битному Ethernet адресу определяется, к какому интерфейсу он должен быть доставлен. Драйвер сетевой платы никогда не смотрит на IP адрес назначения в IP датаграмме.

Другими словами возникает необходимость установить соответствие между двумя различными формами адресов: 32-битными IP адресами и каким-либо типом адресов канального уровня. RFC 826 [ Plummer 1982] - официальная спецификация ARP.

На рисунке 4.1 показаны два протокола, которые мы рассмотрим в этой и следующей главах: протокол определения адреса (ARP - address resolution protocol) и обратный протокол определения адреса (RARP - reverse address resolution protocol).

Рисунок 4.1 Протоколы определения адреса: ARP и RARP.

ARP предоставляет динамическое сопоставление IP адресов и соответствующих аппаратных адресов. Мы используем термин динамическое, так как это происходит автоматически и обычно не зависит от используемых прикладных программ или воли системного администратора.

RARP, в основном, используется системами без жестких дисков (бездисковые рабочие станции или X терминалы), однако здесь требуется ручная конфигурация с участием системного администратора. Мы рассмотрим RARP в .

Если мы введем команду

% ftp bsdi

будет выполнена следующая последовательность действий. (См. рисунок 4.2.)

  1. Приложение, FTP клиент, вызывает функцию gethostbyname(3), чтобы конвертировать имя хоста (bsdi) в 32-битный IP адрес. Эта функция в DNS (Domain Name System) называется разборщиком (resolver) , мы опишем это подробно в . Подобное преобразование осуществляется с использованием DNS или, если существует маленькая сеть, то с помощью статического файла хостов ( /etc/hosts).
  2. FTP клиент требует установить TCP соединение с указанным IP адресом.
  3. TCP посылает запрос на установление соединения удаленному хосту, посылая IP датаграммы по указанному IP адресу. (Мы рассмотрим как это делается более подробно в .)
  4. Если хост назначения подключен к сети (Ethernet, Token ring, или к другому концу канала точка-точка), IP датаграмма может быть послана непосредственно хосту. Если хост назначения находится в удаленной сети, IP маршрутизатор определяет Internet адрес непосредственно подключенного маршрутизатора следующей пересылки, чтобы послать туда IP датаграмму. В обоих случаях IP датаграмма посылается либо хосту, либо маршрутизатору, подключенные непосредственно к данной сети.
  5. Если используется Ethernet, посылающий хост должен конвертировать 32-битный адрес в 48-битный Ethernet адрес. Или другими словами, осуществить преобразование из логического Internet адреса в соответствующий физический аппаратный адрес. Этим занимается ARP. ARP работает в широковещательных сетях, где много хостов или маршрутизаторов подключено к одной и той же сети.
  6. ARP посылает фрейм Ethernet, который называется ARP запрос (ARP request), каждому хосту в сети. Подобный метод рассылки называется широковещательным запросом (broadcast). На рисунке 4.2 широковещательный запрос показан пунктирными линиями. ARP запрос содержит IP адрес хоста назначения (имя которого bsdi) и запрос "если Вы владелец этого IP адреса, пожалуйста сообщите мне Ваш аппаратный адрес".

Рисунок 4.2 Реакция ARP на ввод пользователя: ftp hostname.

  • Хост назначения на ARP уровне получает этот широковещательный запрос, определяет, что отправитель спрашивает именно его IP адрес, и отвечает на него ARP откликом (ARP reply). Этот отклик содержит IP адрес и соответствующий аппаратный адрес.
  • ARP отклик принимается, и IP датаграмма, из-за которой начался обмен ARP запрос - ARP отклик, может быть послана.
  • IP датаграмма отправляется на хост назначения.
  • Фундаментальная концепция, заложенная в ARP, заключается в следующем. Сетевой интерфейс имеет аппаратный адрес (48-битное значение для Ethernet или Token ring). Фреймы, которыми обмениваются на аппаратном уровне, должны адресоваться к корректному интерфейсу. Однако TCP/IP испоьзует собственную схему адрессации: 32-битные IP адреса. Знание IP адреса хоста не позволяет ядру послать датаграмму этому хосту. Драйвер Ethernet должен знать аппаратный адрес пункта назначения, чтобы послать туда данные. В задачу ARP входит обеспечение динамического соответствия между 32-битными IP адресами и аппаратными адресами, используемыми различными сетевыми технологиями.

    Каналы точка-точка не используют ARP. Когда эти каналы конфигурируются (обычно во время загрузки), ядру необходимо сказать IP адрес для каждого конца канала. Аппаратные адреса, такие как Ethernet адреса, в данном случае не используются.

    Эффективность функционирования ARP во многом зависит от ARP кэша (ARP cache), который присутствует на каждом хосте. В кэше содержатся Internet адреса и соответствующие им аппаратные адреса. Стандартное время жизни каждой записи в кэше составляет 20 минут с момента создания записи.

    Содержимое ARP кэша можно увидеть с использованием команды arp(8). Опция -a показывает все записи, содержащиеся в кэше:

    bsdi % arp -a
    sun (140.252.13.33) at 8:0:20:3:f6:42
    svr4 (140.252.13.34) at 0:0:c0:c2:9b:26

    48-битные Ethernet адреса приведены в виде шести шестнадцатиричных чисел, разделенных двоеточиями. Дополнительные функции команды arp обсуждаются в разделе главы 4.

    Формат пакета ARP

    На рисунке 4.3 показан формат ARP запроса и формат ARP отклика, в случае использования Ethernet и IP адресов. (ARP можно использовать в других сетей, при этом он способен устанавливать соответствие не только для IP адресов. Первые четыре поля, следующие за полем типа фрейма, указывают на типы и размеры заключительных четырех полей.)

    Рисунок 4.3 Формат ARP запроса или отклика при работе с Ethernet.

    Два первых поля в Ethernet заголовке - поля источника и назначения Ethernet. Специальный адрес назначения Ethernet, состоящий из всех единиц, означает широковещательный адрес. Фреймы с таким адресом будут получены всеми Ethernet интерфейсами на кабеле.

    Двухбайтовый тип фрейма (frame type) Ethernet указывает, данные какого типа, пойдут следом. Для ARP запроса или ARP отклика это поле содержит 0x0806.

    Выражения аппаратный (hardware) и протокол (protocol) используются для описания полей в пакетах ARP. Например, ARP запрос запрашивает аппаратный адрес (в данном случае Ethernet адрес) соответствующий адресу протокола (в данном случае IP адрес).

    Поле hard type указывает на тип аппаратного адреса. Для Ethernet это значение равно единице. Prot type указывает тип адреса протокола, к которому будет приведено соответствие. Для IP адресов используется значение 0x0800. По своему целевому назначению это значение соответствует полю типа во фрейме Ethernet, который содержит IP датаграмму. (См. рисунок 2.1.)

    Два следующих однобайтных поля, hard size и prot size, указывают на размеры в байтах аппаратного адреса и адреса протокола. В ARP запросах и откликах они составляют 6 для Ethernet и 4 для IP адреса.

    Поле op указывает на тип операции: ARP запрос (значение устанавливается в 1), ARP отклик (2), RARP запрос (3) и RARP отклик (4). (Мы поговорим о RARP в .) Это поле необходимо, так как поля типа фрейма (frame type) одинаковы для ARP запроса и ARP отклика.

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

    Для ARP запроса все поля заполнены, за исключением аппаратного адреса назначения. Когда система получает ARP запрос, который предназначается ей, она вставляет свой аппаратный адрес, меняет местами адреса источника и назначения, устанавливает поле op в значение 2 и отправляет отклик.

    Примеры ARP

    В этом разделе мы воспользуемся командой tcpdump, чтобы посмотреть, как в действительности работает ARP при запуске обычного TCP приложения, например, Telnet. В содержится дополнительная информация о работе программы tcpdump.

    Типичный пример

    Чтобы посмотреть как функционирует ARP, мы запустим команду telnet, чтобы подсоединиться к discard (discard server - сервер, не предоставляющий пользователю никаких услуг) серверу.

    bsdi% arp -a проверяем, что ARP кэш пуст
    bsdi% telnet svr4 discard подсоединяемся к серверу
    Trying 140.252.13.34 ...
    Connected to svr4.
    Escape character is "^]" .
    ^] нажимаем Control и правую квадратную скобку,
    telnet> quit чтобы получить приглашение Telnet и закрыть сессию
    Connection closed.

    Пока осуществляются эти действия, мы запускаем команду tcpdump с опцией -e на другом хосте (sun). Это позволит нам посмотреть аппаратные адреса (48-битные адреса Ethernet).


    arp who-has svr4 tell bsdi
    2 0.002174 (0.0022) 0:0:c0:c2:9b:26 0:0:c0:6f:2d:40 arp 60:
    arp reply svr4 is-at 0:0:c0:c2:9b:26
    3 0.002831 (0.0007) 0:0:c0:6f:2d:40 0:0:c0:c2:9b:26 ip 60:
    bsdi.1030>svr4.discard: S 596459521:596459521 (0)
    win 4096
    4 0.007834 (0.0050) 0:0:c0:c2:9b:26 0:0:c0:6f:2d:40 ip 60:
    svr4.discard>bsdi.1030: S 3562228252:3562228252 (0)
    ack 596459522 win 4096
    5 0.009615 (0.0018) 0:0:c0:6f:2d:40 0:0:c0:c2:9b:26 ip 60:
    bsdi.1030>svr4.discard: . ack 1 win 4096

    Рисунок 4.4 ARP запрос и ARP отклик, сгенерированные при запросе на Telnet соединение.

    %D0%A7%D0%B8%D1%81%D0%BB%D0%BE,%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B5%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%BA%D0%B0%D0%B6%D0%B4%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5,%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20-%20%D1%8D%D1%82%D0%BE%0A%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20(%D0%B2%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D0%B0%D1%85)%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%20%D0%B1%D1%8B%D0%BB%20%D0%BF%D1%80%D0%B8%D0%BD%D1%8F%D1%82%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BE%D0%B9%20tcpdump.%20%D0%92%20%D0%BA%D0%B0%D0%B6%D0%B4%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%0A%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B9%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D1%82%D1%81%D1%8F%20%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0%20%D0%B2%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8%20(%D0%B2%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D0%B0%D1%85)%20%D1%81%20%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B9.%0A%D0%AD%D1%82%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D1%81%D0%BA%D0%BE%D0%B1%D0%BA%D0%B0%D1%85.%20%D0%9A%D0%B0%D0%BA%20%D0%B2%D0%B8%D0%B4%D0%BD%D0%BE%20%D0%B8%D0%B7%20%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BA%D0%B0,%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%BE%D0%B9%0AARP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%20%D0%B8%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20ARP%20%D0%BE%D1%82%D0%BA%D0%BB%D0%B8%D0%BA%D0%B0%20%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%202,2%20%D0%BC%D1%81.%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20TCP%20%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%0A%D0%BF%D0%BE%D1%81%D0%BB%D0%B0%D0%BD%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%200,7%20%D0%BC%D1%81%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%8D%D1%82%D0%BE%D0%B3%D0%BE.%20%D0%A2%D0%B0%D0%BA%D0%B8%D0%BC%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%BC,%20%D0%B4%D0%BB%D1%8F%20%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%0A%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0%20%D1%81%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC%20ARP,%20%D0%B2%20%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5,%20%D0%BF%D0%BE%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BB%D0%BE%D1%81%D1%8C%20%D0%BC%D0%B5%D0%BD%D0%B5%D0%B5%20%D1%87%D0%B5%D0%BC%203%20%D0%BC%D1%81.

    %D0%98%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B5%D0%B5%20%D0%BD%D0%B0%20%D1%87%D1%82%D0%BE%20%D1%81%D0%BB%D0%B5%D0%B4%D1%83%D0%B5%D1%82%20%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%20%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5%20tcpdump:%20%D0%BC%D1%8B%20%D0%BD%D0%B5%0A%D1%83%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%20ARP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%20%D0%BE%D1%82%20svr4,%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%BE%D0%BD%20%D0%BF%D0%BE%D1%81%D1%8B%D0%BB%D0%B0%D0%B5%D1%82%20%D1%81%D0%B2%D0%BE%D0%B9%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20TCP%20%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%20(%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%204).%0A%D0%94%D0%B5%D0%BB%D0%BE%20%D0%B2%20%D1%82%D0%BE%D0%BC,%20%D1%87%D1%82%D0%BE%20svr4%20%D1%83%D0%B6%D0%B5%20%D0%B8%D0%BC%D0%B5%D0%B5%D1%82%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BE%20bsdi%20%D0%B2%20%D1%81%D0%B2%D0%BE%D0%B5%D0%BC%20ARP%20%D0%BA%D1%8D%D1%88%D0%B5,%20%D1%82%D0%B0%D0%BA%20%D0%BA%D0%B0%D0%BA,%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%0A%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D1%82%20ARP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81,%20%D0%BF%D0%BE%D0%BC%D0%B8%D0%BC%D0%BE%20%D1%82%D0%BE%D0%B3%D0%BE%20%D1%87%D1%82%D0%BE%20%D0%BE%D0%BD%D0%B0%20%D0%BF%D0%BE%D1%81%D1%8B%D0%BB%D0%B0%D0%B5%D1%82%20ARP%20%D0%BE%D1%82%D0%BA%D0%BB%D0%B8%D0%BA,%20%D0%BE%D0%BD%D0%B0%20%D1%82%D0%B0%D0%BA%D0%B6%D0%B5%0A%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D1%8F%D0%B5%D1%82%20%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D0%B8%20IP%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B8%D0%B2%D1%88%D0%B5%D0%B3%D0%BE%20%D0%B2%20%D1%81%D0%B2%D0%BE%D0%B5%D0%BC%20ARP%20%D0%BA%D1%8D%D1%88%D0%B5.%20%D0%AD%D1%82%D0%BE%0A%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%BD%D0%BE,%20%D1%82%D0%B0%D0%BA%20%D0%BA%D0%B0%D0%BA%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B8%D0%B2%D1%88%D0%B8%D0%B9%20%D1%81%D0%BE%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B0%D1%82%D1%8C%20IP%20%D0%B4%D0%B0%D1%82%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%83,%20%D1%82%D0%BE%0A%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B5%D0%BC%D1%83%20%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B5%20%D0%B2%D1%81%D0%B5%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B8%D0%B4%D0%B5%D1%82%D1%81%D1%8F%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%BE%D1%82%D0%B2%D0%B5%D1%82%20%D0%BD%D0%B0%20%D1%8D%D1%82%D1%83%0A%D0%B4%D0%B0%D1%82%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%83.

    %0A%0A

    в этот раз telnet на IP адрес, а не на имя хоста (hostname)
    bsdi % date ; telnet 140.252.13.36 ; date
    Sat Jan 30 06:46:33 MST 1993
    Trying 140.252.13.36 ...
    telnet: Unable to connect to remote host: Connection timed out
    Sat Jan 30 06:47:49 MST 1993 прошло 76 секунд

    bsdi % arp -a проверяем ARP кэш
    ? (140.252.13.36) at (incomplete)

    На рисунке 4.5 мы видим вывод tcpdump.

    1 0.0 arp who-has 140.252.13.36 tell bsdi
    2 5.509069 (5.5091) arp who-has 140.252.13.36 tell bsdi
    3 29.509745 (24.0007) arp who-has 140.252.13.36 tell bsdi

    Рисунок 4.5 ARP запрос на несуществующий хост.

    Сейчас мы не указываем опцию -e, так как мы уже знаем, что ARP запрос широковещательный.

    Здесь интересно посмотреть, с какой частотой рассылаются ARP запросы: 5,5 секунд после первого запроса и снова через 24 секунды. (Мы рассмотрим тайм-ауты TCP и алгоритм повторных передач более подробно в .) Полное время, показанное в выводе tcpdump, составляет 29,5 секунды. Однако вывод от команды date перед и после команды telnet показывает, что запрос на соединение от Telnet клиента длился в течении 75 секунд. И действительно, мы увидим позже, что большинство BSD реализаций устанавливают ограничение в 75 секунд для завершения запроса на установление TCP соединения.

    Уполномоченный агент ARP

    Уполномоченный агент ARP позволяет маршрутизатору отвечать на ARP запросы в одну сеть, в то время как запрашиваемый хост находится в другой сети. С помощью этого средства происходит обман отправителя, который отправил ARP запрос, после чего он думает, что маршрутизатор является хостом назначения, тогда как в действительности хост назначения находится "на другой стороне" маршрутизатора. Маршрутизатор выступает в роли уполномоченного агента хоста назначения, перекладывая пакеты от другого хоста.

    Для того чтобы лучше описать работу уполномоченных агентов ARP, мы рассмотрим пример. Из рисунка 3.10 видно, что система sun подключена к двум сетям Ethernet. Однако в действительности это не так, в чем можно убедиться, если сравнить этот рисунок с рисунком, который приведен на внутренней стороне обложки. Между sun и подсетью 140.252.1 находится маршрутизатор, который выступает в роли уполномоченного агента ARP, при этом все выглядело так, как будто sun находится в подсети 140.252.1. На рисунке 4.6 показано, что Telebit NetBlazer, названный netb, находится между подсетью и хостом sun.

    Рисунок 4.6 Пример уполномоченного ARP.

    Когда какой-либо другой хост в подсети 140.252.1 (скажем, gemini) хочет послать IP датаграмму хосту sun на адрес 140.252.1.29, gemini сравнивает идентификатор сети (140.252) и идентификатор подсети (1), и если они идентичны, отправляет ARP запрос в верхний Ethernet (на рисунке 4.6) на IP адрес 140.252.1.29. Маршрутизатор netb распознает этот IP адрес как принадлежащий одному из dialup хостов и отвечает, отправив аппаратный адрес этого Ethernet интерфейса в кабель 140.252.1. Хост gemini посылает IP датаграмму в netb по Ethernet, а netb направляет датаграмму в sun по SLIP каналам с дозвоном (dialup). Это делает его прозрачным для всех хостов подсети 140.252.1, так как хост sun действительно находится "позади" маршрутизатора netb.

    Если мы запустим команду arp на хосте gemini после общения с хостом sun, то увидим, что оба эти адреса принадлежат подсети 140.252.1 (netb и sun) и что им соответствует один аппаратный адрес. Как правило, это основная причина, по которой используется уполномоченный агент ARP.

    gemini % arp -a
    появится много строк про хосты из подсети 140.252.1
    netb (140.252.1.183) at 0:80:ad:3:6a:80
    sun (140.252.1.29) at 0:80:ad:3:6a:80

    Еще одна деталь на рисунке 4.6, которую необходимо объяснить, это отсутствие IP адреса под квадратиком, который обозначает маршрутизатор netb (SLIP канал). Почему на обоих концах SLIP канала нет IP адреса, как между bsdi и slip? В разделе главы 3, из вывода команды ifconfig, мы заметили, что адрес назначения SLIP канала 140.252.1.183. NetBlazer не требует наличия IP адресов на каждом конце SLIP канала. (Это позволяет сэкономить несколько столь ценных в настоящее время IP адресов.) Он определяет какой хост посылает пакет в зависимости от того по какому последовательному интерфейсу прибыл пакет, поэтому нет необходимости каждому хосту на SLIP канале использовать уникальный IP адрес для своего канала с маршрутизатором. Все dialup хосты используют адрес 140.252.1.183 в качестве адреса назначения для своих SLIP каналов.

    Уполномоченный агент ARP обеспечивает доставку датаграмм к маршрутизатору sun, однако как это делают другие хосты из подсети 140.252.13? Для направления датаграмм в другие хосты должна использоваться маршрутизация. Где-либо в сети 140.252 должны быть сделаны записи в таблице маршрутизации, поэтому все датаграммы, направляющиеся в подсеть 140.252.13 или в указанные хосты этой подсети, будут направляться на маршрутизатор netb. Этот маршрутизатор знает, как доставить датаграммы в их конечный пункт назначения, отправляя их через маршрутизатор sun.

    Уполномоченный агент ARP также называется смешанным (promiscuous ARP) или расщепленным (ARP hack). Эти имена появились благодаря другому использованию уполномоченных агентов ARP: они применялись для того, чтобы спрятать друг от друга две физические сети между которыми находился маршрутизатор. В этом случае обе физические сети использовали один и тот же идентификатор сети, так как маршрутизатор, находящийся между ними, был сконфигурирован как уполномоченный ARP агент, чтобы отвечать на ARP запросы из одной сети к хостам в другой сети. Эта техника использовалась в прошлом, чтобы спрятать группу хостов с более старой версией TCP/IP на отдельном физическом кабеле. Две причины, по которым приходилось отделять эти "устаревшие" хосты, заключались в том, что, во-первых, они не могли поддерживать разделение на подсети и, во-вторых, использовали старые широковещательные адреса (идентификатор хоста состоял из всех нулевых бит вместо современного стандарта, при котором идентификатор хоста состоит из единичных битов).

    "Беспричинный" ARP

    Другая характеристика ARP, которую стоит рассмотреть - "беспричинный" ARP (gratuitous ARP). Он проявляется, когда хост посылает ARP запрос, основываясь на собственном IP адресе. Обычно это делается, когда интерфейс конфигурируется во время загрузки.

    Если мы запустим tcpdump на хосте sun при загрузке хоста bsdi, то увидим пакет, показанный на рисунке 4.7.

    1 0.0 0:0:c0:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60:
    arp who-has 140.252.13.35 tell 140.252.13.35

    Рисунок 4.7 Пример "беспричинного" ARP.

    (Мы использовали флаг -n программы tcpdump, чтобы напечатать адреса в цифровом десятичном виде вместо имен хостов.) В терминах полей ARP запроса, адрес протокола отправителя и адрес протокола назначения идентичны: 140.252.13.35 (что соответствует хосту bsdi). Адрес источника в заголовке Ethernet, 0:0:c0:6f:2d:40 как показано программой tcpdump, эквивалентен аппаратному адресу отправителя (из рисунка 4.4).

    "Беспричинный" ARP предоставляет две характеристики.

    1. Он позволяет хосту определить, существует ли другой хост с тем же самым IP адресом. Хост bsdi не ожидает отклика на свой запрос, однако если отклик принят, на консоли возникает сообщение об ошибке "обнаружен дублирующий IP адрес с Ethernet адресом: a:b:c:d:e:f". Это предупреждение системному администратору о том, что одна из систем неправильно сконфигурирована.
    2. Если хост, посылающий "беспричинный" ARP, только что изменил свой аппаратный адрес (может быть потому, что хост был выключен, удалена интерфейсная плата и затем хост был перезагружен), этот пакет заставляет другой хост на кабеле, который имеет запись в своем кэше для старого аппаратного адреса, обновить ARP кэш соответствующим образом. Малоизвестный факт о протоколе ARP заключается в том, что если хост получает ARP запрос для IP адреса, который он уже имеет в кэше, содержимое кэша обновляется аппаратным адресом отправителя (Ethernet адресом) из запроса ARP. Это делается для любого запроса ARP, полученного хостом. (Повторим, что ARP запросы широковещательные, поэтому такие действия осуществляются всеми хостами в сети каждый раз при появлении ARP запроса.) описывает приложения, которые используют эту характеристику ARP. Она позволяет запасному (backup) файл-серверу занять место вышедшего из строя сервера с использованием "беспричинного" ARP запроса с запасным аппаратным адресом, однако с тем же IP адресом, который имел вышедший из строя хост. При этом все пакеты, направляемые серверу, вышедшему из строя, будут посланы на запасной сервер, а пользовательские приложения не будут знать о том, что основной сервер вышел из строя.
    К сожалению, авторы затем отказались от этого подхода, так как он зависит от корректности реализации ARP на всех типах клиентов. Существуют различные типы ARP, которые не поддерживают эту спецификацию.

    Наблюдения за всеми системами в подсети, используемой в этой книге, показывает, что SunOS 4.1.3 и 4.4BSD используют "беспричинный" ARP при загрузке, а SVR4 не поддерживает эту характеристику.

    Команда arp

    Мы использовали эту команду с флагом -a, чтобы отобразить все записи ARP кэша. Существуют и другие опции.

    Суперпользователь может использовать опцию -d, чтобы удалить запись из ARP кэша. (Это было сделано перед запуском некоторых примеров, чтобы показать изменения ARP.)

    Записи могут быть добавлены с использованием опции -s. При использовании этой опции необходимо указать имя хоста и Ethernet адрес, IP адрес, соответствующий имени хоста, и Ethernet адрес добавляются в кэш. Подобная запись делается на постоянной основе (она не будет удалена из кэша по тайм-ауту), если только в конце командной строки не будет использовано ключевое слово temp.

    Ключевое слово pub в конце командной строки с опцией -s приведет к тому, что система будет функционировать как ARP агент для этого хоста. Система будет отвечать на ARP запросы для IP адресов, соответствующих имени хоста, при этом ответ будет содержать указанный Ethernet адрес. Если объявленный адрес это адрес самой отвечающей системы, это означает, что система работает как уполномоченный агент ARP для указанного имени хоста.

    Краткие выводы

    ARP это основной протокол, который используется практически во всех реализациях TCP/IP. Обычно его функционирование не зависит от используемых приложений или воли системного администратора. ARP кэш является фундаментом этой работы. Мы использовали команду arp, чтобы просмотреть или модифицировать кэш. Каждая запись в кэше имеет таймер, который используется для удаления незавершенных или завершенных записей. Команда arp отображает модифицированные записи в ARP кэше.

    Мы посмотрели обычное функционирование ARP и специализированные версии: уполномоченный агент ARP (когда маршрутизатор отвечает на ARP запросы для хостов, находящихся на другом интерфейсе маршрутизатора) и "беспричинный" ARP (посылающий ARP запросы для своего собственного IP адреса, обычно во время загрузки).

    Упражнения

    1. Вернемся к команде, которую мы исполнили, чтобы получить вывод, показанный на рисунке 4.4. Что произойдет, если после того как мы проверили локальный ARP кэш и он оказался пустым, мы введем команду

      bsdi % rsh svr4 arp -a

      чтобы проверить, что ARP кэш также пуст на хосте назначения? (Эта команда исполнит команду arp -a на хосте svr4.)

    2. Опишите тест, который позволит определить, корректно ли обрабатывает определенный хост "беспричинные" ARP запросы.
    3. Шаг номер 7 в разделе может занять определенное время (миллисекунды), потому что пакет отправлен и ARP ожидает ответа. Как Вы думаете, обработает ли ARP несколько датаграмм, которые прибыли от IP на тот же адрес назначения в течение этого периода времени?
    4. В конце раздела мы упомянули, что RFC Host Requirements и Berkeley реализации отличаются с точки зрения обработки тайм-аутов для активных записей ARP. Что произойдет, если клиент Berkeley постарается установить контакт с сервером, который был выключен и из него была удалена плата Ethernet? Изменится ли что-нибудь, если сервер выдаст "беспричинный" ARP запрос при загрузке?

    Лекция 6

    ARP и RARP

    Что такое ARP

    ARP-запросы, ARP-таблицы, ARP-ответы и кадры ARP-запросов

    Обновление ARP-таблиц RARP

    RARP-серверы, RARP-запросы и кадры RARP-ответов

    Какие межсетевые устройства имеют ARP-таблицы

    Определение шлюза по умолчанию

    ARP (англ. Address Resolution Protocol – протокол разрешения адресов) - протокол сетевого уровня (англ. Network Link layer), предназначенный для преобразования IP-адресов (адресов сетевого уровня) в MAC-адреса (адреса канального уровня) в сетях TCP/IP.

    Протоколы определяют, передаются ли данные через сетевой уровень к верхним уровням эталонной модели OSI. В основном, для того чтобы это произошло, необходимо, чтобы пакет данных содержал MAC- и IP-адрес пункта назначения. Если в пакете данных отсутствует один из этих адресов, данные не будут переданы на верхние уровни Таким образом, MAC- и IP-адрес служат для своего рода проверки и дополнения друг друга Когда отправитель определил IP-адрес получателя (рис 6 1), он смотрит в свою ARP-таблицу, для того чтобы узнать его МАС-адрес. Если источник обнаруживает, что MAC- и IP-адрес получателя присутствуют в его таблице, он устанавливает соответствие между ними, а затем использует их в ходе инкапсуляции данных После этого пакет данных по сетевой среде отправляется адресату (рис 6 2).

    Рис.6.1. Источник сверяется со своей ARP-таблицей после того, как опреде­лит IP-адрес пункта назначения

    Рис. 6.2. Данные принимаются получателем, после того как установлено со­ответствие между MAC- и IP-адресами и инкапсулированы банные

    ARP-запросы

    В примере, показанном на рис. 6.3, отправитель хочет отправить данные другому устройству. Он знает IP-адрес получателя, но МАС-адрес получателя в его ARP-таблице отсутствует. Поэтому устройство инициирует процесс, называемый ARP-запросом, который позволяет определить этот МАС-адрес. Сначала устройство создает пакет ARP-запроса и посылает его всем устройствам в сети. Для того чтобы пакет ARP-запроса был замечен всеми устройствами в сети, источник использует МАС-адрес широковещания. Адрес широковещания, используемый в схеме МАС-адресации, имеет значение F во всех разрядах. Таким образом, МАС-адрес широковещания имеет вид FF-FF-FF-FF-FF-FF.



    Рис. 6.3. Отправитель не может обнаружить МАС-адрес получателя в своей ARP-таблице

    ARP-запросы структурированы определенным способом. Поскольку протокол ARP функционирует на нижних уровнях эталонной модели OSI, сообщение, в котором содержится ARP-запрос, должно быть инкапсулировано внутри кадра протокола аппаратных средств. Таким образом, кадр ARP-запроса состоит из двух частей: заголовка и ARP-сообщения (рис. 6.4).

    Рис 6.4. Кадр ARP-запроса состоит из заголовка и ARP-сообщения

    МАС-за головок

    Кроме того, заголовок кадра разделен на MAC- и IP-заголовок (рис. 6.5).

    Рис. 6.5. Заголовок кадра состоит MAC- и IP-заголовка

    ARP-ответы

    Поскольку пакет ARP-запроса посылается в режиме широковещания, его принимают все устройства в локальной сети и передают для анализа на сетевой уровень. Если IP-адрес устройства соответствует IP-адресу пункта назначения, содержащемуся в ARP-запросе, устройство откликается путем отправки источнику своего МАС-адреса. Этот процесс называется ARP-ответом. В примере, показанном на рис. 6.3, источник 197.15.22.33 запрашивает МАС-адрес получателя, имеющего IP-адрес 197.15.22.126. Получатель 197.15.22.126 принимает ARP-запрос и откликается путем отправки ARP-ответа, содержащего его МАС-адрес.

    Рис. 6.6. Структура ARP-ответа включает MAC- и IP-заголовок, а также сообщение ARP-ответа.

    Когда устройство, создавшее ARP-запрос, получает ответ, оно извлекает МАС-адрес из МАС-заголовка и обновляет свою ARP-таблицу. Теперь, когда устройство имеет всю нужную ему информацию, оно может добавить к данным MAC- и IP-адрес пункта назначения. Устройство использует эту новую структуру кадра для инкапсуляции данных перед отправкой их по сети (рис. 6.7).

    Когда данные достигают адресата, производится сравнение на канальном уровне. Канальный уровень убирает МАС-заголовок и передает данные на следующий уровень эталонной модели OSI - сетевой. Сетевой уровень анализирует данные и обнаруживает, что его IP-адрес соответствует IP-адресу назначения, содержащемуся в IP-заголовке данных. Сетевой уровень убирает IP-заголовок и передает данные следующему более высокому уровню - транспортному (уровень 4). Этот процесс повторяется, пока остаток пакета не достигнет приложения, где данные будут прочитаны.

    Рис.6.7. Перед отправкой данных через сеть данные инкапсулируются с использованием новой структуры кадра

    ARP-таблицы

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

    Некоторые устройства поддерживают таблицы, в которых содержатся MAC- и IP-адреса всех устройств, подключенных к той же сети. Эти таблицы - просто разделы в оперативной памяти каждого устройства. Они называются ARP-таблицами, поскольку содержат карту соответствия IP-адресов МАС-адресам (рис. 6.8). В большинстве случаев ARP-таблицы кэшируются в памяти и поддерживаются автоматически. Ситуации, когда сетевой администратор модифицирует записи в ARP-таблице вручную, редки. Каждый компьютер в сети содержит собственную ARP-таблицу. Каждый раз, когда устройство хочет передать данные по сети, оно использует для этого информацию, содержащуюся в его ARP-таблице.

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

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

    Как было сказано выше, для того, чтобы сетевое устройство могло отправить данные на уровень 4 (транспортный) эталонной модели OSI, необходимы и MAC-, и IP-адрес. Таким образом, MAC- и IP-адрес служат для проверки и дополнения друг друга. Чтобы получатель, принимающий данные, знал, кто их отправил, пакет данных должен содержать MAC- и IP-адреса источника. А что произойдет, если источник знает свой МАС-адрес, но не знает своего IP-адреса? Протокол, который используют устройства, если не знают своего IP-адреса, называется протоколом обратного преобразования адреса (Reverse Address Resolution Protocol, RARP). Как и ARP, RARP связывает МАС-адреса с IP-адресами, чтобы сетевое устройство могло использовать их для инкапсуляции данных перед отправкой в сеть. Для использования данного протокола в сети должен присутствовать RARP-сервер, отвечающий на RARP-запросы (рис 6.9).

    RARP-запросы

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

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

    Рис. 6.10. АКР- и RARP-запросы и имеют одинаковую структуру

    Так как RARP-запрос посылается в режиме широковещания, его видят все устройства в сети. Однако только специальный RARP-сервер может отозваться на RARP-запрос. RARP-сервер служит для отправки RARP-ответа, в котором содержится IP-адрес устройства, создавшего RARP-запрос.

    RARP-ответы

    RARP-ответы имеют такую же структуру, как и ARP-ответы. RARP-ответ состоит из сообщения RARP-ответа, MAC- и IP-заголовка. Когда устройство, создавшее RARP-запрос, получает ответ, оно обнаруживает свой IP-адрес. На рис. 6.11 показано, что происходит в ситуации, когда сервер с IP-адресом 197 .15.22.126 откликается на IP-запрос от бездисковой рабочей станции с МАС-адресом 08-00-20-67-92-89. Когда устройство, создавшее RARP-запрос, получает ответ, оно копирует свой IP-адрес в кэш-память, где тот будет храниться на протяжении всего сеанса работы. Однако, когда терминал будет выключен, эта информация снова исчезнет. Пока же сеанс продолжается, бездисковая рабочая станция, создавшая запрос, может использовать полученную таким способом информацию для отправки и приема данных.

    Маршрутизаторы и ARP-таблицы

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

    Рис. 6.12. IP-адреса приводятся в соответствие с МАС-адресами с помощью ARP-таблиц.

    Маршрутизатор может быть подключен к нескольким сетям или подсетям. Вообще, сетевые устройства имеют наборы только тех MAC- и IP-адресов, которые регулярно повторяются. Короче говоря, это означает, что типичное устройство содержит информацию об устройствах своей собственной сети. При этом об устройствах за пределами собственной локальной сети известно очень мало. В то же время маршрутизатор строит таблицы, описывающие все сети, подключенные к нему. В результате ARP-таблицы маршрутизаторов могут содержать MAC- и IP-адреса устройств более чем одной сети (6.13). Кроме карт соответствия IP-адресов МАС-адресам в таблицах маршрутизаторов содержатся отображения портов (рис. 6.14).

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

    Шлюз по умолчанию

    Если источник расположен в сети с номером, который отличается от номера сети назначения, и источник не знает МАС-адрес получателя, то для того, чтобы доставить данные получателю, источник должен воспользоваться услугами маршрутизатора. Если маршрутизатор используется подобным образом, то его называют шлюзом по умолчанию (default gateway). Чтобы воспользоваться услугами шлюза по умолчанию, источник инкапсулирует данные, помещая в них в качестве МАС-адреса назначения МАС-адрес маршрутизатора. Так как источник хочет доставить данные устройству, а не маршрутизатору, то в заголовке в качестве IP-адреса назначения используется IP-адрес устройства, а не маршрутизатора (рис. 6.16).

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

    Резюме

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

    v Если IP-адрес устройства совпадает с IP-адресом, содержащимся в ARP-запросе, устройство откликается, посылая источнику свой МАС-адрес. Эта процедура называется ARP-ответом.

    v Если источник не может обнаружить МАС-адрес пункта назначения в своей ARP-таблице, он создает ARP-запрос и отправляет его в широковещательном режиме всем устройствам в сети.

    v Если устройство не знает собственного IP-адреса, оно использует протокол RARP.

    v Когда устройство, создавшее RARP-запрос, получает ответ, оно копирует свой IP-адрес в кэш-память, где этот адрес будет храниться на протяжении всего сеанса работы.

    v Маршрутизаторы, как и любые другие устройства, принимают и отправляют данные по сети, поэтому они также строят ARP-таблицы, в которых содержатся отображения IP-адресов на МАС-адреса.

    v Если источник расположен в сети с номером, который отличается от номера сети назначения, и источник не знает МАС-адрес получателя, то для того, чтобы доставить данные получателю, источник должен использовать маршрутизатор в качестве шлюза по умолчанию.

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

    1. Какой Internet-протокол используется для отображения IP-адресов на МАС-адреса?

    2. Кто инициирует ARP-запросы?

    A. Устройство, которое не может обнаружить IP-адрес назначения в своей ARP-таблице.

    B. RARP-сервер, в ответ на запрос устройства, работающего со сбоями.

    C. Бездисковые рабочие станции с пустым кэшем.

    В 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

    Оценка: 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.

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

    Любое устройство, подключенное к локальной сети (Ethernet, FDDI и т.д.), имеет уникальный физический сетевой адрес, заданный аппаратным образом. 6-байтовый Ethernet-адрес выбирает изготовитель сетевого интерфейсного оборудования из выделенного для него по лицензии адресного пространства. Если у машины меняется сетевой адаптер, то меняется и ее Ethernet-адрес.

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

    Протокол ARP (address resolution protocol, RFC-826) решает именно эту проблему - преобразует ARP- в Ethernet-адреса.

    ARP-таблица для преобразования адресов

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

    IP-адрес Ethernet-адрес
    223.1.2.1 223.1.2.3 223.1.2.4 08:00:39:00:2F:C3 08:00:5A:21:A7:22 08:00:10:99:AC:54

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

    Принято все байты 4-байтного IP-адреса записывать десятичными числами, разделенными точками. При записи 6-байтного Ethernet-адреса каждый байт указывается в 16-ричной системе и отделяется двоеточием.

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

    Протокол межсетевых управляющих сообщений ICMP (Internet Control Message Protocol) является обязательным стандартом TCP/IP, описанным в документе RFC 792, «Internet Control MessageProtocol (ICMP)». Используя ICMP, узлы и маршрутизаторы, связывающиеся по протоколу IP, могут сообщать об ошибках и обмениваться ограниченной управляющей информацией и сведениями о состоянии.



    ICMP-сообщения обычно автоматически отправляются в следующих случаях.

    Протокол обмена управляющими сообщениями ICMP (Internet Control Message Protocol) позволяет маршрутизатору сообщить конечному узлу об ошибках, с которыми машрутизаторстолкнулся при передаче какого-либо IP-пакета от данного конечного узла.

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

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

    Каждое сообщение протокола ICMP передается по сети внутри пакета IP. Пакеты IP с сообщениями ICMP маршрутизируются точно так же, как и любые другие пакеты, без приоритетов, поэтому они также могут теряться. Кроме того, в загруженной сети они могут вызывать дополнительную загрузку маршрутизаторов. Для того, чтобы не вызывать лавины сообщения об ошибках, потери пакетов IP, переносящие сообщения ICMP об ошибках, не могут порождать новые сообщения ICMP.

    Формат ICMP-пакета

    ICMP-сообщения инкапсулируются и передаются в IP-датаграммах, как показано на следующем рисунке.

    Существует несколько типов сообщений ICMP. Каждый тип сообщения имеет свой формат, при этом все они начинаются с общих трех полей: 8-битного целого числа, обозначающего тип сообщения (TYPE), 8-битного поля кода (CODE), который конкретизирует назначение сообщения, и 16-битного поля контрольной суммы (CHECKSUM). Кроме того, сообщение ICMP всегда содержит заголовок и первые 64 бита данных пакета IP, который вызвал ошибку. Это делается для того, чтобы узел-отправитель смог более точно проанализировать причину ошибки, так как все протоколы прикладного уровня стека TCP/IP содержат наиболее важную информацию для анализа в первых 64 битах своих сообщений.



    Прежде всего, TCP и UDP - протоколы. А основное их отличие в том TCP - протокол с гарантированной доставкой пакетов, UDP - нет.

    TCP - «гарантированный» транспортный механизм с предварительным установлением соединения, предоставляющий приложению надёжный поток данных, дающий уверенность в безошибочности получаемых данных, перезапрашивающий данные в случае потери и устраняющий дублирование данных. TCP позволяет регулировать нагрузку на сеть, а также уменьшать время ожидания данных при передаче на большие расстояния. Более того, TCP гарантирует, что полученные данные были отправлены точно в такой же последовательности. В этом его главное отличие от UDP.

    UDP протокол передачи датаграмм без установления соединения. Также его называют протоколом «ненадёжной» передачи, в смысле невозможности удостовериться в доставке сообщения адресату, а также возможного перемешивания пакетов. В приложениях, требующих гарантированной передачи данных, используется протокол TCP.
    UDP обычно используется в таких приложениях, как потоковое видео и компьютерные игры, где допускается потеря пакетов, а повторный запрос затруднён или не оправдан, либо в приложениях вида запрос-ответ (например, запросы к DNS), где создание соединения занимает больше ресурсов, чем повторная отправка.
    И TCP, и UDP используют для определения протокола верхнего уровня число, называемое портом.

    Rip ospf

    В первое время RIP распространялся вместе с операционной системой BSD и не рассматривался в качестве стандарта для Интернет. Однако впоследствии, подобно множеству других служб BSD, он стал критически важным элементом IP-сетей. В настоящее время в документах IETF закреплено две версии RIP: версия 1 (исходная) - в RFC 1058 и версия 2 - в RFC 1722 (Internet Standard 56). Обе они похожи, но между ними имеются некоторые важные различия.

    Протокол RIP основан на алгоритме “длины векторов” (distance-vector), который связывает длину маршрута (число переходов - hops) с его вектором (сетью или хостом назначения). Информацию о маршрутах к тем или иным сетям/хостам устройства RIP получают от соседних маршрутизаторов и затем выбирают маршрут с наименьшим числом переходов. Как только маршрут к месту назначения выбран, он сохраняется в локальной базе данных, а информация обо всех остальных маршрутах к тому же месту назначения стирается. Периодически каждый маршрутизатор сообщает остальным об обнаруженных им маршрутах.

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

    Протокол OSPF появился как ориентированный на IP-сети вариант протокола IS-IS. Он определен в нескольких документах IETF: в RFC 1131 описан OSPF 1 (устаревшая версия), в RFC 1583, - вероятно, самая распространенная версия OSPF 2, и, наконец, в RFC 2328 определен последний вариант OSPF 2 (Internet Standard 54).

    При использовании OSPF на каждом маршрутизаторе содержится независимая база данных по административной области маршрутизации, включающая информацию о доступных сетях, маршрутизаторах и стоимости каждого соединения. Когда состояние сети, маршрутизатора или интерфейса изменяется, каждый обнаруживший это маршрутизатор (в пределах области) вносит информацию в локальную базу данных, а затем соответственно перестраивает карты маршрутизации. Выбор маршрута производится с учетом стоимости всех маршрутов к конкретной точке назначения и напрямую не зависит от числа переходов. Другими словами, для выбора оптимальных маршрутов в OSPF применяется алгоритм “стоимости векторов” (cost vector).

    Эта модель предоставляет больше возможностей для улучшения маршрутизации (например, быстрее происходит синхронизация изменений), но требует большей вычислительной мощности и большего объема памяти от участвующих в процессе машин. По этой причине на рынке гораздо шире представлены системы с поддержкой RIP, нежели OSPF. Например, хотя во многих серверных ОС имеются те или иные OSPF-демоны, лишь очень небольшое число сетевых клиентов или устройств низшего класса поддерживают OSPF, поскольку даже для пассивного “прослушивания” приходится снабжать устройство полнофункциональным механизмом анализа базы данных OSPF.

    В основе архитектуры OSPF лежит концепция административных областей. Маршрутизаторы, работающие в одной области, обмениваются подробной информацией о ней, но маршрутизаторам из удаленных областей передаются только общие сведения. Если имеется несколько областей, то для обмена информацией между ними организуется магистральная (стержневая) область. Через нее пограничные устройства будут обмениваться общей информацией, что означает наличие в OSPF двухуровневой иерархии обмена маршрутной информацией между областями (это относится не ко всему сетевому трафику, а только к сообщениям протоколов маршрутизации).

    Областям присваиваются 32-битовые идентификаторы (обычно они представлены в виде адресов IPv4), магистраль же всегда имеет номер 0. Маршрутизаторы могут одновременно присутствовать в нескольких областях, но для каждой из них они должны хранить отдельную базу данных о состоянии соединений. Согласно терминологии OSPF, маршрутизатор, присутствующий одновременно в нескольких областях, называется ABR (Area Border Router), а маршрутизатор, обменивающийся данными с другим протоколом маршрутизации, - ASBR (Autonomous System Border Router).