华为3Com公司三层以太网交换机( 四 )


对于二层未解析 , 硬件本身可以将该报文在VLAN内广播 , 但是对于三层报文地址的未解析报文硬件本身则不对该报文进行任何的处理 , 而产生CPU中断 , 靠软件来处理 。
硬件部分的处理可以用这句话来描述:
收到报文后 , 判定该报文是二或是三层报文 , 然后判定其中的源 , 目的地址是否已经解析 , 假如已经解析 , 则硬件完成该报文的转发 , 假如是未解析的情况 , 则产生CPU中断 , 靠软件来学习该未解析的地址 。
3)驱动代码部分
其中要害的核心有:
地址解析任务:在该任务中对已经报上来的未解析的地址进行学习 , 以便硬件完成后续的报文的转发而不需软件干预 。
地址治理任务:为了便于软件治理和维护 , 软件部分保存了一份同硬件中转发表相同的地址表copy 。
fib(forwarding information base)表: 这个表的信息来源于ip route table中的路由信息 , 之所以把它放在了driver部分 , 是为了地址解析任务在学IP地址时查找的方便 。
举例:
display fib:
Destination/MaskNexthopFlag Interface
0.0.0.0/010.110.255.9 IVLAN-Interface2
10.110.48.0/21 10.110.48.1DVLAN-Interface1
10.110.48.1/32 127.0.0.1 DInLoopBack0
10.110.255.8/3010.110.255.10 DVLAN-Interface2
10.110.255.10/32127.0.0.1 DInLoopBack0
127.0.0.0/8127.0.0.1 DInLoopBack0
三层转发主要涉及到两个要害的线程:
地址学习线程和报文转发线程 , 这个和二层的线程是类似的;
1)报文转发线程主要根据地址学习线程生成的转发表(ipfdb table)信息来对报文进行转发 , 假如里面的信息足够多 , 这个转发的过程全部由硬件来完成 , 假如信息不够 , 则会要求地址学习线程来进行学习 , 同时该报文硬件不能转发 , 会交给软件协议栈来进行转发 。
2)地址学习线程主要用来生成硬件转发表(ipfdb table)
其实ipfdb table和二层的MAC地址表也是类似的 , 只不过里面的具体表项所代表的含义和所起的作用不同罢了 。
有一个问题:在路由器等软件转发引擎中 , 每收一个报文都会去查路由表查下一跳 , 然后再查ARP表找下一跳的MAC , 可是在三层交换机(如S3526)中 , 报文转发的时候不需要去查路由表和ARP表 , 这样的话 , 这两个表是不是就没有什么作用了?
回答当然是否定的 , 在S3526的三层转发流程中 , 过程一般都是这样的 , 第一个报文硬件无法转发 , 要进行IP地址的学习 , 同时为了保证不丢包 , 该报文也由软件来进行转发 , 在学习完成以后 , 第二 , 第三个报文以后就一直是由硬件来完成转发了 , 这个过程也可以套用“一次路由 , 多次交换”来形象的进行总结 , 在一次路由中 , 要利用路由表和ARP表来学习IP地址 , 和转发第一个报文 , 在以后的多次交换过程中 , 则只要有ipfdb table就可以了 。

推荐阅读