我目前正在研究 FPGA 和 Ubuntu 20 主機之間的 UDP 連接(防火墻已關閉,測驗了不同的 NIC)。為了發送 UDP 資料包,在 FPGA 上實作了一個定制的以太網程式。在接收方,有一個簡單的 UDP 服務器接收這些資料包。
問題是,我無法接收任何資料包。簡單的 UDP 服務器已經過測驗,當我從另一臺電腦向它發送訊息時它可以作業。為了對 FPGA 進行故障排除,Wireshark 用于監控流量。在 Wireshark 中,可以看到每個資料包及其資料,這意味著第 1-4 層不負責(wireshark 記錄)。甚至終端命令“ip -s link”也顯示沒有丟包(終端輸出)。
如何找出資料包丟棄的位置?
作業和“FPGA”UDP資料包之間的區別:區別
uj5u.com熱心網友回復:
- 239.255.255.250 不是有效的源地址,因為它是多播地址。多播地址的第一部分在 224 到 239 范圍內(并且 240-255 保留用于將來擴展)。多播源地址沒有意義,內核可能因此丟棄了資料包。
- 它也與接收器位于不同的子網上。我不認為這有什么不同,但也許它特別適用于 169.254 子網(如果沒有路由器,你會默認得到這個子網)。嘗試以 169.254 開頭的源地址。
- 它也太短了。有效以太網資料包的最小大小為 64 位元組,包括以太網 CRC。您不必為 UDP 資料使用所有位元組 - UDP 長度可以比??資料包短,并且多余的位元組未被使用。
- 請驗證 IPv4 標頭校驗和。我不確定為什么 Wireshark 不為您驗證它。它必須是正確的,否則內核將丟棄資料包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456321.html
下一篇:通過初始化獲取句柄位置
