完美解决ARM上Linux多网卡不能工作在同一网段的问题 - ZYNQ7020学习

       首先,要抛出的一个问题,在多网口的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

猜你喜欢

转载自blog.csdn.net/yishuicanhong/article/details/80940421
今日推荐