ARP

Простейший пример когда создается 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 таблицу.

фотка 1

Далее читаем о реализации DNS сервера.