测试网络时,经常用的方法是Ping某个IP地址,如果能Ping通,则说明这条链路是畅通的,如没有Ping不通,则说明这个链路不通,这个测试方法得出的结论是不严谨的,也不一定是正确的。
首先,Ping功能发送的是ICMP包,并不是完整的TCP/IP协议包,如果没有三层交换机路由,Ping功能得出结论就有待商榷。假如你Ping的是和本机同一网段的IP地址,如果Ping不通,目的IP与本地链路不通,结论成立。如果Ping的目的IP地址与本地IP地址不在同一网段,比如说本地IP地址为:192.168.2.106,目的IP地址为:192.168.20.157,使用PIng功能,两个主机相互Ping,如果Ping不通,不能得出两者链路不通的说法。
Ping功能不像完整的TCP/IP数据包,PIng功能发送的只不过是ICMP控制报文协议包。当你使用Ping功能时,本地PC会首先查询本地的ARP地址映射表,如果目的IP不在ARP缓存中,则受限会查询ARP映射表。如果你的电路连接的是一般路由器即无没有三层交换路由功能,本地电路查询ARP映射表的时候,会发出一个MAC层目的地址为路由器MAC地址的ICMP数据包,路由器收到ICMP数据包之后,经过地址过滤,发现目的IP地址不是其路由器的子网,则会将此ICMP包抛弃,不会发出ARP查询包进行ARP地址查询。如果本地电脑连接的是有三层交互路由功能的交换机或者路由器,则其会发出ARP查询数据包进行网络查询。
举一个例子使用PIng两个IP地址:192.168.2.106;192.168.20.157.假如本地IP地址为:192.168.2.100,如果192.168.2.106链路不通,你会发现当你PIng192.168.2.106,会出现:“无法访问目标主机”的提示;当你Ping192.168.20.157时,会出现:“请求超时”的提示;这个两个提示很明显,计算机产生的行为不一样,提示“请求超时”说明本地发出ICMP包时没有任何的响应,即路由器直接将此包虑掉,当做不安全或者残缺包处理;提示“无法访问目标主机”说明:当前网络下没有这个IP地址可供用户访问。、
今天小狮子又开始纠结起来这个问题了,两个PC连接一台二层交换机,或者一台关闭路由功能的三层交换机,把连接PC的交换机端口划入同一个vlan中,但是两个pc的ip地址不在同一个网段,能否互相ping通?如下图:
PCA——》二层交换机1端口 二层交换机2端口—–》PCB
默认情况下所有交换机端口属于vlan1,也就是现在PCA 和PCB属于同一个vlan。
以上说的情况又分为两种,首先第一种PCA,PCB只设置IP地址,不设置网关。
比如PCA的地址:192.168.1.10/24
PCB的地址:192.168.2.10/24
网关全部为空,设置完成之后在cmd下使用ipconfig命令查看是否设置成功,在这个过程中小狮子就发现了一个奇怪的地方,虽然我没有设置网关,但是在cmd下看到的两个PC的默认网关都是0.0.0.0.类似下图这种情况
注意这里的0.0.0.0经过小狮子的实验得出结论表示的是你把网关设置成了自己,这个跟没有网关是很大区别的,严重影响到实验的效果,因为下一个实验我们正是需要把网关设置成自己。在这里,我们可以在cmd下输入:
route delete 0.0.0.0
删除这个奇怪的网关,再次使用ipconfig命令验证一下,发现此时“默认网关”这里空空如也。达到目的。
另外需要注意的一点就是需要把Windows的防火墙关闭,要不然怎么样都是ping不通的。
进入测试阶段,PCA ping PCB发现不通,反之亦然。但是为什么不通呢?这个过程是什么样子的呢?经过查找资料和小狮子自己的思考发现,电脑在不设置网关的情况下去ping一个与自己不同网段的地址(电脑怎么知道对方跟自己不同一个网段呢?因为电脑在ping的时候会根据目的ip地址做一个掩码的计算,具体自行查找资料),由于跟自己不同网段而且自己没有设置网关,所以PC根本不会发送什么报文,直接就把这个ping包丢弃,我们此时在cmd下看到的就是:
根本没有ping包出去。
如果ping的是跟自己同一个网段的ip,即使没有设置网关,PC发现与自己同一个网段的,就会发送一个ARP的报文在整个vlan中询问所有vlan中的主机,目的主机的mac地址。所以同一网段,不设网关也是可以通的。
第二个实验,那么怎么能够让不同网段相同vlan的PC通呢?只要把对方的IP设置为自己的网关,或者把自己的ip设置为自己的网关就可以了。
经过实验发现上面的做法是可以通的,那么这又是为什么呢?原因就是PC在ping的时候,发现不同网段,这个时候就要去找网关了,(默认情况下网关都跟自己是同一个网段的,这里我们把网关设置跟自己不同一个网段,在windows下会提示警告的,不过PC自己可不关心,反正它就觉得网关就在我这个vlan里面的,所以就会发ARP广播包)在这里又分了两种情况,第一种就是把网关设置为对方的ip,在这种情况下PC首先寻找的是网关,它会发送一个arp请求在整个vlan中广播,询问网关的mac地址,由于这里两个PC属于同一个vlan都能够收到对方的ARP报文自然也做出了响应,当然也就能够获得到网关的地址了,接着网关就要寻找目的的ip地址了,不过网关这个时候发现目的的ip地址不就是我自己嘛,所以也就顺理的找到了自己,回复了对方。
第二种情况就是把网关设置成自己,这种情况下pc不会去找网关的mac地址,因为网关就是我自己啊,我当然知道自己的mac地址了还找什么.所以这种情况下,网关会去寻找目的ip的mac地址,也是发ARP广播包。恰好目的主机也在同一vlan,也就通信成功了。
另外推荐这篇文章,里面有更多的实验还有另外一些奇怪的问题http://www.west263.com/info/html/wangluozhishi/wangluoxieyi/20080225/28986.html
测试:
PC>ping 192.168.11.2
Ping 192.168.11.2: 32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!
Request timeout!
Request timeout!
Request timeout!
— 192.168.11.2 ping statistics —
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss
PC>ping 192.168.10.2
Ping 192.168.10.2: 32 data bytes, Press Ctrl_C to break
From 192.168.10.1: Destination host unreachable
From 192.168.10.1: Destination host unreachable
From 192.168.10.1: Destination host unreachable
From 192.168.10.1: Destination host unreachable
From 192.168.10.1: Destination host unreachable
— 192.168.10.2 ping statistics —
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss
测试用例:
参考链接:
https://blog.csdn.net/yanyehe89/article/details/47720755
https://blog.csdn.net/u011097537/article/details/38761173