12. РЕАЛИЗАЦИЯ МЕЖСЕТЕВОГО
ВЗАИМОДЕЙСТВИЯ СРЕДСТВАМИ TCP/IP
12.4. Отображение IP-адресов на
локальные адреса
Непосредственно с решением этой задачи связан уровень
межсетевых интерфейсов стека TCP/IP, который должен заниматься крайне важной
задачей отображения IP-адресов в локальные адреса.
Для определения локального адреса по IP-адресу используется протокол разрешения адреса (Address Resolution Protocol, ARP). Протокол ARP работает различным образом
в зависимости от того, какой протокол канального уровня работает в данной сети.
Существует также протокол, решающий обратную задачу — нахождение IP-адреса по
известному локальному адресу. Он называется реверсивным ARP (Reverse Address Resolution Protocol, RARP) и
используется при старте бездисковых станций, не знающих в начальный момент
своего IP-адреса, но знающих адрес своего сетевого адаптера.
Необходимость в обращении к протоколу ARP возникает
каждый раз, когда модуль IP передает пакет на уровень сетевых интерфейсов.
IP-адрес узла назначения известен модулю IP. Требуется на его основе найти МАС-адрес узла назначения.
Работа протокола ARP начинается с просмотра так
называемой ARP-таблицы. Каждая строка
таблицы устанавливает соответствие между IP-адресом и МАС-адресом.
Для каждой сети, подключенной к сетевому адаптеру компьютера или к порту маршрутизатора, строится отдельная ARP-таблица:
IP-адрес
|
МАС-адрес
|
Тип
записи |
194.85.135.75
194.85.135.70 194.85.60.21 |
008048ЕВ7Е60
08005А21А722 008048ЕВ7567 |
Динамический Динамический Статический
|
Поле «Тип записи» может содержать одно из двух
значений — «динамический» или «статический». Статические записи создаются
вручную с помощью утилиты arp и не имеют срока устаревания, точнее, они существуют
до тех пор, пока компьютер или маршрутизатор не будут
выключены. Динамические же записи создаются модулем протокола ARP, использующим
широковещательные возможности локальных сетевых технологий. Динамические записи
должны периодически обновляться. Если запись не обновлялась в течение определенного
времени (порядка нескольких минут), то она исключается из таблицы. Таким образом,
в ARP-таблице содержатся записи не обо всех узлах сети, а только о тех, которые
активно участвуют в сетевых операциях. Поскольку такой способ хранения
информации называют кэшированием, ARP-таблицы иногда называют ARP-кэш.
Итак, после того как модуль IP обратился к модулю ARP
с запросом на разрешение адреса, происходит поиск в ARP-таблице указанного в
запросе IP-адреса. Если таковой адрес отсутствует, то исходящий IP-пакет,
ставится в очередь. Далее протокол ARP формирует свой запрос (ARP-запрос),
вкладывает его в кадр протокола канального уровня и рассылает запрос
широковещательно.
Все узлы локальной сети получают ARP-запрос и
сравнивают указанный там IP-адрес с собственным. В
случае их совпадения узел формирует ARP-ответ, в котором указывает свой
IP-адрес и свой локальный адрес, а затем отправляет его уже направленно, так
как в ARP-запросе отправитель указывает свой локальный адрес. ARP-запросы и
ответы используют один и тот же формат пакета. Пример ARP-запроса:
Тип сети Тип протокола Длина локального адреса Длина сетевого адреса Опция Локальный адрес отправителя Сетевой адрес отправителя Локальный (искомый) адрес получателя Сетевой адрес получателя |
1 (0x1) 2048 (0x800) 6 (0x6) 4 (0x4) 1 (0x1) 008048ЕВ7Е60 194.85.135.75 000000000000 194.85.135.65 |
В поле «тип сети» для сетей Ethernet
указывается значение 1.
Поле «тип протокола» позволяет использовать протокол
ARP не только протокола IP, но и для других сетевых протоколов. Для IP значение
этого поля равно 080016.
Длина локального адреса для протокола 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 (0x1) 2048 (0x800) 6 (0x6) 4 (0x4) 2 (0x2) 00E0F77F1920 194.85.135.65 008048ЕВ7Е60 194.85.135.75 |
Этот ответ получает машина, сделавшая ARP-запрос.
Модуль ARP анализирует ARP-ответ и
добавляет запись в свою ARP-таблицу. В результате обмена этими двумя ARP-сообщениями
модуль IP-узла 194.85.135.75 определил, что IP-адресу 194.85.135.65
соответствует МАС-адрес 00E0F77F1920. Новая запись в
ARP-таблице появляется автоматически, спустя несколько миллисекунд после того,
как она потребовалась.
Обновленная ARP-таблица:
IP-адрес
|
МАС-адрес
|
Тип
записи |
194.85.135.75 194.85.135.70 194.85.60.21 194.85.135.65
|
008048ЕВ7Е60 08005А21А722 008048ЕВ7567 00E0F77F1920
|
Динамический Динамический
Статический Динамический |