CN002 - L2,L3转发-2

001. L2,L3 转发 -2

二层转发:

假设Pc1,和Pc2发ping包,pc1的IP地址是1.1.1.3,网关掩码是255.255.0.0,

pc2的IP地址是1.1.1.5,网关掩码是255.255.0.0,

Pc1 发ping包时,先比较pc1的IP和pc1网关相与是否等于pc2的IP和pc1网关相与的值,

若相等,则认为是二层转发。

若认为是二层转发则查本机的ARP表,看表中是否有这一项。

若有:

   则可由pc2的IP得到pc2的mac,然后发ICMP requst报文给L3,

   L3收到后,先查pct(端口配置表)表,比较目的mac是否与L3的MAC相等,

   若相等,则认为是三层,

   在此情况下是不相等,则接着查vlan表,得到vlanid,

   然后以vlanid和目的mac为索引,查单播mac表,

        若查得到,则可得到出端口号,

             然后,帧走到下行,在下行入队列之后,学习添加pc1的mac表项。

        若在单播MAC表中查不到,

             则根据原来vlan表中查到的mid,查Mid up表,然后由此表可知有那些lpu 板上配有此vlan,(因为是广播,所以就不查单播mac表了),

             然后再上网板前,把此ICMP报文复制给每个lpu板一份,

             然后下网板的时候,查mid down表,得到本板上哪些端口是属于这个vlan的,对属于本vlan的各个端口(pc1所在的端口除外)都复制一份ICMP报文下发下去,

             当进行到本板的最后一个端口时,添加有关pc1的单播mac表项。

            各端口的pc收到此ICMP报文后,比较目的mac是否与本机相同,

                  若不同则丢弃,

                  若相同,则接收,并回ICMP reply报文。

            此处,也就是pc2回ICMP reply报文。L3收到后,在下行的时候学习到pc2的mac表项。

若没有:

       则发ARP广播,请求目的IP为pc2的MAC,此时目的MAC填的是全f,

       当L3收到这个ARP报文后,先查PCT表,比较报文中的目的MAC是否与L3的MAC相等,

       此处为不等,认为是二层转发,

             先查vlan表,得到vlanid,然后用vlanid查Mid up表,然后由此表可知有那些lpu 板上配有此vlan,(因为是广播,所以就不查单播mac表了),

             然后再上网板前,把此ARP报文复制给每个lpu板一份,

             然后下网板的时候,先抄送一份给CP,此时cp可以由此ARP 报文学习ARP表项和FIB表项。

             查mid down表,得到本板上那些端口是属于这个vlan的,对属于本vlan的各个端口(pc1所在的端口除外)都复制一份ARP报文下发下去,当进行到本板的最后一个端口时,添加有关pc1的单播mac表项。

这时,pc2将会收到此ARP报文,pc2收到后,发送ARP应答给L3,然后因为L3中已经有了pc1的mac表项,直接可以发到pc1所在的端口,此时学习pc2的mac信息。这样

当此ARP reply报文回到pc1后,pc1就可以直接发ICMP报文了。

 

三层转发:

假设Pc1 ,和Pc2 发ping包,pc1的IP地址是2.2.2.2,网关掩码是255.255.0.0,

pc2的IP地址是3.3.3.3,网关掩码是255.255.0.0,网关是3.3.3.1。

pc1发ping包时,先比较pc1的IP和网关相与是否等于pc2的IP和网关相与的值,不相等,认为是三层转发,然后查本机的fib表,查对应下一跳IP的Mac。

若查到了,则可直接发ICMP报文了。转 * 处继续处理。

若查不到,

      则发ARP 报文请求下一跳IP 的mac(本例中也就是L3的mac),即目的mac为L3的mac,目的ip为L3的ip。

      此ARP报文到了L3后,会在pc1所属的vlan内广播一下,同时给cp送一份,此时cp回一个ARP reply应答,同时学习pc1的fib和arp表项,

      下行的时候学习pc1的mac。

* pc1收到此ARP reply后,开始发ICMP报文,目的ip为pc2的ip,目的mac为L3的mac。

此ARP reply报文到了L3后,L3先查PCT表比较目的mac是否等于L3的mac,此处相等,则认为是三层转发。

再查fib表,得到下一跳的IP和目标板号,目标端口号,在查fib表的过程中:

若一项都不能匹配,则丢弃;

若能匹配,则匹配有两种情况:

1、能匹配到主机路由,则在下行的时候查ARP表项,从相应端口发出去;

2、只能匹配到网段路由,则产生fib miss消息,并把此ICMP报文上送cp,

     当cp收到此ICMP报文后,则发一个ARP广播报文在pc2所属的vlan内进行广播,(此处是采用D201封装的,解封装后相当于二层报文),

     此报文进入下行,并通过wrap端口环回到上行,在上行的时候再查pct表,vlan表,和mid up表,给每个在pc2的vlan的各板复制一份,上网板,下网板,(此时因为判断原mac是L3的mac,所以就不上送给cp了),

     再查mid down表,给每个板上各所在pc2的vlan的各端口复制一份。

     当pc2收到此ARP报文后,则回一个Arp reply给L3 ,然后L3就可以学到pc2的fib和arp表项,下行的时候学习到pc2的mac表项。

 

   这样,pc1和pc2就可以ping通了。

 

源文档 <http://forum.huawei.com/jive4/thread.jspa?threadID=217930&tstart=0&orderStr=27>

 

posted on 2010-09-24 15:57  豆芽菜  阅读(515)  评论(0)    收藏  举报