Простейший пример когда создается ARP запрос от ПК к сетевому адаптеру .
После включения сетевого адаптера , он прописывается через DHCP протокол в системе как сетевая карта . То есть прописывается как новая сеть со своим сервером DHCP, DNS и со своей маской сети .
К примеру :
192.168.7.1 DHCP , DNS сервер, он же шлюз
192.168.7.4 сет. адаптер
255.255.255.0
Потом мы в браузере вводии 192.168.7.2. И вот тут виндоус понимает , что этот ip в нашей сети 192.168.7.x и делает первым делом именно ARP запрос, так как она (Windows) еще не знает мак адрес устройства, чтобы послать tcp/http запроc/
Путь пакета ARP по функциям:
main()
usb_polling()
ethernet_input()
etharp_input()
etharp_raw()
// если этот пакет для нас и ip адрес в запросе наш
// мы отвечаем наш мак адрес
ethernet_output()
linkoutput_fn()
rndis_send() // ответ в USB канал
Если нам есть , что ответить мы отвечаем примерно так :
ethernet_input: dest:FF:FF:FF:FF:FF:FF, src:20:89:84:6A:96:02, type:806
arp ( src : 20:89:84:6a:96:02 192.168.7.4 -> dest : [ 00:00:00:00:00:00 ] 192.168.7.2 )
for_us = 1
etharp_update_arp_entry :
20 89 84 6a 96 02 0407a8c0 192.168.7.4
// вот тут произошла запись во внутреннюю таблицу ARP контроллера
// обратите внимание это данные отправителя
00 00 00 00 00 00 00000000 0.0.0.0
.....
ARP_REQUEST
send ARP response src : [20:89:84:6a:96:03 ] 192.168.7.2 20:89:84:6a:96:02 ] 192.168.7.4
В ответе ПК узнает , что у 192.168.7.2 мак [20:89:84:6a:96:03].
И теперь ПК знает куда слать ip пакеты. Пк добавил себе запись в ARP таблицу.
Далее читаем о реализации DNS сервера.