不同网段无法PING通的原因

看监控资料时突然想到这个问题: 为什么不通网段之间无法PING通?于是试着做了几个实验

实验步骤:

1.两台pc (A,B)用网线直接连接,且配同一网段,可ping通。
2.修改一台PC(A)的ip在不同网段,ping不通。
用抓包工具wireshark在A上抓包,没有任何报文。也就是此时PC发不出arp请求。A与B的mac地址表均为空(arp -a)
3.把A的网关设为B。再抓包,有arp请求,并且可以收到arp应答,发出ping包,收不到回包。但此时,A与B均已获得对方的mac地址。
4.再把对端PC的网关设为本端的,可以ping通。

实验现象:

1:A,B为不同网段
(1)不设对端为自己的网关,使用ping后不会有arp包发出。
(2)A或B中任意一个设置对端为自己的网关后,自发产生(非通过ping)arp请求,得到对端的mac地址,同时对端也有了本端的mac地址,但只在设置生效当时有此请求,其后无此行为。
2:A,B为相同网段
(1)不设对端为自己的网关,使用ping后有arp包发出。
(1)将对端设为网关,有自发的arp请求行为,只在设置生效当时有此请求,其后无此行为。
结论1:直接连接(或二层链接)的主机之间,ip在不同网段,只要在PC上配置正确路由或使用网关,也是可以ping通的。

关于ping不同的原因,我这里这么解释:

在没有配置路由的情况下,ping不同网段主机时,数据包从网络层下来(加IP),需要经过mac层封装,加上对方mac地址才能发送出去,关键就是找对方的mac地址,在mac缓存中找不到目的mac地址,于是进行mac地址学习(问题1),发arp包,但从实验步骤2看来,这个arp包是发不出去的,估计它也就不知要从本机的哪个端口扔出去??,所以ping不通。问题1:为什么实验步骤2中,A发不出arp包呢?
问题1:为什么实验步骤2中,A发不出arp包呢?
问题2:实验现象2是怎么回事,那个自发的arp请求

ANSWERS:

在广播型广域链路(PPP、HDLC、FR broadcast)上不同网段的设备也能通信!因为是广播的,所以不在一个网段也能通信。
所以呢,就引出了这个有意思的话题!
以太网也是广播的,为什么不在一个网段就能通信。
查了RFC文档,得知由于ARP协议在工作的时候会进行检验!
如果查询的3层地址和本地地址不在同一网段,又没有指定缺省网关的话。就不会工作!
也就是ARP不会直接查询非同一网段目的地址的MAC地址!但是在WAN上没有这种检验机制,所以可以通讯!

2 days ago, this page was being read.


    Order by : Newer | Older

  1. coper 2013-09-21
    @17:10 Reply

    正解!!正在疑惑这个事情呢。不知在其他的链路里是怎么处理这种情况的,不过以太网的话有默认网关来进行解决,所以如果配置好的话应该没什么影响。不知到能不能把默认网关设置为所连接的路由(要在同一网段吗?),来进行解决。。

  2. suny 2009-04-18
    @23:05 Reply

    这是进一步的总结:arp经典实验

    http://www.ziming.info/archives/2008.04.15.1144.html#content

  3. ddk 2009-03-29
    @00:02 Reply

    很好,领教

  4. suny2009-03-29
    @01:49   to  ddkReply

    hehehh,这篇文章只是解决了一些疑惑,今天再看这文章突然想到,它是怎么识别ip的,就是将A的网关设置为B后(不同网段),往B发包的时候,怎么知道B在哪里,往哪发,它并没有B的Mac。

Subscribe to Comments