1. 程式人生 > >完美解決ARM上Linux多/雙網絡卡不能工作在同一網段的問題

完美解決ARM上Linux多/雙網絡卡不能工作在同一網段的問題

       首先,要丟擲的一個問題,在多網口的ZYNQ開發板上,當五個網口處於同一個網段時,它們之間是完全能夠相互ping通。關於同一網段的測試在網口測試報告中已做詳細說明,接下來新增路由表後的測試結果。

修改路由表:

       在開發板上使用指令“route add -host 30.252.22.141 dev eth2”, 所有需要發往30.252.22.141地址的IP資料包,全部由eth2轉發(個人理解:將30.252.22.141這個IP新增(繫結)到乙太網網口2上)。即當收到這個ip的資料時,預設將由eth2進行接收,其他網口不做接收。 具體修改如下:

ifconfig eth0 192.168.0.100 netmask 255.255.255.0 up

ifconfig eth2 30.252.22.140 netmask 255.255.255.0 up
route del -net 30.252.22.0/24 dev eth2
route add -host 30.252.22.141 dev eth2
route add -host 30.252.22.142 dev eth2
route add -host 30.252.22.143 dev eth2
route add -host 30.252.22.144 dev eth2

ifconfig eth1 30.252.22.130 netmask 255.255.255.0 up

       上述程式碼中,eth0是配置的PS端除錯IP,然後先配置eth2 IP並且刪除eth2對於整個網段的路由,然後重新新增路由資訊,最後配置eth1的IP,eth1使用預設路由,對整個網段路由,但是除了已經配置給eth2的路由。接下來是測試分析。

開發板啟動配置:

       在檔案系統的App –>startup中(下面是上電啟動時自動配置的程式碼,下次有時間再寫如何上電自動掛載和配置IP)

路由表:輸入route檢視路由表

       由表中可以知道,當有30.252.22.141這個網段的ip傳來資料時,PL端的只能是eth1和eth2具有這個網段的路由能力,但是實驗結果表明,只有eth2才能就ping通30.252.22.141這個ip,下圖是將網線插在eth1(30.252.22.130),用30.252.22.141對eth1和eth2嘗試ping的結果,時間長度為10分鐘。

       測試結果表示,修改路由後,eth1預設接收30.252.22.0網段的ip的路由資訊,但是優先設定到eth2的ip不再ping通eth1了,且不能再通過乙太網eth1(30.252.22.130)ping通eth2(30.252.22.140)了。

證明可以同一網段使用兩個網口:

       使用兩臺電腦,IP為30.252.22.145和30.252.22.141,30.252.22.141直接連線eth2,30.252.22.145和eth1連線到交換機上,兩個同時對各在所在的網口ping的結果如下:

       通過arp指令我們也可以看到,我們能ping通的地址是在不同的物理埠上的,證明不是通過eth1路由而ping通eth2的。同一網段不能工作的問題,到這裡完美解決。

總結:

       當將網口配置成為同一網段時,第一個配置IP地址的網口將優先獲得路由權,後配置的網口預設都沒有路由表。如果給特定網口新增路由表之後,指定的IP的資料資訊將會指定進入這個網口,有這個網口的IP接收資訊。通過新增IP路由表的方法,實現同一網段的多乙太網的通訊功能。需要特別注意的是,先進行優先路由的網口的配置和路由設定,在進行其他IP的配置,否則可能配置不成功。

補充修改路由表與不修改路由表的對比圖:

       當不修改路由表,直接使用如下“ifconfigeth1 30.252.22.130 netmask 255.255.255.0 up”和“ifconfig eth230.252.22.140 netmask 255.255.255.0 up”命令進行配置時,通過arp –a指令,檢視結果如圖4。修改路由表配置時,結果如圖5所示。由圖4和圖5可知,修改路由表後,ping 30.252.22.130和30.252.22.140時,接收訊號的實體地址是不一樣的,即不是同一個網口。

圖4
圖5