美文网首页
蹊跷的错误connect: Network is unreach

蹊跷的错误connect: Network is unreach

作者: Alan王伦胜 | 来源:发表于2018-06-28 19:03 被阅读0次

    Android-7.1.2系统成功跑起来后,下一步调试Ethernet网口,试图将网口驱动起来,以便Android系统可以上网。

    在Android系统的shell中,ifconfig发现网口已经成功通过DHCP server获取到IP地址:

    layerscape:/ # ifconfig

    eth5      Link encap:Ethernet  HWaddr 00:04:9f:04:4d:51

              inet addr:10.193.20.44  Bcast:10.193.20.255  Mask:255.255.255.0

              inet6 addr: fe80::204:9fff:fe04:4d51/64 Scope: Link

              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

              RX packets:5864 errors:0 dropped:0 overruns:0 frame:0

              TX packets:884 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000

              RX bytes:800941 TX bytes:79302

              Memory:1aea000-1aeafff

    而且看到实际有收发包,于是试图ping测试一下网络连通性:

    layerscape:/ # ping 10.193.20.64

    connect: Network is unreachable

    直接告诉网络不通,开始不明白同一网段不需要缺省路由,以为路由有问题,而且网上google都指向路由有问题,于是一顿的搜索和学习。

    根据Ping过程 原理 详解(图),最后发现并不是缺少缺省路由导致,因为同一网段ping直接通过ARP广播就可以得到目标地址,从而必然可以ping通同一网段的其他IP。

    而且也确实看到eth5有收发包,只不过收包远大于发包,进一步使用

    layerscape:/ # tcpdump -i eth5

    也确实看到不断收到来自于其他IP地址发过来的包。在进一步google,网上有人遇到类似问题,提到使用带-I ethx的ping可以正常工作,验证确实如此:

    layerscape:/ # ping -I eth5 10.193.20.64

    PING 10.193.20.64 (10.193.20.64) from 10.193.20.83 eth5: 56(84) bytes of data.

    64 bytes from 10.193.20.64: icmp_seq=1 ttl=64 time=0.345 ms

    64 bytes from 10.193.20.64: icmp_seq=2 ttl=64 time=0.354 ms

    从而知道问题所在,Android系统某处拦截外发的包,但究竟在何处呢?于是又是一顿的google,但几乎所有的与“connect: Network is unreachable”提示的案例都没有帮助,但有没有更多一些线索。最后的侥幸的是,在Android-x86讨论组,搜索了上面的错误提示,偶然看到问题的答案:

    layerscape:/ # ip rule add from all lookup main pref 0

    是而以此为纪念!

    相关文章

      网友评论

          本文标题:蹊跷的错误connect: Network is unreach

          本文链接:https://www.haomeiwen.com/subject/tqdnyftx.html