Протокол ARP (RFC 826)
. Address Resolution Protocol используется для определения соответствия IP-адреса адресу Ethernet. Протокол используется в локальных сетях. Отображение осуществляется только в момент отправления IP-пакетов, так как только в этот момент создаются заголовки IP и Ethernet. Отображение адресов осуществляется путем поиска в ARP-таблице. Упрощенно, ARP-таблица состоит из двух столбцов:
IP-адрес | Ethernet-адрес |
223.1.2.1 | 08:00:39:00:2F:C3 |
223.1.2.3 | 08:00:5A:21:A7:22 |
223.1.2.4 | 08:00:10:99:AC:54 |
В первом столбце содержится IP-адрес, а во втором Ethernet-адрес. Таблица соответствия необходима, так как адреса выбираются произвольно и нет какого-либо алгоритма для их вычисления. Если машина перемещается в другой сегмент сети, то ее ARP-таблица должна быть изменена.
Таблицу ARP можно посмотреть, используя команду arp:
quest:/usr/paul:\[8\]%arp -a paul.polyn.kiae.su (144.206.192.34) at 0:0:1:16:2:45 polyn.net.kiae.su (144.206.130.137) at 0:1:1b:9:d0:90 arch.kiae.su (144.206.136.10) at 0:0:c:1b:ae:7b demin.polyn.kiae.su (144.206.192.4) at 0:0:1:16:29:80 quest:/usr/paul:\[9\]%
Правда здесь существуют нюансы. В каждый момент времени таблица ARP разная. Это хорошо видно на следующем примере:
Ix: {8} arp -a polyn.net.kiae.su (144.206.130.137) at 0:1:1b:9:d0:90 permanent quest.net.kiae.su (144.206.130.138) at 0:0:1b:12:32:32 ? (144.206.140.201) at 0:0:c0:89:c4:a4 polyn.net.kiae.su (144.206.160.32) at 0:80:29:b1:9f:e3 permanent Ix.polyn.kiae.su (144.206.160.33) at (incomplete) Ix: {9} ping apollo.polyn.kiae.su PING apollo.polyn.kiae.su (144.206.160.40): 56 data bytes 64 bytes from 144.206.160.40: icmp_seq=0 ttl=255 time=1.409 ms 64 bytes from 144.206.160.40: icmp_seq=1 ttl=255 time=0.799 ms 64 bytes from 144.206.160.40: icmp_seq=2 ttl=255 time=0.797 ms 64 bytes from 144.206.160.40: icmp_seq=3 ttl=255 time=0.857 ms ^C --- apollo.polyn.kiae.su ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.797/0.965/1.409 ms Ix: {10} arp -a polyn.net.kiae.su (144.206.130.137) at 0:1:1b:9:d0:90 permanent quest.net.kiae.su (144.206.130.138) at 0:0:1b:12:32:32 ? (144.206.140.201) at 0:0:c0:89:c4:a4 polyn.net.kiae.su (144.206.160.32) at 0:80:29:b1:9f:e3 permanent Ix.polyn.kiae.su (144.206.160.33) at (incomplete) apollo.polyn.kiae.su (144.206.160.40) at 8:0:9:b:3d:b8 Ix: {11}
В приведенном примере подчеркиванием выделены команды, которые пользователь вводил из командной строки. При первом использовании команды ARP в таблице ARP нет машины apollo.polyn.kiae.su, хотя она находится в том же сегменте Ethernet, что и машина polyn.net.kiae.su, на которой выполняются команды. После выполнения команды ping в таблицу добавляется новая строка, которая задает соответствие Ethernet-адреса машины apollo и ее IP-адреса.
Кроме этого, в обоих отчетах arp есть строка с пустым именем машины, а точнее символом "?" в имени машины. В разделе 3.1 будут подробно рассмотрены вопросы определения имени машины по IP-адресу и IP-адреса по имени машины. В данном случае для машины с адресом 144.206.140.201 просто не определено соответствие между IP-адресом и именем машины.
При работе в локальной IP-сети при обращении к какому-либо ресурсу, например архиву FTP, его Ethernet-адрес ищется по IP-адресу в ARP-таблице и после этого запрос отправляется на сервер.
ARP-таблица заполняется автоматически, что хорошо видно из приведенного ранее примера. Если нужного адреса в таблице нет, то в сеть посылается широковещательный запрос типа "чей это IP-адрес?". Все сетевые интерфейсы получают этот запрос, но отвечает только владелец адреса. При этом существует два способа отправки IP-пакета, для которого ищется адрес: пакет ставится в очередь на отправку или уничтожается. В первом случае за отправку отвечает модуль ARP, а во втором случае модуль IP, который повторяет посылку через некоторое время. Широковещательный запрос выглядит так:
IP-адрес отправителя | 223.1.2.1 |
Ethernet-адрес отправителя | 08:00:39:00:2F:C3 |
Искомый IP-адрес | 222.1.2.2 |
Искомый Ethernet-адрес | <пусто> |
IP-адрес отправителя | 222.1.2.2 |
Ethernet-адрес отправителя | 08:00:28:00:38:А9 |
IP-адрес получателя | 223.1.2.1 |
Ethernet-адрес получателя | 08:00:39:00:2F:C3 |
Следует отметить, что если искомого IP-адреса нет в локальной сети и сеть не соединена с другой сетью шлюзом, то разрешить запрос не удается. IP-модуль будет уничтожать такие пакеты, обычно по time-out (превышен лимит времени на разрешение запроса). Модули прикладного уровня, при этом, не могут отличить физического повреждения сети от ошибки адресации.
Однако в современной сети Internet, как правило, запрашивается информация с узлов, которые реально в локальную сеть не входят. В этом случае для разрешения адресных коллизий и отправки пакетов используется модуль IP.
Если машина соединена с несколькими сетями, т.е. она является шлюзом, то в таблицу ARP вносятся строки, которые описывают как одну, так и другую IP-сети. При использовании Ethernet и IP каждая машина имеет как минимум один адрес Ethernet и один IP-адрес. Собственно Ethernet-адрес имеет не компьютер, а его сетевой интерфейс. Таким образом, если компьютер имеет несколько интерфейсов, то это автоматически означает, что каждому интерфейсу будет назначен свой Ethernet-адрес. IP-адрес назначается для каждого драйвера сетевого интерфейса. Грубо говоря, каждой сетевой карте Ethernet соответствуют один Ethernet-адрес и один IP-адрес. IP-адрес уникален в рамках всего Internet.