1

Недавно я начал изучать модель 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 ?

Есть ли разница между обоими способами?

Есть ли один предпочтительный / правильный путь?

2 ответа2

2

Обычно правильный метод, если вы знаете, что конечный компьютер находится в локальной подсети, состоит в том, чтобы напрямую использовать MAC-адрес конечного компьютера (делая поиск ARP при необходимости). Это будет работать независимо от типа или содержимого кадра и, как правило, обходить маршрутизатор (он будет закорочен через коммутатор Ethernet).

Если кадр содержит IPv4 или IPv6, вы можете отправить его на маршрутизатор подсети, который выполнит поиск ARP и перенаправит полезную нагрузку кадра на любой хост, которому принадлежит IP-адрес назначения. (В конце концов, именно это и делают маршрутизаторы : они пересылают IP-пакеты - даже если это просто означает их отражение на том же интерфейсе.)

Однако отправка локальных пакетов через маршрутизатор неэффективна и в большинстве случаев совершенно не нужна. Для более дешевых маршрутизаторов это может означать, что пакет обрабатывается очень медленным ЦП (по сравнению с полной скоростью линии коммутатора Ethernet).

Тем не менее , второй метод случайна используются на практике, вместе с "клиентом изоляцией" ( так называемым "частный VLAN") функция коммутаторов и точками доступа.

2

Помните, что у Ethernet нет маршрутизаторов. Маршрутизаторы представляют собой концепцию уровня 3 (сетевой уровень, где, например, IP-адреса), который является уровнем выше Ethernet, о котором, как предполагается, сам Ethernet не знает.

Правильный адрес для ввода в поле назначения заголовка Ethernet - это MAC-адрес Ethernet хоста назначения.

В своем вопросе вы также упомянули отправку кадра Ethernet на хост, и, как выяснилось, кадр Ethernet содержал дейтаграмму IP для IP-хоста, отличного от адреса назначения Ethernet, на который вы ее отправили. Таким образом, IP-хост действовал как маршрутизатор, и он направил вашу IP-дейтаграмму для вас, отправив ее обратно в ту же локальную сеть Ethernet, но на этот раз с правильным адресом назначения Ethernet, соответствующим IP-адресу хоста, IP-датаграмма была адресом к.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .