路由器收到的需上送CPU处理的报文,其处理流程和业务报文是几乎相同的,如下图所示。
不同点在于:
差异(1):报文解析识别出的协议报文不再查表转发
在转发引擎PFE(NP或ASIC芯片)上做报文解析时,如果从二层帧头的协议字段就可以直接判断出是需要上送本机CPU处理的协议报文(如ARP、RARP、IS-IS、LLDP、LACP、PPP控制报文等等),或者目的地址为特定的保留组播IP地址(标准中定义,组播地址224.0.0.1~224.0.0.255供路由协议使用)的协议报文,上行不需要查表转发。
前面帖子介绍过,报文通过上行查表转发后,获得报文的目的接口板和出接口信息,以便交换网板能根据目的单板信息把数据交换到对应下行单板,而下行单板根据出接口信息发送报文。那么这些通过报文解析就能识别出来的协议报文,上行不查表转发,其目的接口板和出接口信息填什么呢?答案是填成与入接口板相同的板号,出接口为CPU。
?
差异(2):下一跳地址为127.0.0.1的报文需上送CPU
在路由器上,如下几类路由的下一跳地址为127.0.0.1,匹配这类路由的报文需要上送CPU处理:
1)接口主机路由和直连子网广播每一个配置有IP地址且链路层和IP层协议状态为UP的直连接口,都会生成三条路由,例如下图:
上图中:
- 第1条是网段路由,表示该路由器的GE1/0/0与10.2.5.0网段直连,到该网段的报文需要从GE1/0/0发出去,因此出接口为GE1/0/0;
- 第2条是主机路由,目的地址10.2.5.5是GE1/0/0的IP地址。当路由器收目的地址是自己某个接口的IP地址时,认为这是发送给自己的报文,必须上送自己的应用协议栈。在华为路由器上,这类路由的转发表出接口都是环回接口InLoopBack0,表示该类报文要上送CPU处理。
- 第3条是10.2.5.0/24子网段的广播地址,IP协议规定所有的本网段的三层接口都需要接收该地址的报文,所以广播路由的出接口也为环回接口InLoopBack0,路由器收到该报文,认为是发送给自己的消息,就上送处理。
另外,路由器上有一类特殊的逻辑接口LoopBack接口和VT(Virtual-Template)接口,通常配置为32位掩码的IP地址,对应会生成一条主机路由,如下图:
这类接口的主机路由,其下一跳也是127.0.0.1,转发表中出接口也是InLoopBack0,表示收到这类报文时需上送CPU处理。2)全网广播IP地址为255.255.255.255/32为全网广播,通常在配置主机的启动信息时使用,此时,主机可能还不知道它所在网网络的网络掩码,甚至连它的IP地址也不知道,例如到主机从DHCP或BOOTP服务器获取IP地址时,发送IP地址为255.255.255.255/32的DHCP Request消息报文。这种报文仅允许出现在本地网络中,所以路由器不转发这种报文,收到时上送CPU处理。
3)UNR路由当路由器作为BRAS(Broadband Remote Access Server,宽带远程接入服务器)/BNG(Broadband Network Gateway,宽带网络业务网关)时,用户通过PPPoE拨号接入BRAS/BNG,起初用户并没有IP地址,需要BRAS/BNG(或向RADIUS服务器申请)给用户分配地址。假设分配给用户的地址为10.111.111.1/32,那么BRAS/BNG应该生成10.111.111.1/32的路由,收到网络返回给用户的报文时,这个报文应该匹配到这条路由,并上送CPU处理,以便计费等处理,因此这条的下一跳也应为127.0.0.1。
这种路由比较特殊,不是路由协议学习到的,也不是直连的,也不是静态配置的,而是叫UNR(User Network Route)路由。
另外,为了让网络返回报文给用户,BRAS/BNG需要将这条路由发布出去,使得网络其他设备有到用户的路由,然而,BRAS/BNG可能接入大量用户,如果将每条路由都发布,那需要发布大量路由,不可取。为了避免发布大量路由,BRAS/BNG会根据地址池生成一条UNR路由,其下一跳也是127.0.0.1,出接口为Null0。
?
差异(3):协议报文不再做CAR限速上送CPU的报文在不做上、下行的CAR限速,这是为了避免当流量突发时协议报文因CAR限速被丢弃。
?
差异(4):协议报文不再流分类等处理由于下行就要送往CPU,流分类和标记已经没有作用,跟流分类相关的流策略等功能也是无用的,所有下行不再做跟流分类相关的操作。
差异(5):协议报文上送CPU时要经过CP-CAR处理为了防止大流量报文上送导致CPU过于繁忙,被确认为需要继续上送到CPU的报文,将进行CP-CAR的过滤,之后再上送。CP-CAR全称是Control Plane CAR(Committed Access Rate),是用来限制转发引擎向接口板CPU发送报文的速度,具体做法跟基于流的CAR机制(详细请参见“一个报文的路由器之旅 ?(4) QoS基础”)类似。CP-CAR根据协议的类型,报文的VLAN或者所属的用户,分成很多个管道,每一个管道使用令牌桶进行速率限制,当上送的流量宽值超过设置的速率时,上送的报文将被会随机丢弃,避免CPU过载。
?