本帖最后由 Jose 于 2011-10-16 18:14 编辑
实验拓扑:
实验配置: PC1和PC2用路由器模拟。
PC1 F0/0:192.168.1.1/24 gw: 192.168.1.254
no ip routing
PC2 F0/0:192.168.10.2/24 (MAC: cc03.13f0.0000)
gw:192.168.10.254 no ip routing
SW1 F0/1:192.168.1.254/24 (no switchport)
SVI vlan 10:192.168.10.1/24 (MAC:cc00.13f0.0000)
F0/0:trunk
SW2 SVI vlan 10:192.168.10.254/24 (MAC: cc01.13f0.0000)
F0/1: switchport access vlan 10
静态路由:ip route 192.168.1.0 255.255.255.0 192.168.10.1
F0/0:trunk
首先,先让PC1、PC2都能ping 通网关。这样免去了后续操作中PC1、PC2各自发ARP找网关的过程。
接下来的问题,PC1 ping PC2,能通吗?当然能通。那么,为什么能通呢?也就是说,当PC1输入ping 192.168.10.2,然后回车,会发生什么呢?
图一 (SW1和SW2之间捕获的数据包):
1. PC1将PC2的地址和自己接口上的掩码进行与运算,判断PC2的地址和自己不是同一个网段,于是将ping请求报文发给自己的网关SW1。 2. SW1收到第一个ping请求报文,同样做与运算,发现ping包的目的地址192.168.10.2和自己不是同网段的。于是SW1查路由表,发现目的地址在这一条路由所包含的网段范围内。于是把ping请求报文交给SVI vlan 10口。 3. SVI vlan 10同样进行掩码与运算,发现192.168.10.2是和自己192.168.10.1同网段,于是发ARP广播请求,求192.168.10.2的MAC地址。见图一中的第41号报文。 4. PC2收到ARP广播请求,于是回单播ARP,告诉SW1的SVI vlan 10(192.168.10.1)我的MAC地址是多少。于是SW1的SVI vlan 10知道了PC2的MAC地址。见图一中第42号报文。 5. 此时第一个ping请求报文已经超时,于是PC1发出第二个ping请求报文。 6. 由于SW1的SVI vlan 10已经有了PC2的MAC,这样SW1就可以直接把ping请求报文转发给PC2,见图一中第46号报文。 7. ping请求报文到了PC2,PC2应该发一个ping回应报文。同样PC2发现PC1的地址和自己不在同一个网段,于是它会把ping回应报文发给网关192.168.10.254。 8. 192.168.10.254收到ping回应报文,发现目的地址是192.168.1.1不是和自己同网段,于是查路由表,查到这条路由满足需求,可达192.168.1.1。所以SW2要将报文发往下一跳192.168.10.1,但是SW2还不知道192.168.10.1这个同网段地址的MAC,所以SW2要发ARP广播请求,求192.168.10.1的MAC地址。见图一中第47号报文。 9. 同时SW2发现,来自192.168.10.2发往192.168.1.1的报文,下一跳是192.168.10.1。源地址和下一跳在同网段,那不如干脆让192.168.10.2直接把192.168.10.1当做真正的网关得了。于是SW2发送了一条ICMP重定向报文。
图二(SW2和PC2之间捕获的ICMP重定向报文): ICMP报文,Type是5表示这是重定向报文,Code是0表示这是对网络测重定向。(补充下,ICMP请求报文Type是8,回应报文Type是0)。重定向报文内容包含了一个网关字段,这个字段是告诉该报文的接收者真正的网关应该是谁。同时还告诉对方哪些报文需要重定向(如图中红色方框内所示,意思就是告诉192.168.10.2,它发给192.168.1.1的ICMP回应报文,真正的网关应该是192.168.10.1)。 10. 另一方面,SW1的SVI vlan 10口收到了第9步中所说的ARP请求,于是回应一个单播ARP给SW2的SVI vlan 10。这样SW2就知道了192.168.10.1的MAC。见图一中第48号报文。 11. 此时第二个ping请求报文已经超时,于是PC1发出第三个ping请求报文。 12. 当PC2收到请求报文时,就会去找新的网关192.168.10.1,于是再发ARP请求,然后SW1的SVI口回应ARP。如图一中第53,54号报文。 13. 此时第三个ping请求报文已经超时,于是PC1发出第四个ping请求报文,然后整个世界都畅通了。
看完上面的分析,可能会有一个疑问。在第3步SW1的SVI口192.168.10.1求PC2 192.168.10.2的MAC时,按道理PC2应该会记录下192.168.10.1的MAC才对的,为什么在第12步的时候,PC2还要去求一次192.168.10.1的MAC呢?所以再做个小实验吧。
拓扑很简单,就是 R2------R3 R2模拟交换机,建立个SVI vlan 10,地址是1.1.1.2。R2连R3的口划入vlan 10。 R3模拟PC,连R2的口是三层口,配上IP地址1.1.1.3。 R2 ping R3,正常情况下只要发一个ARP请求就可以了。
如果R3上,全局下no ip routing。则R2所发的关于R3的ARP广播,R3会回应,但是R3不会保存R2上IP与MAC的映射。直到R3要回应ICMP的时候,再去发ARP请求,求R2的MAC地址。
分享完毕,欢迎拍砖。。。
|