作为一个网络使用者,你也许从来没有思考过源及目的主机之间究竟发生了什么,因为网络对用户来说是一个黑匣子,所有的细节都被屏蔽掉了,你只能知道通还是不通,能不能上网?但是作为一个网络设计者,研究者,你就必须要想想?假如你要ping一台位于美国硅谷的服务器,那么ICMP请求报文从源主机发出之后会发生那些事呢?其实报文的所有的路径都是由各种各样的类似与现实生活中的法律一样的网络协议约束下设计的,报文在离开老巢之后会经过二层接入层交换机,在三层交换机汇聚,从边缘路由器上发送出去,流入了茫茫的internet洪流之中。而在这个过程之中,报文会做的就是在网络设备上从转发处理。提到转发就不得不提到二三层转发的概念。其实关于二三层转发的概念在前几篇中都已经有一点涉及,只是并没有很明确的提出来。
下面就举例来讨论一下二三层转发的详细过程:
<td "157"="">
port1 port2
首先来说说二层转发的处理流程:
1. 假如交换机的port1和port2处于同一个vlan内,PC1想PING主机PC2,那么PC1首先会根据目的PC2的IP地址查询路由表,查询下一跳地址的(ARP -a)的ARP缓存。如果存在对应的表项则直接转发出去,如果不存在,就会进行步骤2处理。
2. PC1向PC2广播发送ARP REQUEST请求报文
3. 交换机port1接口收到ARP请求报文之后会在port1接口学习PC1的mac地址建立ARP及FIB表(port<---->mac),从广播ARP REQUEST
4. PC2会接收到从交换机port2广播出来的ARP请求报文,学习PC1的MAC,构建自己的ARP表项(IP<---->MAC),并向PC1返回ARP REPLAY单播报文
5. 交换机从port2接受到ARP应答报文后,学习PC2的MAC地址构建ARP及FIB表项,根据目的PC1的MAC地址查询FIB表项,然后从port1接口发送出去。
6. PC1接收到了ARP REPLAY后会学习PC2的MAC地址,生成ARP缓存表。然后将学习到的PC2的MAC地址填充在ICMP请求报文之中单播发送
7. 交换机从port1收到ICMP请求报文后会查报文的目的MAC地址是否是本机的地址,查询结果非本机MAC地址,则可以判断为二层转发,然后根据Dest MAC查询FIB表,从交换机port2端口发送出去。
8. PC2接收到ICMP请求报文,返回ICMP应答报文,报文格式不变,将源及目的IP及MAC地址对调发送
9. 交换机接受到ICMP应答报文之后依然会比较目的MAC是否为本机MAC,比较结果为非本机MAC,判断为二层转发,然后从port1接口直接发送。
10.PC1接收到ICMP 应答报文后判断PC1跟PC2双向互通。
对于三层转发其实流程跟二层转发流程类似:
1. 假如交换机的port1和port2处于不同vlan内,PC1想PING主机PC2,那么PC1首先会查路由表(根据PC2的IP),根据相关路由表项的下一跳IP地址查询(ARP -a)自己的ARP缓存。如果存在对应的表项则直接转发出去,如果不存在,就会进行步骤2处理。
2. PC1向PC2广播发送ARP REQUEST请求报文(目的IP为PC2的地址,目的MAC为下一跳的MAC)
3. 交换机port1接口收到ARP请求报文之后比较目的MAC是自己的入接口的MAC地址,而IP并非port1对应vlan接口的IP,则判断为三层转发。
4. 交换机将报文上送CPU处理,根据目的IP(PC2)查路由表,查询结果为下一跳出接口应该从port2所在的VLAN,所以将arp请求在该vlan内广播发送
5. PC2收到ARP请求报文后会学习mac地址构建ARP表返回ARP应答报文。
6. 交换机接受到ARP应答报文后会学习MAC构建ARP及FIB表项,比较目的MAC是否为本机MAC,结果非本机MAC,则判断为三层转发,将报文上送CPU,软件查询路由表,查询结果显示下一跳出接口为port1所在的vlan接口,查询FIB表,从port1接口发送出去。
7. PC1接受到PC2发送的ARP应答报文后学习mac构建ARP表项。
8. PC1根据新建的arp表向PC2发送ICMP请求报文,交换机接收到后根据已经构建的FIB表及ARP表及路由表转发报文。
9. PC2收到后返回ICMP应答报文,PC1收到后判断主机可达。
小结:
判断二层转发和三层转发的最根本的区别在于PC1查路由表,如果SIP和DIP在同一网段则PC1的下一跳即为PC2的地址,所以发出的报文的DMAC就是PC2的MAC地址,设备计较报文的DMAC为非设备MAC,则判断为二层转发,否则如果DMAC跟设备接收报文的端口MAC一致,这也表明SIP和DIP不在同一网段,需要走三层转发,上送CPU处理。
有以上分析可以看出判断二三层转发表面是比较SIP和DIP是否是同一网段。其实质则是转发设备通过比较转发报文的DMAC是否为本机MAC来作出最终判断的。