У меня есть периферийное устройство FPGA. Я хочу отправлять и получать пакеты Ethernet на свой ноутбук через маршрутизатор+модемное устройство у себя дома. Мой ноутбук подключен к маршрутизатору+модему через Wi-Fi (для интернета), а я подключаю плату FPGA к маршрутизатору+модему через кабель Ethernet.
Какие протоколы и рукопожатия мне следует реализовать в моей ПЛИС, чтобы при отправке Ethernet-пакета с целевым IP+MAC-адресом моего ноутбука на маршрутизатор+модем, он пересылал этот Ethernet-пакет на мой ноутбук, подключенный к нему через Wi-Fi?
И таким же образом, когда мой ноутбук отправляет Ethernet-пакет с конечным IP+MAC-адресом моей ПЛИС на маршрутизатор, он пересылает его на мою ПЛИС, подключенную к нему через Ethernet-кабель?
Как именно маршрутизатор узнает IP+MAC-адрес моей ПЛИС (какое подтверждение связи сохранит эту информацию в маршрутизаторе)?
Если FPGA может выполнять TCP 3way handshake, отвечать на запросы ARP и запросы ping, будет ли этого достаточно для выполнения требуемой задачи, которую я указал выше? Как эти handshake сделают это возможным, что именно происходит, когда кабель Ethernet подключается к маршрутизатору, и какие handshake нужны маршрутизатору?
решение1
Я предполагаю, что у вас есть домашнее/персональное устройство, которое позиционируется как «маршрутизатор», который на самом деле включает в себя коммутатор уровня 2 для локальной сети и маршрутизатор уровня 3 (возможно, с NAT) для объединения локальной сети в глобальную сеть.
Какие протоколы и рукопожатия мне следует реализовать в моей ПЛИС, чтобы при отправке Ethernet-пакета с целевым IP+MAC-адресом моего ноутбука на маршрутизатор+модем, он пересылал этот Ethernet-пакет на мой ноутбук, подключенный к нему через Wi-Fi?
Если у вас есть статический IP-адрес для FPGA, вам просто нужно установить и обучить Ethernet-соединение, и тогда вы будете готовы отправлять данные с фиксированными исходными и конечными IP-адресами и MAC-адресами. Если вам нужен динамический IP для FPGA, вам нужно поддерживать DHCP (и все остальное, на что он полагается, например, UDP)
И таким же образом, когда мой ноутбук отправляет Ethernet-пакет с конечным IP+MAC-адресом моей ПЛИС на маршрутизатор, он пересылает его на мою ПЛИС, подключенную к нему через Ethernet-кабель?
Если у FPGA статический IP, вам просто нужен ARP, чтобы ноутбук мог обнаружить правильный адрес уровня 2 для использования в заголовке уровня связи кадра. Нет необходимости предпринимать какие-либо специальные действия, чтобы коммутатор знал, на каком порту находится FPGA. Он будетпросто работайсначала передавая пакет на все порты коммутатора, а затем обнаруживая правильный порт для использования, как только ПЛИС передаст свой первый кадрлюбойс правильным набором исходного MAC-адреса.
Как именно маршрутизатор узнает IP+MAC-адрес моей ПЛИС (какое подтверждение связи сохранит эту информацию в маршрутизаторе)?
Маршрутизатору не обязательно знать это, чтобы правильно обрабатывать данные, передаваемые в FPGA и из нее. Он может указать (на своей странице состояния) его как неизвестное устройство или вообще не указать.
Если FPGA может выполнять TCP 3way handshake, отвечать на запросы ARP и запросы ping, будет ли этого достаточно для выполнения требуемой задачи, которую я указал выше? Как эти handshake сделают это возможным, что именно происходит, когда кабель Ethernet подключается к маршрутизатору, и какие handshake нужны маршрутизатору?
См. выше. Обучение соединения Ethernet устанавливает уровень 1 (физический). На уровне 2 (канальный уровень) коммутатор обнаружит сопоставления MAC-адреса и порта во время связи и рассылает пакеты на все порты (нецелевые устройства будут игнорировать эти пакеты), если ему нужно отправить кадр до того, как будет известен правильный порт. IP-адреса уровня 3 преобразуются в MAC-адреса благодаря ARP, а сами IP-адреса могут быть настроены либо статически, либо через DHCP.