Отображение IP-адресов на локальные адреса

Отображение IP-адресов на локальные адреса

Отображение IP-адресов на локальные адреса

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

Для определения локального адреса по IP-адресу используется протокол разрешения адреса (Address Resolution Protocol, ARP). Протокол ARP работает различным образом в зависимости от того, какой протокол канального уровня работает в данной сети - протокол локальной сети (Ethernet, Token Ring, FDDI) с возможностью широковещательного доступа одновременно ко всем узлам сети или же протокол глобальной сети (Х.25, frame relay), как правило не поддерживающий широковещательный доступ. Существует также протокол, решающий обратную задачу - нахождение IP-адреса по известному локальному адресу. Он называется реверсивным ARP (Reverse Address Resolution Protocol, RARP) и используется при старте бездисковых станций, не знающих в начальный момент своего IP-адреса, но знающих адрес своего сетевого адаптера. 

Необходимость в обращении к протоколу ARP возникает каждый раз, когда модуль IP передает пакет на уровень сетевых интерфейсов, например драйверу Ethernet. IP-адрес узла назначения известен модулю IP. Требуется на его основе найти МАС-адрес узла назначения. 

Работа протокола ARP начинается с просмотра так называемой ARP-таблицы. Каждая строка таблицы устанавливает соответствие между IP-адресом и МАС-адресом. Для каждой сети, подключенной к сетевому адаптеру компьютера или к порту маршрутизатора, строится отдельная ARP-таблица. 

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

IP-адрес MAC-адрес Тип записи
194.85.135.75       
194.85.135.70
194.85.60.21
008048eb7e60       
08005a21a722
008048eb7567
динамический       
динамический
статический

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

В глобальных сетях администратору сети чаще всего приходится вручную формировать ARP-таблицы, в которых он задает, например, соответствие IP-адреса адресу узла сети Х.25, который имеет для протокола IP смысл локального адреса. В последнее время наметилась тенденция автоматизации работы протокола ARP и в глобальных сетях. Для этой цели среди всех маршрутизаторов, подключенных к какой-либо глобальной сети, выделяется специальный маршрутизатор, который ведет ARP-таблицу для всех остальных узлов и маршрутизаторов этой сети. При таком централизованном подходе для всех узлов и маршрутизаторов вручную нужно задать только IP-адрес и локальный адрес выделенного маршрутизатора. Затем каждый узел и маршрутизатор регистрирует свои адреса в выделенном маршрутизаторе, а при необходимости установления соответствия между IP-адресом и локальным адресом узел обращается к выделенному маршрутизатору с запросом и автоматически получает ответ без участия администратора. Работающий таким образом маршрутизатор называют ARP-сервером. 

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

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

Пример ARP-запроса

тип сети
тип протокола
длина локального адреса
длина сетевого адреса
опция
локальный адрес отправителя
сетевой адрес отправителя
локальный (искомый) адрес получателя
сетевой адрес получателя
1(0*1)
2048 (0*800)
6 (0*6)
4 (0*4)
1(0*1)
008048eb7e60
194.85.135.75
000000000000
194.85.135.65       

В поле "тип сети" для сетей Ethernet указывается значение 1. 

Поле "тип протокола" позволяет использовать протокол ARP не только для протокола IP, но и для других сетевых протоколов. Для IP значение этого поля равно 0800i6. 

Длина локального адреса для протокола Ethernet равна 6 байт, а длина IP-адреса - 4 байт. В поле операции для ARP-запросов указывается значение 1, если это запрос, и 2, если это ответ. 

Из этого запроса видно, что в сети Ethernet узел с IP-адресом 194.85.135.75 пытается определить, какой МАС-адрес имеет другой узел той же сети, сетевой адрес которого 194.85.135.65. Поле искомого локального адреса заполнено нулями. 

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

Пример ARP-ответа

тип сети
тип протокола
длина локального адреса
длина сетевого адреса
опция
локальный адрес отправителя
сетевой адрес отправителя
локальный (искомый) адрес получателя
сетевой адрес получателя
1(0*1)
2048 (0*800)
6 (0*6)
4 (0*4)
2(0*1)
00e0f77f1920
194.85.135.65
008048eb7e60
194.85.135.75       

Этот ответ получает машина, сделавшая ARP-запрос. Модуль ARP анализирует ARP-ответ и добавляет запись в свою ARP-таблицу . В результате обмена этими двумя ARP-сообщениями модуль IP-узла 194.85.135.75 определил, что IP-адресу 194.85.135.65 соответствует МАС-адрес OOEOF77F1920. Новая запись в ARP-таблице появляется автоматически, спустя несколько миллисекунд после того, как она потребовалась.

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

IP-адрес MAC-адрес Тип записи
194.85.135.75       
194.85.135.70
194.85.60.21
194.85.135.65
008048eb7e60       
08005a21a722
008048eb7567
00e0f77f1920
динамический       
динамический
статический
динамический

Некоторые реализации IP и ARP не ставят IP-пакеты в очередь но время ожидания ARP-ответов. Вместо этого IP-пакет просто уничтожается, а его восстановление возлагается но модуль TCP или прикладной процесс, работающий через UDP. Такое восстановление выполняется с помощью тайм-аутов и повторных передач. Повторная передача сообщения проходит успешно, ток кок первая попытка уже вызвало заполнение ARP-таблицы.