PC1 --------------------------------三层交换机-----------------------------------PC2
192.168.1.2 192.168.1.1 192.168.2.1 192.168.2.2
请描述:PC1 ping PC2的完整过程,含报文流程,以及PC1、PC2、交换机各自的行为。
[答:]
#1 PC 1首先检查出目的IP地址192.168.2.2(PC 2)与自己不在同一网段,因此它发出请求网关地址192.168.1.1(即是交换机的三层接口)对应MAC的ARP请求;
#2 SWITCH收到PC 1的ARP请求后,检查请求报文发现被请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。同时它还会把PC 1的IP地址与MAC地址对应(192.168.1.2<==>MAC PC1)关系记录到自己的ARP表项中去(因为ARP请求报文中包含了发送者的IP和MAC);
#3 PC 1得到网关的ARP应答后,组装ICMP请求报文并发送,报文的目的MAC=MAC S、源MAC=MAC PC 1、源IP=192.168.1.2、目的IP=192.168.2.2;
#4 SWITCH收到报文后,首先根据报文的源MAC+VID(即VLAN ID)更新MAC地址表。然后,根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志(Route标志)置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项;
#5 交换芯片根据报文的目的IP去查找其三层表项,因为交换机当前路由表只有
192.168.1.1/32
192.168.1.2/32
192.168.2.1/32
192.168.1.0/24
192.168.2.0/24
#6 CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC 2对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后SWITCH会在目的网段对应的VLAN 的所有端口发送请求地址192.168.2.2对应MAC的ARP请求;
#7 PC 2收到SWITCH发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC PC 2)包含在其中。同时,将SWITCH的IP与MAC的对应关系(192.168.2.1<==>MACS)记录到自己的ARP表中去;
#8 SWITCH收到PC 2的ARP应答后,将其IP和MAC对应关系(192.168.2.2<==>MAC PC 2)记录到自己的ARP表中去,并将PC 1的ICMP请求报文发送给PC 2,报文的目的MAC修改为PC 2的MAC(MAC PC 2),源MAC修改为自己的MAC(MAC S)。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PC 1发往PC 2的报文就可以通过该硬件三层表项直接转发了;
#9 PC 2收到SWITCH转发过来的ICMP请求报文以后,回应ICMP应答给PC 1。ICMP应答报文的转发过程与前面类似,只是由于SWITCH在之前已经得到PC 1的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC 1;
#10 这样,后续的往返报文都经过查MAC表=>查三层转发表的过程由交换芯片直接进行硬件转发了。