我有一個 FPGA 邊緣設備。我想透過我家的路由器+數據機設備向我的筆記型電腦發送和接收乙太網路封包。我的筆記型電腦透過 wifi(用於互聯網)連接到路由器+調製解調器,並且我透過乙太網路電纜將 FPGA 板連接到路由器+調製解調器。
我應該在FPGA 中實現哪些協定和握手,以便當我將具有筆記型電腦的目標IP+MAC 位址的乙太網路封包傳送到路由器+調變解調器裝置時,它會將該乙太網路封包轉送到通過wifi連接到它的筆記型電腦?
同樣,當我的筆記型電腦將帶有 FPGA 的目標 IP+MAC 位址的乙太網路封包傳送到路由器時,它會將其轉送到透過乙太網路纜線連接到它的 FPGA 嗎?
路由器究竟如何知道我的 FPGA 的 IP+MAC 位址是什麼(哪個握手會將該資訊儲存到路由器中)?
如果 FPGA 可以進行 TCP 3way 握手、回應 ARP 請求和 ping 請求,是否足以執行我在頂部所述的所需任務?這些握手將如何實現這一點,當乙太網路電纜插入路由器時到底會發生什麼以及路由器需要什麼握手?
答案1
我假設您有一個作為「路由器」銷售的家庭/個人使用設備,它實際上包括一個用於LAN 的第2 層交換機,以及一個用於將LAN 與網路互連的第3 層路由器(可能帶有NAT)。
我應該在FPGA 中實現哪些協定和握手,以便當我將具有筆記型電腦的目標IP+MAC 位址的乙太網路封包傳送到路由器+調變解調器裝置時,它會將該乙太網路封包轉送到通過wifi連接到它的筆記型電腦?
如果您有 FPGA 的靜態 IP 位址,則只需建立並訓練乙太網路鏈路,然後就可以使用固定的來源和目標 IP 和 MAC 位址發送資料。如果您想要 FPGA 的動態 IP,則需要支援 DHCP(以及它所依賴的其他所有內容,例如 UDP)
同樣,當我的筆記型電腦將帶有 FPGA 的目標 IP+MAC 位址的乙太網路封包傳送到路由器時,它會將其轉送到透過乙太網路纜線連接到它的 FPGA 嗎?
如果 FPGA 有靜態 IP,則只需要 ARP 即可讓筆記型電腦發現正確的第 2 層位址以在訊框的連結層標頭中使用。無需採取任何特殊操作即可讓交換器知道 FPGA 位於哪個連接埠。它會只是工作首先將封包洪氾到所有交換器端口,然後在 FPGA 傳輸其第一幀後立即發現要使用的正確端口任何具有正確的來源 MAC 集。
路由器究竟如何知道我的 FPGA 的 IP+MAC 位址是什麼(哪個握手會將該資訊儲存到路由器中)?
路由器不一定需要知道這一點才能正確處理進出 FPGA 的資料。它可能(在其狀態頁面上)將其列為未知設備,或者根本不列出它。
如果 FPGA 可以進行 TCP 3way 握手、回應 ARP 請求和 ping 請求,是否足以執行我在頂部所述的所需任務?這些握手將如何實現這一點,當乙太網路電纜插入路由器時到底會發生什麼以及路由器需要什麼握手?
往上看。乙太網路連結訓練建立第 1 層(實體)。在第2 層(鏈路層),如果交換器需要在知道正確連接埠之前發送幀,則交換器將在通訊期間發現MAC 位址-> 連接埠映射,並向所有連接埠泛洪封包(非目標裝置將忽略這些數據包)。由於 ARP,第 3 層 IP 位址解析為 MAC 位址,且 IP 位址本身可以靜態配置或透過 DHCP 配置。