文章目录
- 一个有趣的实验
大家都知道不同网段的IP地址要想通信需要通过网关进行路由转发,而一般通过路由器来做默认网关。
一个有趣的实验
一台二层交换机下,连接两个不同网段的PC,实现彼此之间的通信。
一台S3700交换机,两台PC。
拓扑图如下:
显然 PC1-1和PC2-1的IP地址不是同一网段的。此时 通过PC1-1 ping PC2-1会发生什么?
在PC1-1上 首次ping 192.168.2.10 时,首先 PC1-1 会根据自己的子网掩码来计算192.168.2.10的网段,得到的网段为192.168.2.0。
和自己IP地址的网段192.168.1.0不是同一网段,那么PC1-1会先查看自己PC上配置的网关地址。然后根据网关地址再查看自己本地ARP表中,是否有此网关IP地址及MAC映射 记录。如果PC主机没有配置网关地址,那么也就不会查看PC主机的ARP表。PC1-1不会对ping命令发送任何的数据帧。
注意
:即使PC主机上有网关地址的ARP表缓存,但是 我们手动把IPv4配置里的网关去掉了,同样PC1-1不会对ping命令发送任何的请求数据
帧。
因为PC主机要先看网关地址是否有配置,若有配置,再看ARP表缓存。没有配置网关地址也就不会看ARP表,不会发送任何的数据
帧。
如上图PC1-1中,我们没有配置PC1-1的网关地址。那么PC1-1不会对ping命令发送任何的数据帧。
下面给PC1-1配置上网关地址,网关地址配置成多少呢?我们这里把PC1-1主机的网关地址,配置成PC2-1主机的地址。
然后,再通过PC1-1 ping PC2-1 。此时 PC1-1 会发送 ARP广播帧,目标MAC地址为广播地址,目标IP地址(PC1-1的网关地址):192.168.2.10。
交换机收到 ARP广播帧后,会先学习源MAC地址及入数据端口记录到MAC地址表中,然后对ARP广播帧进行广播。当PC2-1收到ARP广播帧后,将源IP地址及源MAC地址缓存到ARP表中,然后发送ARP响应报文,注意在发送PC2-1ARP响应报文时,虽然目标IP地址为192.168.1.10,和PC2-1不是同一网段,但是不会查看PC2-1的网关地址是否有配置。所以ARP响应报文是否能正常发送和PC2-1是否配置网关地址无关。PC2-1的ARP单播响应报文,到达交换机后,交换机同样学习源MAC地址及入数据端口。然后根据已有MAC地址表,将数据转发到PC1-1上。PC1-1在收到ARP单播响应报文后,将源IP地址及源MAC地址缓存到ARP表中。
此时PC2-1的MAC地址及IP地址在PC1-1的ARP表中有缓存。
交换机上也有PC1-1/PC2-1 对应的MAC地址表。
PC1-1的MAC地址及IP地址在PC2-1的ARP表中也有缓存。
此时PC1-1 开始送ICMP请求报文,因为是跨网段通信,所以PC1-1先查看自己主机上的网关地址(必须要配置上),网关地址为192.168.2.10,然后根据此地址,再去本机ARP表中查找对应的MAC地址,因为此前经过ARP报文的请求和响应,所以已经有对应的ARP缓存信息。那么ICMP请求报文中,会把PC1-1网关地址对应的MAC地址,做为目标MAC地址,目标IP地址为 ping命令后的地址,这里也就是PC1-1的网关地址,两者相同了。当交换机收到ICMP请求报文时,先学习MAC地址表,然后根据目标MAC地址 ,在MAC地址表,找到转发的端口,进行转发。此时PC2-1会收到ICMP请求报文。PC2-1拆开三层报文,获得目标IP地址,和自己的IP地址相同则接收,然后准备发送ICMP响应报文,此时查看到源IP地址为192.168.1.10,和自己不是同一个网段。那么PC2-1会查看自己的网关地址,发现网关IP没有设置(如上图PC2-1中IPv4设置里)。
则不会PC2-1发送响应报文。
所以出现了以下报文:
下面给PC2-1配置上,网关地址,网关地址配置多少呢,因为是要和PC1-1通信,这里就设置为PC1-1的IP地址。
如下图:
配置好PC2-1的网关之后,那么再收到来自PC1-1的ICMP请求报文时,因为是不同网段,PC2-1 首先根据设置的网关地址(而不是根据ICMP请求报文的源IP地址),去自己本地的ARP表中去找网关地址对应的MAC地址,如果没有找到那么 PC2-1 会发送一个ARP广播包,通过这个来获得到网关的MAC地址,存储到本地ARP表中,然后把网关地址对应的MAC地址做为ICMP响应报文的里的目标MAC地址,ICMP请求报文中的源IP地址做为目标IP地址。源MAC地址和源IP地址 就是原ICMP请求报文中目标MAC地址和目标IP地址。然后进行ICMP报文的响应。
注意:
因为我们这里设置的PC2-1的网关地址正好是PC1-1的IP地址,因为之前的PC2-1收到PC1-1的ARP请求报文时,已经把对应的IP地址和MAC地址的映射关系缓存到ARP表里了,所以这里PC2-1没有再发送ARP请求报文获取自己网关的MAC地址。
如果我们加一台PC3-1,来充当PC2-1的网关会怎样呢?
此时的拓扑如下:
其他保持不变
然后清空PC上的ARP表及交换机上MAC地址表,
在PC1-1 上 ping PC2-1
所以,最终 在 PC2-1上抓取报文看似请求和响应正常,其实 PC2-1把PC1-1对其发送的ICMP请求报文,对应的响应报文却发送到了PC3-1上了。这样显然不合理,所以跨网段的通信一定要配置正确的网关。
注意:
虽然上面配置的主机网关和主机的IP地址不是同一个网段,但是也通信正常。但是我们需要在作为网关的主机上还需要给网关ip配置网关才能互相通信。但是实际场景中,没人这么配置。实际场景中一个网关下,会接一个交换机,交换机下接入多台设备终端。所有终端的网关地址都配成同一个。而且网关ip地址和终端设备的IP地址保持同一个网段。