一种报文转发方法及装置与流程

文档序号:14993387发布日期:2018-07-20 22:58阅读:137来源:国知局
本申请涉及计算机通信领域,尤其涉及一种报文转发方法及装置。
背景技术
:evpn(ethernetvirtualprivatenetwork,以太网虚拟专用网络)是一种二层vpn技术,在控制平面上采用bgp(bordergatewayprotocol,边界网关协议)通告路由信息,在数据平面上采用vxlan(virtualextensiblelan,可扩展虚拟局域网络)封装方式转发用户报文。为了提高可靠性,可以采用如图1所示的分布式聚合的evpn组网方式。在图1所示的组网中,vtep11(vxlantunnelendpoint,vxlan隧道端点)和vtep13可以组成一个dr(distributedrelay,分布式聚合)系统,vtep11和vtep13之间可以通过iplvxlan隧道相连。vtep11上的dr口1(distributedrelayinterface,分布式聚合接口)和vtep13上的dr口2共同构成一个dr组,vtep11通过dr口1与vm11(virtualmachine,虚拟机)上的普通聚合接口agg1相连,vtep13通过dr口2与vm11上的普通聚合接口agg1相连。通常,当vtep11通过dr口1接收到vm11发送的非单播报文后,vtep11可广播该非单播报文。vtep13可通过iplvxlan隧道接收vtep11广播的该非单播报文。在接收到该非单播报文后,vtep13也会对该非单播报文进行广播,使得该非单播报文通过dr口2转发回vm11,造成环路。技术实现要素:有鉴于此,本申请提供一种报文转发方法及装置,用以防止环路。具体地,本申请是通过如下技术方案实现的:根据本申请的第一方面,提供一种报文转发方法,所述方法应用于分布式聚合dr系统中的任一可扩展虚拟局域网络隧道端点vtep,包括:获取与本vtep同属于同一dr系统中的对端vtep上dr口的状态;若获取到的所述对端vtep上dr口的状态为up状态,则查找与所述对端vtep上dr口对应的本地dr口;其中,所述对端vtep上dr口和查找到的所述本地dr口共同连接着同一用户主机上的同一聚合接口;设置所述本地dr口上配置的所有ac口禁止转发非单播报文;当接收到所述对端vtep发送的vxlan报文后,若该vxlan报文解封装后的报文为第一非单播报文,则向第一广播列表中记录的、除设置了禁止转发非单播报文的ac口之外的其他ac口转发该第一非单播报文;其中,所述第一广播列表为所述vxlan报文的vxlan标识对应的广播列表。根据本申请的第二方面,提供一种报文转发装置,所述装置应用于分布式聚合dr系统中的任一可扩展虚拟局域网络隧道端点vtep,包括:获取单元,用于获取与本vtep同属于同一dr系统中的对端vtep上dr口的状态;查找单元,用于若获取到的所述对端vtep上dr口的状态为up状态,则查找与所述对端vtep上dr口对应的本地dr口;其中,所述对端vtep上dr口和查找到的所述本地dr口共同连接着同一用户主机上的同一聚合接口;设置单元,用于设置所述本地dr口上配置的所有ac口禁止转发非单播报文;第一转发单元,用于当接收到所述对端vtep发送的vxlan报文后,若该vxlan报文解封装后的报文为第一非单播报文,则向第一广播列表中记录的、除设置了禁止转发非单播报文的ac口之外的其他ac口转发该第一非单播报文;其中,所述第一广播列表为所述vxlan报文的vxlan标识对应的广播列表。本申请提出一种报文转发方法,dr系统中的vtep在确定对端vtep上的对端dr口处于up状态时,该vtep可查找与对端dr口共同连接同一vm上同一聚合接口的本地dr口,并设置本地dr口上配置的所有ac口禁止转发非单播报文。当对端vtep在通过对端dr口接收到来自该共同连接的vm的非单播报文,并将该非单播报文广播至本端vtep,本端vtep在对该非单播报文进行广播时,由于不向设置了禁止转发非单播报文的ac口转发,所以本端vtep不会通过与对端dr口关联的本地dr口上的ac口将该非单播报文转发回该vm,所以防止了环路。附图说明图1是本申请一示例性实施例示出的一种采用分布式聚合系统的evpn组网示意图;图2a是本申请一示例性实施例示出的一种报文转发方法的流程图;图2b是本申请另一示例性实施例示出的种报文转发方法的流程图;图3是本申请一示例性实施例示出的另一种采用分布式聚合系统的evpn组网示意图;图4是本申请提供一种报文转发装置所在vtep的硬件架构图;图5是本申请一示例性实施例示出的一种报文转发装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。在介绍本申请的报文转发方法之前,首先对dr口进行介绍。上述dr口,是指与外部设备相连的二层聚合接口。通常该dr口是由dr系统中的vtep上的物理端口聚合而成的。在dr系统中,与外部设备上相同聚合组相连的dr口属于同一dr组。vtep上记录有dr口、以及该dr口所属的dr组的对应关系。以图1为例,假设vtep11上的物理端口port_101、port_102、port_103聚合成二层聚合接口dr口1,vtep13上的物理端口port_201、port_202、port_203聚合成二层聚合接口dr口2,vm11上的物理端口port_301、port_302、port_303聚合成普通聚合接口agg1。vtep11通过dr口1与vm11上的agg1相连,vtep13上的dr口2与vm11上的agg1相连,vtep11的dr口1和vtep13上的dr口2共同构成dr组1。此外,在dr口上还可以配置ac(attachmentcircuit,接入电路)口,该ac口关联了vlan和vxlan。例如,ac口的配置可如下所示:service-instance10(服务实例10);encapsulations-vid10(ac口1关联的vlan10);xconnectvsivpnb(ac口1关联的vsivpnb,其中vpnb为vsi的标识);这个ac口配置表明,从该dr口接收到的报文,若报文携带的vlan标识为vlan10,则会进入vsivpnb转发。参见图2a,图2a是本申请一示例性实施例示出的一种报文转发方法的流程图。该方法可应用在dr系统中的任一vtep(这里为了方便叙述,记为本vtep),该方法可包括如下所述步骤。步骤201:本vtep获取与本vtep属于同一dr系统中的对端vtep上dr口的状态。需要说明的是,本vtep获取对端vtep上dr口状态,可以是获取对端vtep上的一个dr口的dr口状态,也可以是多个dr口的dr口状态,这里不进行具体地限定。此外,下文为了方便叙述,将对端vtep上dr口记为对端dr口。下文为了方便叙述,将与本vtep同属于同一dr系统的对端vtep,记为对端vtep。下面以获取一个对端dr口的dr口状态为例进行说明,获取多个对端dr口状态的方式与之类似,这里不再赘述。方式一:本vtep可通过iplvxlan隧道,接收与本vtep属于同一dr系统的对端vtep发送的表项同步消息,并获取该表项同步消息中携带的对端dr口状态信息。具体地,对端vtep可周期性地检查对端dr口绑定的物理端口是否正常,当dr口绑定的任一一个物理端口处于up状态,则该dr口处于up状态。通常,对端vtep在学习到用户主机vm发送的报文的mac表项、arp抑制表项等转发表项后,对端vtep可向本vtep发送转发表项同步消息,以同步对端vtep学习到的转发表项。此时,对端vtep可将对端dr口的状态、对端dr口所属的dr组标识携带在该转发表项同步消息中,然后将该转发表项同步消息通过iplvxlan隧道发送给本vtep。本vtep通过iplvxlan隧道,接收到该转发表项同步消息后,可获取该转发表项同步消息携带的对端dr口的状态,以及对端dr口所属的dr组标识。方式二:本vtep和对端vtep可周期地向对方发送dr口状态通告消息,用以通告自身的dr口状态。进一步来说,本vtep可周期性地向对端vtep发送针对本地dr口的dr口状态通告消息。对端vtep可周期性地向本vtep发送针对对端dr口的状态通告消息。本vtep接收对端vtep发送的dr口状态通告消息,并获取该dr口状态通告消息携带的对端dr口状态。具体地,对端vtep可周期性地检查对端dr口绑定的物理端口是否正常,当dr口绑定的任一一个物理端口处于up状态,则该dr口处于up状态。然后,对端vtep可通过iplvxlan隧道,向本vtep发送dr口状态通告消息。该dr口状态通告消息里携带了对端dr口的状态、以及对端dr口所属dr组标识。本vtep通过iplvxlan隧道,接收到该dr口状态通告消息后,可获取该dr口状态通告消息携带的对端dr口的状态,以及对端dr口所属的dr组标识。同理,本vtep也可周期性地向对端vtep发送针对本地dr口的dr口状态通告消息。步骤202:若获取到的dr口的状态为up状态,本vtep可查找与所述对端vtep上dr口对应的本地dr口;其中,所述对端vtep上dr口和查找到的所述本地dr口共同连接着同一用户主机上的同一聚合接口。步骤203:本vtep设置查找到的所述本地dr口上配置的所有ac口禁止转发非单播报文。在实现时,本vtep若依据所述对端dr口的状态,确定该对端dr口处于up状态,则查找与所述对端dr口对应的本地dr口。在查找对端dr口对应的本地dr口时,本vtep可先获取上述表项同步消息或者所述dr口状态通告消息中携带的所述对端dr口所属的dr组标识,然后依据预设的dr组标识与本地dr口的对应关系,查找与获取到的所述dr组标识对应的本地dr口。本vtep可设置查找到的本地dr口上配置的所有ac口禁止转发非单播报文。具体地,本vtep可为查找到的本地dr口上配置的所有ac口添加禁止广播转发标记。需要说明的是,当本vtep获取到多个对端dr口的状态信息,并确定多个对端dr口均处于up状态,本vtep可查找与该多个对端dr口分别对应的本地dr口,并为查找到的多个本地dr口中的每个dr口上配置的所有ac口添加禁止广播转发标记。步骤204:当接收到所述对端vtep发送的vxlan报文后,若该vxlan报文解封装后的报文为第一非单播报文,则向第一广播列表中记录的、除设置了禁止转发非单播报文的ac口之外的其他ac口转发该第一非单播报文;其中,所述第一广播列表为所述vxlan报文的vxlan标识对应的广播列表。其中,上述非单播报文,可以包括广播报文,未知单播报文或者组播报文,这三种类型的报文可以统称为bum((broadcast,unknownunicast,ormulticasttraffic,广播、未知单播或者组播))报文、以及arp请求报文等需要广播的协议报文等。在实现时,当本vtep在接收到vxlan报文后,首先可确定该vxlan报文是否为同一dr系统中的对端vtep发送的。方式一:本vtep可确定接收该vxlan报文的隧道口是否为iplvxlan隧道口,如果是,本vtep可确定该vxlan报文为对端vtep发送的。如果不是,则确定该vxlan报文不是对端vtep发送的。方式二:本vtep可基于该vxlan报文的源ip地址,若该源ip地址是对端vtep的ip地址,则确定该vxlan报文是对端vtep发送的。若该源ip地址不是对端vtep的ip地址,则确定该vxlan报文不是对端vtep发送的。在本申请实施例中,若该vxlan报文是对端vtep发送的,且该vxlan报文解封装后的报文是非单播报文(这里记为第一非单播报文),本vtep可确定广播该第一非单播报文的广播列表(这里记为第一广播列表)。在确定时,本vtep可读取该vxlan报文的vxlan标识,然后将该vxlan标识关联的广播列表作为第一广播列表。然后,本vtep可向第一广播列表中记录的除设置了禁止转发非单播报文的ac口之外的其他ac口转发该非单播报文。若该vxlan报文不是对端vtep发送的,且该vxlan报文解封装后的报文是非单播报文,则按照该vxlan报文的vxlan标识对应的广播列表进行广播。此外,在本申请实施例中,当本vtep接收到用户主机vm发送的非单播报文后,本vtep处理流程如下所示:参见图2b,图2b所示的报文转发流程包括如下所示步骤。步骤211:本vtep可接收用户主机发送的第二非单播报文,并确定与该第二非单播报文对应的第二广播列表。在实现时,本vtep可在接收来自于用户主机的第二非单播报文的dr口上,查找与该第二非单播报文携带的vlan标识对应的ac口,并将该ac口关联的vsi的广播列表作为该第二非单播报文对应的第二广播列表。步骤212:本vtep可通过所述第二广播列表中记录的vxlan隧道口、iplvxlan隧道口、除该非单播报文对应的ac口之外的其他ac口转发该非单播报文。其中,所述第二非单播报文对应的ac口为接收所述第二非单播报文的dr口上配置的、且与该第二非单播报文的vlan标识对应的ac口。需要说明的是,对端vtep接收到用户主机vm发送的非单播报文时,处理流程与步骤211-步骤212相同。通过上述描述可知,本vtep在确定对端vtep上的对端dr口处于up状态时,本vtep可查找与对端dr口对应的本地dr口,然后设置本地dr口上配置的所有ac口禁止广播转发,其中,对端dr口与该查找到的本地dr口共同连接着同一vm上同一聚合接口。当对端vtep在通过对端dr口接收到来自vm的非单播报文,并将该非单播报文广播至本vtep,本vtep在对该非单播报文进行广播时,由于不向设置了禁止转发非单播报文的ac口转发,所以本vtep不会通过与对端dr口对应的本地dr口上的ac口将该非单播报文转发回该vm,所以防止了环路。下面以上述非单播报文为arp请求报文为例,并结合图3,对上述报文转发方法进行详细地说明。参见图3,在图3所示的采用分布式聚合系统的evpn组网中,vtep31和vtep33组成一个分布式聚合系统(dr系统)。vtep31和vtep33通过iplvxlan隧道相连。vtep31和vtep32通过vxlan隧道相连。vtep33和vtep32通过vxlan隧道相连。vtep32通过用户链路与vm32相连。假设,vtep31、vtep32和vtep33及其分别下挂的vm属于同一vxlan(即vxlan100)。假设vtep31上的物理端口port_11、port_12、port_13聚合成二层聚合接口dr口1,vtep33上的物理端口port_21、port_22、port_23聚合成二层聚合接口dr口2,vm31上的物理端口port_31、port_32、port_33聚合成普通聚合接口agg1。vtep31通过dr口1与vm31上的agg1相连,vtep33上的dr口2与vm31上的agg1相连,vtep31的dr口1和vtep33上的dr口2共同构成dr组1。此外,假设还在vtep31上的dr口1上配置的ac口1,ac口3。同时,还在vtep33上的dr口2上配置与ac口1对应的ac口2,与ac口3对应的ac口4。其中,ac口1和ac口2关联vlan10和vsivpnb。ac口3和ac口4关联vlan11和vsivpnb。同时,配置vsivpnb对应vxlan100。此时,vtep31上可存在如下记录:dr口1与dr组1的对应关系;dr口1与物理端口port_11、port_12、port_13的绑定关系。dr口1与ac口1、ac口3的对应关系;ac口1:service-instance10(服务实例10);encapsulations-vid10(ac口1关联的vlan10);xconnectvsivpnb(ac口1关联的vsivpnb,其中vpnb为vsi的标识);ac口3:service-instance11(服务实例11);encapsulations-vid11(ac口3关联的vlan11);xconnectvsivpnb(ac口3关联的vsivpnb,其中vpnb为vsi的标识);vsivpnb与vxlan100的对应关系。vtep2上可存在如下记录:dr口2与dr组1的对应关系;dr口2与物理端口port_21、port_22、port_23的绑定关系。dr口2与ac口2、ac口4的对应关系;ac口2:service-instance10(服务实例10);encapsulations-vid10(ac口2关联的vlan10);xconnectvsivpnb(ac口2关联的vsivpnb,其中vpnb为vsi的标识);ac口4:service-instance11(服务实例11);encapsulations-vid11(ac口4关联的vlan11);xconnectvsivpnb(ac口4关联的vsivpnb,其中vpnb为vsi的标识);vsivpnb与vxlan100的对应关系。在介绍完vtep31和vtep33上的配置之后,下面从禁止广播转发标记设置、arp请求报文的转发两方面来详细介绍本申请提出的报文转发方法。1)禁止广播转发标记设置步骤301:vtep33可获取vtep31上的dr口的状态信息。需要说明的是,vtep33获取vtep31上的dr口状态信息,可以是一个dr口的dr口状态信息,也可以是多个dr口的dr口状态信息,这里不进行具体地限定。这里以vtep33获取vtep31上的dr口1的状态信息为例进行说明。当然,在实际应用中,vtep31和vtep33上还存在其他dr口,比如,vtep31上存在dr口3、vtep33上存在dr口4,dr口3和dr口4同属dr组2,那么vtep33获取dr口3的状态信息,对dr口4下的ac口设置禁止广播转发的方法也与以dr口1为例的方法类似,这里不再赘述。方式一:vtep31可将dr口1的状态信息通过转发表项同步消息,通知给vtep33。具体地,vtep31可周期性地检查dr口1绑定的物理端口port_11、port_12、port_13是否正常,port_11、port_12、port_13任一一个物理端口处于up状态,dr口1就处于up状态。通常,vtep31在学习到用户主机vm发送的报文的mac表项、arp抑制表项等转发表项后,vtep31可向vtep33发送转发表项同步消息,以同步vtep31学习到的转发表项。此时,vtep31可将dr口1的状态、dr口1所属的dr组标识(dr组1)携带在该转发表项同步消息中,然后将该转发表项同步消息通过iplvxlan隧道发送给vtep33。vtep33在接收到该转发表项同步消息后,可获取该转发表项同步消息携带的dr口1的状态,以及dr口1所属的dr组标识(即dr组1)。方式二:vtep31和vtep33可周期性地互相通告自身的dr口状态。具体地,vtep31可周期性地检查dr口1绑定的物理端口port_11、port_12、port_13是否正常,port_11、port_12、port_13任一一个物理端口处于up状态,dr口1就处于up状态。然后,vtep31可向vtep33发送针对dr口1的dr口状态通告消息。该dr口状态通告消息里携带了dr口1的状态、以及dr口1所属dr组标识(即dr组1)。vtep33在接收到该dr口状态通告消息后,可获取该dr口状态通告消息携带的dr口1的状态,以及dr口1所属的dr组标识(即dr组1)。同理,vtep33也可周期性地向vtep31发送针对dr口2的dr口状态通告消息。步骤302:vtep33在依据dr口1的状态,确定dr口1处于up状态后,可查找与该dr口1对应的本地dr口,并设置查找到的本地dr口上配置的所有ac口禁止广播转发。具体地,vtep33可依据预设的dr组标识与dr口的对应关系,查找上述获取到的dr组1对应的本地dr口(即dr口2)。然后,vtep33可为dr口2上配置的所有ac口(即ac口2和ac口4)添加禁止广播转发标记。需要说明的是,当vtep33获取到多个对端dr口的状态,并确定多个对端dr口均处于up状态,vtep33可查找与该多个对端dr口分别关联的本地dr口,并为查找到的多个本地dr口中的每个dr口上配置的所有ac口均添加禁止广播转发标记。例如,vtep31上存在dr口3、vtep33上存在dr口4,dr口3和dr口4同属dr组2(图3中未示出)。vtep31也需要为dr口3上配置的所有ac口添加禁止广播转发标记。2)arp请求报文的转发vm31通过agg1向上述dr系统发送arp请求报文。假设该arp请求报文携带的vlantag为tag10。在发送的过程中,vm31可在本地与vtep31和vtep32相连的链路中,哈希一条链路进行arp请求报文的转发。假设,哈希出的链路为本地与vtep31之间的链路,vm31通过该哈希出的链路将arp请求报文发送给vtep31。步骤401:vtep31在接收到该arp请求报文后,可确定该arp请求报文所属的vsi。具体地,假设,vtep31通过物理端口port_11接收到vm31发送的arp请求报文。vtep31可根据预设的dr口与物理端口的绑定关系,确定该arp请求报文的物理入端口port_11所绑定的dr口(即dr口1)。然后,vtep31可在dr口1上配置ac口1和ac口2中,查找与该arp请求报文携带的vlan标识(即tag10)对应的ac口(即ac口1)。然后,vtep31可基于ac口1的配置,确定该ac口1关联的vsi,即vsivpnb。步骤402:vtep31可在本地记录的arp抑制表项中,查找与确定出的vsivpnb和该arp请求报文请求的ip地址匹配的arp抑制表项。arp抑制表项可如表1所示:请求的ip地址mac地址vsiac口表1步骤403:若查找到与确定出的vsivpnb和该arp请求报文请求的ip地址匹配的arp抑制表项,vtep31可将该arp抑制表项中的mac地址返回给vm31。步骤404:若未查找到与确定出的vsivpnb和该arp请求报文请求的ip地址匹配的arp抑制表项,vtep31可广播该arp请求报文。在广播时,vtep31通过广播列表中记录的vxlan隧道口、iplvxlan隧道口、除该arp请求报文对应的ac口之外的其他ac口转发该arp请求报文。其中,该广播列表为上述确定出的vsi关联的广播列表。其中,该arp请求报文对应的ac为接收为该arp请求报文的dr口(即dr口1)上配置的、且与该arp请求报文的vlan标识(vlan10)对应的ac口(即ac口1)。例如,在本例中,假设vsivpnb关联的广播列表记为广播列表1,广播列表1中记录的端口有vtep31连接vtep32的vxlan隧道口、iplvxlan隧道口、以及dr口1上配置的ac口1和ac口3。1)vtep31不通过ac口1(arp请求报文对应的ac口)转发arp请求报文,vtep31通过dr口1上配置的ac口3转发该arp请求报文。需要说明的是,上述其他ac口还包括vtep31上其他dr口上配置的ac口,与单挂在vtep31上的vm连接的ac口等等。比如,vtep31上存在dr口3、vtep33上存在dr口4,dr口3和dr口4同属dr组2(图3中未示出)。vtep31也需要向dr口3上配置的所有ac口转发该arp请求报文。再比如,vm32单挂在vtep31上,vtep31上与vm32连接的接口上配置有ac口5(图3中未示出),则vtep31通过ac口5转发该arp请求报文。2)vtep31通过vxlan隧道口将该arp请求报文转发给vtep32。具体地,vtep31可将该arp报文进行vxlan封装,生成vxlan报文,在本例中,由于该arp报文对应的vsi为vsivpnb,并且vsivpn与vxlan100对应,所以该vxlan报文的vxlan标识为vxlan100。接着,vtep31可通过vxlan隧道口,将封装了arp报文的vxlan报文发送给vtep32。3)vtep31通过iplvxlan隧道口将该arp请求报文转发给vtep33。具体地,vtep31可将该arp报文进行vxlan封装,生成vxlan报文。在本例中,由于该arp报文对应的vsi为vsivpnb,并且vsivpn与vxlan100对应,所以该vxlan报文的vxlan标识为vxlan100。接着,vtep31可通过iplvxlan隧道口,将封装了arp报文的vxlan报文发送给vtep33。步骤405:vtep33在接收到vxlan报文后,可确定该vxlan报文是否为同一dr系统中的对端vtep(即vtep31)发送的。方式一:vtep33可确定接收该vxlan报文的隧道口是否为iplvxlan隧道口,如果是,vtep33可确定该vxlan报文为vtep31发送的。如果不是,则确定该vxlan报文不是vtep31发送的。方式二:vtep33可基于该vxlan报文的源ip地址,若该源ip地址是vtep31的ip地址,则确定该vxlan报文是vtep31发送的。若该源ip地址不是vtep31的ip地址,则确定该vxlan报文不是vtep31发送的。步骤406:若该vxlan报文是vtep31发送的,且该vxlan报文解封装后的以太网报文是arp请求报文,vtep33可查找是否存与该arp请求报文匹配的arp抑制表项。在实现时,vtep33可在本地的arp抑制表中,查找是否存在与该vxlan报文的vxlan标识(即vxlan100)对应的vsi(即vsivpnb)以及该arp请求报文所请求的ip地址匹配的arp抑制表项。在本例中,由于vtep31和vtep33属于同一dr系统,vtep31和vtep33上配置的转发表项是相同的。vtep31上未查找到匹配的arp抑制表项,所以vtep33上也不存在匹配的arp抑制表项。步骤407:若不存在匹配的arp抑制表项,则对该arp请求报文进行广播。在实现时,vtep33可获取广播该arp请求报文的广播列表。具体地,vtep33可读取该vxlan报文的vxlan标识(即vxlan100),然后将vxlan100对应的广播列表作为广播该arp请求报文的广播列表,这里记为广播列表2。然后,vtep33可通过广播列表2中记录的除设置了禁止广播转发标记的ac口之外的其他ac口转发该arp请求报文。例如,该广播列表2记录的端口包括vtep33与vtep32相连的vxlan隧道口,iplvxlan隧道口,dr口2上的ac口2、ac口4,以及用于连接单挂在本地的vm的ac口(图3中未示出)。由于ac口2和ac口4被添加了禁止广播转发标记,所以vtep33不通过该ac口2和ac口4转发该arp请求报文。vtep33可通过广播列表2记录的与用于连接单挂在本地的vm的ac口。需要说明的是,在现有的evpn组网中,vxlan隧道存在水平分割,即从一个vxlan隧道接收到的报文不会通过另一个vxlan隧道进行转发,所以在本例中,由于vtep33从iplvxlan隧道接收到封装有arp请求报文的vxlan报文,所以vtep33不会向广播列表2中记录的vtep33与vtep32相连的vxlan隧道口转发该arp请求报文。也不会向接收该arp请求报文的源端口,即iplvxlan隧道口转发该arp请求报文。在本申请实施例中,由于vtep33在确定dr口1处于up状态后,将dr口1关联的dr口2上配置的所有ac均设置为禁止广播转发,使得vtep31将接收到的来自于vm31的arp请求报文转发给vtep33,vtep33在对该arp请求报文进行广播时,由于不通过ac口2进行转发,使得该arp请求报文不会再发送回vm31,所以不会产生环路。参见图4,本申请还提供一种报文转发装置所在vtep的硬件架构图,该网络设备包括:通信接口401、处理器402、存储器403和总线404;其中,通信接口401、处理器402和存储器403通过总线404完成相互间的通信。其中,通信接口401,用于与同一dr系统中的对端vtep、远端vtep、vm通信。处理器402可以是一个cpu,存储器403可以是非易失性存储器(non-volatilememory),并且存储器403中存储有报文转发的逻辑指令,处理器402可以执行存储器403中存储的报文转发的逻辑指令,以实现报文转发的功能。至此,完成图4所示的硬件结构描述。参见图5,图5是本申请一示例性实施例示出的一种报文转发装置的框图。该装置可应用于dr系统中的任一vtep,可包括如下所示单元。获取单元501,用于获取与本vtep同属于同一dr系统中的对端vtep上dr口的状态;查找单元502,用于若获取到的所述对端vtep上dr口的状态为up状态,则查找与所述对端vtep上dr口对应的本地dr口;其中,所述对端vtep上dr口和查找到的所述本地dr口共同连接着同一用户主机上的同一聚合接口;设置单元503,用于设置所述本地dr口上配置的所有ac口禁止转发非单播报文;第一转发单元504,用于当接收到所述对端vtep发送的vxlan报文后,若该vxlan报文解封装后的报文为第一非单播报文,则向第一广播列表中记录的、除设置了禁止转发非单播报文的ac口之外的其他ac口转发该第一非单播报文;其中,所述第一广播列表为所述vxlan报文的vxlan标识对应的广播列表。可选的,所述获取单元501,具体用于接收与本vtep同属于同一dr系统的对端vtep发送的表项同步消息,并获取该表项同步消息中携带的所述对端vtep上dr口的状态;或者,向与本vtep同属于同一dr系统的对端vtep发送针对本地dr口状态的dr口状态通告消息;接收所述对端vtep发送的dr口状态通告消息,并获取该dr口状态通告消息携带的所述对端vtep上dr口的状态。可选的,所述表项同步消息、以及所述dr口状态通告消息还携带了所述对端vtep上dr口所属的dr组标识;所述查找单元502,具体用于获取所述表项同步消息或者所述dr口状态通告消息中携带的所述对端vtep上dr口所属的dr组标识;依据预设的dr组标识与本地dr口的对应关系,查找与获取到的所述dr组标识对应的本地dr口。可选的,所述第一非单播报文为arp请求报文;所述第一转发单元504,具体用于当未查找到与所述arp请求报文匹配的arp抑制表项,则向所述第一广播列表中记录的、除设置了禁止转发非单播报文的ac口之外的其他ac口转发该arp请求报文。可选的,所述装置还包括:接收单元505,用于接收用户主机发送的第二非单播报文,并确定用于广播该第二非单播报文的第二广播列表;第二转发单元506,用于通过所述第二广播列表中记录的vxlan隧道口、iplvxlan隧道口、除该第二非单播报文对应的ac口之外的其他ac口转发所述第二非单播报文;其中,所述第二非单播报文对应的ac口为接收所述第二非单播报文的dr口上配置的、且与该第二非单播报文的vlan标识对应的ac口。可选的,所述接收单元505,具体用于在接收所述第二非单播报文的dr口上,查找与所述第二非单播报文携带的vlan标识对应的ac口;将查找到的ac口所关联的vsi的广播列表作为第二广播列表。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1