路由器收到目的地址为224.0.0.5和239.0.0.5的组播报文如何处理?
224.0.0.5为永久组地址,是IANA为路由协议预留的IP地址(也称为保留组地址),用于标识一组特定的网络设备,供路由协议,目前被分配于OSPF协议使用,运行了OSPF协议的网络设备默认都会加入该组播组。
当路由器收到目的地址为224.0.0.5组播报文时,首先查看路由器是否加入了224.0.0.5这个组播组(即是否运行了OSPF协议),如果未加入该组,则丢弃报文,如果加入了该组,则表示该路由器运行了OSPF协议,根据IP报文中协议号89,交由上层协议OSPF处理。OSPF报文共有5种,分别为Hello、DD、LSR、LSU、LSACK,每一种报文的处理方式略有不同,处理方式如下:
Hello报文的作用是发现邻居和维持邻居。
如果该Hello报文是用于发现邻居的,那么需要检查OSPF头部和Hello报文中参数是否合法,合法则回复Hello报文,并迁移状态,不合法则忽略丢弃。
如果该Hello报文是用于维持邻居的,那么收到Hello报文刷新本端邻居失效计时器(默认为4倍的hello间隔)。
DD报文作用是描述本地LSDB的摘要信息,并同步数据库。
如果该报文为空DD报文,作用是用来主从选举,需要检查MTU值是否合法(华为默认不开启),如果合法则开始交互摘要信息,并同步数据库,如果不合法则停留在Exstart状态。
如果该报文位交互摘要信息的DD报文,则需要根据该报文中的MS位判断主从关系,如果为master,则本端路由器为slave,需要使用master的序列号进行回复,如果为slave,则需要本端序列号+1进行回复,或者本端摘要信息已经交互完成则可以进入下一个状态。
LSR报文的作用是用于向邻居请求本端缺少的LSA信息。
收LSR报文,根据LSA报文携带的三要素信息在本地LSDB提取对应的LSA信息,并封装再LSU报文进行回复。
LSU报文的作用是用于发送完整的LSA信息。
OSPF数据库同步是可靠,当收到LSU报文之后会回复LSACK报文进行确认。
LSACK报文的作用是对收到的LSA信息进行确认。
收到该报文后关闭本端重传计时器。
239.0.0.5为本地管理组地址,仅在本地管理域内有效,一般情况下,用户构建本地组播网络所使用。
1.当路由器收到目的地址为239.0.0.5组播报文时,首先判断是否存在组播转发表项,如果不存在组播转发表项,则查看是否运行PIM协议或IGMP协议,如果未运行PIM或者IGMP协议,则丢弃该报文。如果运行PIM或者IGMP协议则根据以下情况处理:
如果运行IGMP协议,表示该路由器处于用户侧,为用户侧DR,首先判断与用户侧连接的接口运行的IGMP协议是否与收到的报文为同一版本,版本不同则丢弃,如果相同则要区分报文类型,如果是成员加组报文(report报文),则构建IGMP组播转发表项,如果是成员离组报文,则触发特定组查询报文或特定源组查询报文,两秒之内未收到回复则删除IGMP表项。
如果运行PIM协议,路由器可能处于源端DR的位置、PIM网络中间位置,当收到组播数据报文时,首先进行RPF检查,确认组播数据来源是否正确,如果RPF检测未通过则丢弃,通过则构建组播转发表项,找到对应的下游接口并转发。
2.当路由器收到目的地址为239.0.0.5组播报文时,首先判断是否存在组播转发表项,如果存在组播转发表项,则根据以下情况处理:
①如果路由器为用户侧DR,运行的协议为IGMP协议,并且存在IGMP表项,则刷新表项老化时间。
②如果运行的是PIM协议,并且存在组播转发表项(S,G),接收该报文的接口与转发表项的入接口一致,则向所有的出接口转发该报文。
如果存在(S,G)转发表项,但是接收该报文的接口与转发表项的入接口不一致,则对此报文进行RPF检查。对RPF检查结果的处理方式为:
a.若RPF检查选取出的RPF接口与转发表项的入接口一致,则说明(S,G)表项正确,报文来源路径错误,将其丢弃。
b.若RPF检查选取出的RPF接口与转发表项的入接口不符,则收缩明(S,G)表现已过时,于是把表项中的入接口更新为RPF接口。然后再根据RPF检查规则进行判断:如果接收该报文的接口正式其RPF接口,则向转发表项的所有接口转发该报文,否则将其丢弃。