问题:两台不同网段的
PC
连到一台
cisco2950
(无三层设备)
,
为什么不同网段的
PC
无法进行通信?
PC
不是要广播吗他们连到同一台交换机,另一台
PC
应该收到了
ARP
广播啊?
<?xml:namespace prefix = o />
首先,第一题中明确告诉你无三层设备,也就是说你连的网络中不会有网关的存在,即使你的 PC 设了一个网关,但是这个网关也是无效的,同意这点吗?画个图来 说: PC1-- 交换机 --PC2 。 PC1 假设为 192.168.1.1 , PC2 为 192.168.2.1 ,掩码默认。那么你在发 PING 请求时,应该先了 解下发出的过程。
PC 中有个 ARP 表,要知道 PC 上的数据到二层进行封装后是要加上目的 MAC 的(具体请看 TCP/IP 协议,封装过程中加的各种报文头),然后根据目的 MAC 地址转发的,也就是说你的数据要想从网卡出去,就必须知道对方的 MAC 地址,同样自己的 PC 也有个 MAC 地址, MAC 地址和 IP 地址一样,都是唯一 的标识你身份的东西( IP 私网地址例外,但在某个私网中它的地址也是唯一的,如果故意设成多台 PC 的 IP 地址一样,那会提示你有 IP 冲突,当然这时候也会 有新的问题,比如问你:此时是否所有的配成相同 IP 地址的主机都可以正常收发数据)。
讲了点题外话,但也可以思考下:),接着回来看这个问题,那么怎么知道对方的 MAC ?答案是 ARP 广播。首先 PC1 不知道 PC2 的 MAC 地址,那么肯定会 发 ARP 广播,假设 PC1 设了网关 192.168.3.1 。在 CMD 下用 ARP -a 命令查看本机 ARP 表,应该是什么都没有(如果之前 PC 是清空了 ARP 表开始做这个实验)。 ARP 表项格式如下:
Internet Address Physical Address Type
192.168.216.100 00-05-45-30<?xml:namespace prefix = st1 />-1f-58 dynamic
不难看出,这个表明确指出了 IP 地址及与其对应的 MAC 地址。比如现在是 PING 192.168.216.100 的话,那么查找 ARP 表项时就知道了其 MAC 地址为 00-0e-45-30-1f-58 。那么接下来就可以通过查看主机路 由表把 ICMP 报文从哪个接口(这里为 PC 设置的 IP 地址所在网卡)转发出了。
在 PING 时,首先要知道对方 MAC ,必然会来查找 ARP 表,如果有对方的 MAC 地址 , 就会在封装报文时在目的 MAC 中加上从 ARP 表中知道的这个 MAC 。如果不知道就会发 ARP 广播,好,这个实验关键的问题在这里。发 ARP 广播时,也要知道是从哪个接口( PC 上就是网卡了)出去,那么这时必须知道 主机路由表的情况了,主机路由表可以在 CMD 下用 route print 命令显示出来,类似于下:
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.3.1 192.168.1.1 30
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.1 192.168.1.1 30
192.168.1.1 255.255.255.255 127.0.0.1 127.0.0.1 30
192.168.1.255 255.255.255.255 192.168.1.1 192.168.1.1 30
224.0.0.0 240.0.0.0 192.168.1.1 192.168.1.1 30
255.255.255.255 255.255.255.255 192.168.1.1 192.168.1.1 1
Default Gateway: 192.168.3.1
===========================================================================
Persistent Routes:
None
这是 PC1 的主机路由表,默认网关为 192.168.3.1 ,路由表中的第一项全 0 的表示默认路由,即只要 PC 发出的数据包在路由表中找不到匹配的全部都 从这个默认路由所在接口转发到默认网关。可以看到在这条默认路由的 interface 中明确指出是 192.168.1.1 ,即 192.168.1.1 所在 网卡转发到默认网关。那么要转发到默认网关,我就得知道默认网关的 MAC 地址,所以这时候又去查 ARP 表,一看没有网关的 MAC ,所以发 ARP 广播 ( 从网 卡发出去 ) ,结果可想而知,这个网关不存在,肯定得不到网关对应的 MAC 地址。网关都不存在,那么数据转发给谁也就不知道了,所以所有的数据都在本地终 结,不向外发送。自然 ICMP 包是不会被发送的。
从上面可以看出,其实数据在发送时,应该是先查找路由表的,为了更好地理解,把 ARP 放在了前头,其实数据发送一到 IP 这层就开始看路由表,找出指定 的转发接口。最后到二层成帧后要知道 MAC 地址,就要去查找 ARP 表了。这个实验就是先看路由表,因为不同网段所以是从遵循默认路由,转发到默认网关。但 是要转发到网关,也必须知道网关 MAC 地址,但此实验中网关显然是不存在,那 MAC 地址也不可能知道,所以 ARP 广播数据(查找 PC2 的 MAC 时发的 ARP 广播)根本没处转发,此情况下数据在本地终结不对外发送了。也就是说这个 ARP 广播根本没从你网卡这个门中走出去。
但是有一个 ARP 广播是出去的,就是查找网关的 MAC 时这个广播,即 192.168.3.1 这个 IP 所对应的 MAC 。只要你一直在 PING ,那么这个 ARP 广播就会一直从网卡中发送出去。
如果有条件可以试一下,两台 PC 连一台二层交换机,然后用个抓包工具抓取 ARP 包,我是用 Ethereal ,非常不错的软件。你可以发现是只有查找网关 MAC 的 ARP 广播包(即 ARP 请求包)从你网卡出去,其它的 ARP 包都没有从这个网卡进出。
上面这个实验可以把默认网关去掉,再 PING 时是另一种结果,这个结果提示是目的主机不可达,如下:
C:\Documents and Settings\Administrator>ping 192.168.2.1 -t
Pinging 192.168.2.1 with 32 bytes of data:
Destination host unreachable.
Destination host unreachable.
为什么不是原来的 Request timed out ,因为这时查找路由表时已经没有默认路由这项了,即路由表中不存在此数据转发的任何符合的条件存在,所以什么都不用干,直接说明要找的目的主机我没 法找,我肯定是到达不了这台主机的,给出了目的主机不可达的提示。而设置了网关就不一样,至少机器知道是有个出口的,即知道东西是可以从我这里出去的,至 少有那么条路存在。假设现在网关存在了,比如换了个三层交换机,配上了实验中的网关地址。这时候 ARP 广播包肯定是可以出去的。
最后,综合上面所说的,按步骤来说这个 ICMP 报文下来后,查找路由表,查出是从默认网关出去,那么得先知道网关 MAC ,所以发查找网关对应 MAC 的 ARP 广播,因为得不到这个 MAC ,所以数据一直就是转发不出。这个问题其实到查找网关 MAC 这里就已经基本打住了。
转载于:https://blog.51cto.com/cwfsxlove/50387