调试网络收发不通问题
今天在做之前一個項目重構的事情,需要把之前的代碼重新做功能,我們有兩個設備,他們通過網線連接,用UDP來傳輸數據。很多人都懷疑UDP丟包什么,不及時什么之類的,如果想把事情做得足夠快,最好還是在UDP上做一些事情,對于丟包是有很多處理方式的。
然后,我在新代碼的調試下,發現問題,A設備發送廣播包給B設備發送不成功。簡單的代碼定位如下
#include?<errno.h> printf("%s(),LINE=%d,[%s]\n", __FUNCTION__, __LINE__, strerror(errno));執行后看到輸出
我剛開始以為是端口的原因,然后檢查了一下才發現,是因為我沒有設置默認網關,我從網上看到這個圖的。
講道理,我們的兩個設備都不需要連接外網,所以是沒有必要配置網關的,問題是出在,我的網絡廣播包發送的的是 "255.255.255.255"。
在配置系統里面默認網關的目的,是告訴系統,當有些數據包不匹配路由表中其他任意路由,不知道怎么選路的時候,就把這個數據包丟給默認網關讓它幫你轉,所以,網關可以認為是網絡的管家,當有人不知道做什么的時候,就需要網關來告訴他要做什么,要到哪里去。
?在把網關配置正常后,設備可以正常收發數據。
但是我不想每次都配置一次網關,所以我就需要換一個廣播地址,把廣播的地址修改成"192.168.9.255"。
嗯,這樣之后,發送就不會再提示有問題了。
但是接收數據沒有看到有數據,崩潰~~~~
這個時候單播和兩個設備互ping都是沒有問題的。
然后檢查兩個設備的網絡情況,如下
發現兩個設備不在同一個網段下,so,我就懷疑我的服務可能寫的有問題。
正常情況下,A設備通過DHCP從B設備獲取IP,那B設備的DHCP服務配置就可能是很大的問題了,因為每次執行獲取IP的命令后就發現我的子網掩碼被修改了,那應該是DHCP服務搞的鬼。
然后去看DHCP服務的配置文件,發現配置文件寫的有問題,配置文件沒有讓設備處在同一個子網掩碼下。
錯誤的配置文件如下
需要把opt subnet 配置成和IP地址同一個網段的地址。opt subnet 是子網掩碼的計算工具,子網掩碼就是通過這個計算出來的,我們子網掩碼不正確也就是這個原因了。
最后,修改固件的配置文件重新燒錄后驗證正常。
網絡是個很復雜的東西,搞網絡的時候,我總是搞不懂MAC層是什么,PHY層是什么,為什么有了MAC層又多出來一個PHY層。
說白了,這兩個層都是硬件層,我們還可能遇到一些Switch加兩個PHY,Switch可能很多人還不知道是什么東西,這無非就是高速開關,有多高速我也說不清楚,反正因為高速切換產生的溫度是非常高的。
好了,就這樣。感謝發哥又跟我調試了一天~謝謝發哥~
總結
以上是生活随笔為你收集整理的调试网络收发不通问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 麒麟系统stty测试串口
- 下一篇: Java遍历Map集合的四种方式