Недавно я начал изучать модель OSI, сети и прочее.
Поскольку я люблю кодировать на C, я хотел отправлять свои собственные кадры Ethernet.
Теперь я получил это работает; Тем не менее, я все еще не уверен в одном:
При отправке кадра Ethernet от машины А для машины B (при условии , что обе машины находятся в одной и той же сети), то , что MAC - адрес я должен указать в качестве назначения MAC - адрес кадра?
Я попробовал MAC-адрес моего маршрутизатора и MAC-адрес компьютера B, оба способа работают. Чтобы получить MAC-адрес машины B, я просто сделал ARP-запрос.
Тем не менее, каков правильный путь?
Я отслеживал трафик с помощью Wireshark на машине A и с помощью tcpdump на машине B. Это вывод на машине B (e0:d5:5e:c6:52:9a
- это MAC-адрес машины B):
При указании MAC-адреса машины B в качестве адреса назначения (a0:ce:c8:10:75:8c
- это MAC-адрес NIC машины A):
18:42:46.152800 a0:ce:c8:10:75:8c > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 64: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5
При указании MAC-адреса маршрутизатора в качестве адреса назначения (c8:0e:14:fd:f3:23
- это MAC-адрес NIC маршрутизатора):
18:45:04.735375 c8:0e:14:fd:f3:23 > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 60: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5
Этот результат показывает, что маршрутизатор перезаписывает исходный MAC-адрес и, вероятно, использует свой кэш для определения правильного MAC-адреса назначения для IP-адреса назначения.
Как маршрутизатор обрабатывает кадр, в котором указан MAC-адрес компьютера B ?
Есть ли разница между обоими способами?
Есть ли один предпочтительный / правильный путь?