CN104378290B - 一种报文转发方法和装置 - Google Patents
一种报文转发方法和装置 Download PDFInfo
- Publication number
- CN104378290B CN104378290B CN201410602687.6A CN201410602687A CN104378290B CN 104378290 B CN104378290 B CN 104378290B CN 201410602687 A CN201410602687 A CN 201410602687A CN 104378290 B CN104378290 B CN 104378290B
- Authority
- CN
- China
- Prior art keywords
- message
- node
- address
- direct
- present
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种报文转发方法和装置,以解决报文转发过程中出现的广播环路、广播风暴的问题。其中一种报文转发方法包括:接收上一节点发送的报文;辨别报文的报文类型;当辨别出报文为广播报文时,判断报文是否已经转发或者达到最大转发跳数,若报文已经转发或者达到最大转发跳数,则丢弃报文;若报文未转发且未达到最大转发跳数,则更新报文,将更新后的报文转发给其他节点;当辨别出报文为单播报文时,判断报文的可选节点地址是否为当前节点的地址或者报文已经回复;若报文的可选节点地址不是当前节点的地址或者报文已经回复,则丢弃报文;若可选节点地址是当前节点的地址且报文未回复,则回复报文。本发明避免了广播环路和广播风暴的发生。
Description
技术领域
本发明涉及测试技术领域,特别是涉及一种报文转发方法和装置。
背景技术
广播环路是指报文在网络节点之间不断传输却始终无法到达目的节点的一种现象。网络拓扑发生变化时,若网络收敛缓慢产生不协调或矛盾的路径选择,节点对无法到达目的节点的路由不予理睬,就会导致用户的报文不停地循环发送,占用大量网络带宽。
下面结合图1对广播风暴进行说明,如图1所示节点S要发报文到节点F,中间ABCDE节点会将同一个报文转发多次,甚至S和F节点接收到多个同样的报文并再次转发,整个网络节点都在不断转发重复的报文,导致整个网络带宽被大量占用,资源被严重浪费。目前的报文转发方法会让中间ABCDE节点各转发同一个报文多次,容易导致广播环路和广播风暴,占用大量网络带宽,并且报文转发的效率低。
发明内容
本发明提供了一种报文转发方法和装置,以解决报文转发过程中出现的广播环路、广播风暴的问题。
为了解决上述问题,本发明公开了一种报文转发方法,包括:
接收上一节点发送的报文,所述报文包括:转发跳数和/或可选节点地址;
辨别所述报文的报文类型,所述报文类型包括:广播报文和单播报文;
当辨别出所述报文为广播报文时,判断所述报文是否已经转发或者达到最大转发跳数,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文;若所述报文未转发且未达到最大转发跳数,则更新所述报文,将 更新后的报文转发给其他节点;
当辨别出所述报文为单播报文时,判断所述报文的可选节点地址是否为当前节点的地址或者所述报文已经回复;若所述报文的可选节点地址不是所述当前节点的地址或者所述报文已经回复,则丢弃所述报文;若所述报文的可选节点地址是所述当前节点的地址且所述报文未回复,则回复所述报文。
可选地,所述报文还包括:可选长度;所述辨别所述报文的报文类型,包括:
查询所述报文的可选长度;
当所述报文的可选长度可选长度为0时,辨别出所述报文为广播报文;
当所述报文的可选长度可选长度为不为0时,辨别出所述报文为单播报文。
可选地,所述判断所述报文是否已经达到最大转发跳数,包括:
判断所述报文的转发跳数是否达到预设的转发阈值;
当所述转发跳数达到预设的转发阈值时,判断所述报文达到最大转发跳数;
当所述转发跳数未达到预设的转发阈值时,判断所述报文未达到最大转发跳数。
可选地,所述报文还包括:报文序列号;所述判断所述报文是否已经转发,包括:
查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号;
判断所述报文的报文序列号是否在所述当前节点的已发送列表中;
当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经转发;
当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未转发。
可选地,所述报文还包括:直接节点个数、直接节点地址和/或转发节 点地址;所述更新所述报文包括:
判断所述报文的直接节点个数是否为0;
当所述报文的直接节点个数为0时,将所述报文的转发节点地址更新为当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为1,将所述报文的直接节点地址更新为所述上一节点的地址;
当所述报文的直接节点个数不为0时,则判断当前节点的直接节点地址是否包含在所述报文的直接节点地址中;当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址。
可选地,所述报文还包括:直接节点地址;所述将更新后的报文转发给其他节点包括:
按照更新后的报文的直接节点地址将所述更新后的报文转发给更新后的报文的直接节点。
可选地,所述报文还包括:报文序列号;所述判断所述报文是否已经回复,包括:
查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号;
判断所述报文的报文序列号是否在所述当前节点的已发送列表中;
当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经回复;
当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未回复。
可选地,所述报文还包括:可选长度、直接节点个数、直接节点地址和/或转发节点地址;所述回复所述报文包括:
判断所述当前节点的直接节点地址是否包含在所述报文的直接节点地 址中;
当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;
当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的可选长度更新为所述当前节点除所述上一节点外的直接节点个数,将所述报文的可选节点地址更新为所述当前节点除所述上一节点外的直接节点地址,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址;按照更新后的报文的直接节点地址进行回复。
本发明还公开了一种报文转发装置,包括:
接收模块,用于接收上一节点发送的报文,所述报文包括:转发跳数和/或可选节点地址;
辨别模块,与所述接收模块相连,用于辨别所述报文的报文类型,所述报文类型包括:广播报文和单播报文;
广播报文处理模块,与所述辨别模块相连,用于当所述辨别模块辨别出所述报文为广播报文时,判断所述报文是否已经转发或者达到最大转发跳数,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文;若所述报文未转发且未达到最大转发跳数,则更新所述报文,将更新后的报文转发给其他节点;
单播报文处理模块,与所述辨别模块相连,用于当所述辨别模块辨别出所述报文为单播报文时,判断所述报文的可选节点地址是否为当前节点的地址或者所述报文已经回复;若所述报文的可选节点地址不是所述当前节点的地址或者所述报文已经回复,则丢弃所述报文;若所述报文的可选节点地址是所述当前节点的地址且所述报文未回复,则回复所述报文。
可选地,所述报文还包括:可选长度;所述辨别模块包括:
查询子模块,用于查询所述报文的可选长度;
广播辨别子模块,与所述查询子模块相连,用于当所述查询子模块查 询到所述报文的可选长度为0时,辨别出所述报文为广播报文;
单播辨别子模块,与所述查询子模块相连,用于当所述查询子模块查询到所述报文的可选长度为不为0时,辨别出所述报文为单播报文。
与现有技术相比,本发明包括以下优点:
首先,本发明提供的报文转发方法,在当前节点已经转发过所述报文时,丢弃所述报文,可以保证同一个报文最多只被一个节点转发一次,避免了广播风暴的发生。具体可以通过报文中的报文序列号来实现,当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经转发,从而丢弃所述报文,这样同一个报文就不会被一个节点转发一次以上了,进一步避免了广播风暴的发生。
其次,本发明提供的报文转发方法,在所述报文已经达到最大转发跳数时,丢弃所述报文,即对报文的最多转发次数进行了限制,可以避免出现广播环路。具体可以通过报文中的转发跳数来实现,当所述报文的转发跳数达到预设的阈值时,判断所述报文已经达到最大转发跳数,从而丢弃所述报文,这样同一个报文就不会被无限次转发,从而避免了广播环路的出现,减少了在报文转发时对网络带宽的占用,提高了报文转发的效率。
附图说明
图1是现有技术中的节点示意图;
图2是本发明实施例一种报文转发方法的流程图;
图3是本发明实施例广播报文处理过程的流程图;
图4是本发明实施例单播报文处理过程的流程图;
图5是本发明实施例一种报文转发方法的总体流程图;
图6是本发明实施例一种报文转发装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参照图2,示出了本发明实施例一种报文转发方法的流程图,本实施例具体可以包括以下步骤:
步骤101,接收上一节点发送的报文,所述报文包括:转发跳数和/或可选节点地址。需要说明的是,和/或包括以下三种情况:(1)报文包括转发跳数和可选节点地址;(2)报文包括转发跳数;(3)报文包括可选节点地址。
所述报文的转发跳数用于表示报文被转发的次数,转发跳数的初始值为0,报文每被转发一次,所述转发跳数加一。所述报文的可选节点地址用于表示该报文的目标地址,主要针对单播报文,在单播报文中,可选节点地址为目标节点的地址,广播报文的可选节点地址为0。
步骤102,辨别所述报文的报文类型,所述报文类型包括:广播报文和单播报文。
接收到的报文可以是广播报文,也可以是单播报文,对于广播报文和单播报文,本实施例的处理方式不同,因此需要先辨别所述报文是广播报文还是单播报文,以便进一步处理。
步骤103,当辨别出所述报文为广播报文时,判断所述报文是否已经转发或者达到最大转发跳数,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文;若所述报文未转发且未达到最大转发跳数,则更新所述报文,将更新后的报文转发给其他节点。
如果当前节点已经转发过该报文,再次转发的话会导致广播风暴;如果该报文已经被转发了多次,再次转发则会导致广播环路。为了避免上述广播风暴和广播环路的发生,本实施例在处理广播报文时,首先判断所述报文是否已经转发或者达到最大转发跳数。如果当前节点已经转发过该报文,则将该报文丢弃;如果该报文已经达到最大转发跳数,同样将该报文丢弃,其中最大转发跳数可以预设一个转发阈值,比如设置为9,这样如果该报文的转发次数为9则丢弃该报文。因此只有在所述报文未转发且未达到最大转发跳数时,更新所述报文,将更新后的报文转发给其他节点。上述 更新所述报文,主要指更新报文的转发跳数,因为转发跳数代表了该报文的转发次数。
步骤104,当辨别出所述报文为单播报文时,判断所述报文的可选节点地址是否为当前节点的地址或者所述报文已经回复;若所述报文的可选节点地址不是所述当前节点的地址或者所述报文已经回复,则丢弃所述报文;若所述报文的可选节点地址是所述当前节点的地址且所述报文未回复,则回复所述报文。
如果当前节点已经回复过该报文,再次回复的话会导致广播风暴,因此将该报文丢弃;如果所述报文的可选节点地址不是所述当前节点的地址,说明该单播报文并不是发送给当前节点的,因此无需回复,直接丢弃该报文即可。所以本实施例在处理单播报文时,首先判断当前节点是否已经回复过该报文,如果当前节点回复过该报文,则将该报文丢弃;其次判断该单播报文是不是发给当前节点的,即判断所述报文的可选地址是否为当前节点的地址,如果所述报文的当前节点地址不是当前节点的地址,则将该报文丢弃;只有当所述报文的可选地址是所述当前节点的地址,并且当前节点未回复该报文时,当前节点回复该报文。
本实施例提供的报文转发方法,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文,避免了报文转发过程中广播风暴和广播环路的发生,提高了报文转发的效率。具体地,若当前节点已经转发过所述报文,则将所述报文丢弃,可以保证同一个报文只被一个节点转发一次,避免了广播风暴的发生。若所述报文已经达到最大转发跳数,即转发跳数达到预设的阈值,将所述报文丢弃,可以避免形成广播环路。
需要说明的是,在本发明的一种优选实施例中,所述报文还包括:可选长度;所述可选长度用于表示可选节点地址的个数,广播报文的可选长度为0;单播报文的可选长度为单播报文的可选节点地址的个数,单播报文的可选长度不为0。
所述步骤102辨别所述报文的报文类型,具体可以通过以下方式实现:查询所述报文的可选长度;当所述报文的可选长度可选长度为0时,辨别出 所述报文为广播报文;当所述报文的可选长度可选长度为不为0时,辨别出所述报文为单播报文。
需要说明的是,在本发明的一种优选实施例中,所述判断所述报文是否已经达到最大转发跳数,具体可以通过以下方式实现:判断所述报文的转发跳数是否达到预设的转发阈值;当所述转发跳数达到预设的转发阈值时,判断所述报文达到最大转发跳数;当所述转发跳数未达到预设的转发阈值时,判断所述报文未达到最大转发跳数。
需要说明的是,当前节点每次转发报文时,都会记录转发的报文的报文序列号,形成已发送列表。在本发明的一种优选实施例中,所述报文还包括:报文序列号,所述报文序列号用于区分不同的报文;所述判断所述报文是否已经转发,具体包括以下子步骤:
子步骤一,查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号。
子步骤二,判断所述报文的报文序列号是否在所述当前节点的已发送列表中。
子步骤三,当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经转发。
子步骤四,当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未转发。
需要说明的是,在本发明的一种优选实施例中,所述报文还包括:直接节点个数、直接节点地址和/或转发节点地址。和/或包括以下几种情况:(1)所述报文包括:直接节点个数、直接节点地址和转发节点地址;(2)所述报文包括:直接节点个数和直接节点地址;(3)所述报文包括:转发节点地址。所述更新所述报文可以通过以下方式实现:
第一,判断所述报文的直接节点个数是否为0;
第二,当所述报文的直接节点个数为0时,将所述报文的转发节点地址更新为当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为1,将所述报文的直接节点地址更新为所述上一节点的地 址;
第三,当所述报文的直接节点个数不为0时,则判断当前节点的直接节点地址是否包含在所述报文的直接节点地址中;当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址。
需要说明的是,在本发明的另一种优选实施例中,所述报文还包括:直接节点地址;所述将更新后的报文转发给其他节点,具体可以包括:按照更新后的报文的直接节点地址将所述更新后的报文转发给更新后的报文的直接节点。
在本发明的一种优选实施例中,所述报文还包括:报文序列号;所述判断所述报文是否已经回复,具体包括以下子步骤:
子步骤一,查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号。
子步骤二,判断所述报文的报文序列号是否在所述当前节点的已发送列表中。
子步骤三,当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经回复。
子步骤四,当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未回复。
在本发明的一种优选实施例中,所述报文还包括:可选长度、直接节点个数、直接节点地址和/或转发节点地址;所述回复所述报文具体可以包括:
1)判断所述当前节点的直接节点地址是否包含在所述报文的直接节点地址中;
2)当所述当前节点的直接节点地址包含在所述报文的直接节点地址中 时,丢弃所述报文;
3)当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的可选长度更新为所述当前节点除所述上一节点外的直接节点个数,将所述报文的可选节点地址更新为所述当前节点除所述上一节点外的直接节点地址,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址;按照更新后的报文的直接节点地址进行回复。
本实施例结合表1所示的完整报文格式,对上述优选实施例进行说明,在本实施例中,完整报文格式如表1所示,完整报文格式包括:发送节点地址、报文序列号、转发跳数、可选长度、可选节点地址、直接节点个数、直接节点地址和转发节点地址。含义如下:
Node_Info:可以扩展,比如Node的标识(网关、上报点等)等其他节点信息;Payload:可选节点地址;Payload_Len:可选长度,即可选节点地址的个数,Payload_Len=0表示广播报文,即广播报文的可选长度为0;Payload_Len≠0表示单播报文;Dnode_Count:发送节点(转发节点)的直接节点个数;NID1:发送节点(转发节点)地址;NID2-NIDn:直接节点地址。需要说明的是,MESSAGE_HEADER表示报文的协议头,MESSAGE_HEADER的格式如表2所示,含义如下:Proto_magic:标示协议报文;Versoin:协议版本;Nid:发送节点地址;Seq:报文序列号;HTL:转发跳数;Type:协议类型,默认为1。
MESSAGE_HEADER | Node_Info | Payload_len | Payload | Dnode_Count | NID1 | NID2 | NIDn |
表1 完整报文格式
Proto_magic | Version | Nid | Seq | HTL | Type |
表2 MESSAGE_HEADER的格式
需要说明的是,在本发明的一种优选实施例中,所述发送节点地址、 可选节点地址、直接节点地址和转发节点地址均为对应节点的MAC地址。即本实施例中发送节点地址指发送节点的MAC地址,可选节点地址指可选节点的MAC地址,直接节点地址指直接节点的MAC地址,转发节点地址指转发节点的MAC地址。MAC(数据链路层)处于网络协议模型中的第二层,相比网络层在数据处理上更快速有效。即本实施例所采用的协议不需要配置IP就可以自动组网通信,实现零配置和高效率。数据最终打包成MAC层广播报文,广播报文支持最大1500 Bytes发送,所以最大占用带宽为1500*8=120k,在20M带宽中不到1%,可以降低报文转发过程中的带宽占用率。
下面结合图3所述的实施例,对上述步骤103广播报文的处理过程进行详细说明,参照图3,示出了本发明实施例广播报文处理过程的流程图,需要说明的是,本实施例当前节点为节点B,上一节点为节点A,接收到的广播报文为表3所示的报文一,为了更好地对报文进行说明,本实施例在表3、表4、表5的第一行标示出了报文格式,实际中接收到的报文只有第二行,本实施例中预设的转发阈值为9。
Proto_magic | Version | Nid | Seq | HTL | Type | Node_Info | Payload_len | Payload | Dnode_Count | NID1 |
Proto_magic | Version | MACA | MAC_1 | 0 | 1 | 0 | 0 | 0 | 0 | MACA |
表3 报文一示意表
本实施例具体可以包括以下步骤:
步骤201,判断报文一的最大跳数是否为9;是则执行步骤202丢弃报文一,否则执行步骤203判断报文的直接节点个数(Dnode_Count)是否为0。
步骤202,丢弃报文一。
步骤203,判断报文一的直接节点个数(Dnode_Count)是否为0。当报文一的直接节点个数为0时,执行步骤204;当报文一的直接节点个数不为0时,执行步骤205。
步骤204,转发报文二。具体对接收到的报文一进行更新,将所述报文 一的转发节点地址(NID1)更新为当前节点即节点B的地址MACB,将所述报文一的转发跳数(HTL)加一,将所述报文一的直接节点个数(Dnode_Count)更新为1,将所述报文一的直接节点地址(NID2-NIDn)更新为所述上一节点的地址MACA。上述更新后的报文作为报文二,按照报文二的直接节点进行转发。对报文一进行上述更新后形成的报文二如表4所示:
表4 报文二示意表
步骤205,判断节点B的直接节点是否包含在报文一的直接节点地址(NID2-NIDn)中;当节点B的直接节点包含在报文一的直接节点地址中时,执行步骤202,丢弃报文一;当节点B的直接节点未包含在报文一的直接节点地址中时,执行步骤206。
步骤206,转发报文三。假设节点B的直接节点为节点C和节点D,当然节点A也是节点B的直接节点。具体将所述报文一的转发节点地址(NID1)更新为所述当前节点即节点B的地址MACB,将所述报文一的转发跳数(HTL)加一,将所述报文一的直接节点个数(Dnode_Count)更新为所述当前节点的直接节点个数即节点B的直接节点个数3(节点A、节点C和节点D),并将所述报文一的直接节点地址(NID2-NIDn)更新为所述当前节点的直接节点的地址,即MACA、MACC、MACD。上述更新后的报文作为报文三,按照报文三的直接节点地址进行转发。对报文一进行上述更新后形成的报文三如表5所示:
表5 报文三示意表
需要说明的是,本发明提供的报文转发方法在处理广播报文上采用以下原则:
原则一:保证同一个报文最多只被某个节点转发一次,避免广播风暴的出现。
上述报文中设置有报文序列号Seq,每个节点转发报文时会记录自己的MAC地址,下一次收到该报文发现有自己的MAC地址就不会转发,从而保证同一个报文只被该节点转发一次,从而可以避免广播风暴的出现。
原则二,限制报文的最多转发次数,避免广播环路。
上述报文中设置有转发跳数HTL,并预设了转发阈值,用于限制该报文的最多转发的次数,每个节点转发该报文时HTL加1,增加到一定值后停止转发,即转发跳数达到预设的转发阈值后停止转发,从而避免广播环路的出现。
原则三,当接收者发现存在上一发送者不能见到的直接邻居时才转发该报文,即当前节点发现存在上一节点不能见到的直接节点时才转发该报文,该原则可以极大减少广播报文的数量,限制广播风暴的发生。
所以针对图1来讲,如果节点S和节点F可见,则需一次发送即可,如果是通过节点C可见,则需转发二次,如果S和F依次通过ABCDE跳转,则最多需6次。可见本发明对于广播报文的处理真正做到了最小的带宽占用,完全避免了广播风暴。
下面结合图4所述的实施例,对上述步骤104单播报文的处理过程进行详细说明,参照图4,示出了本发明实施例单播报文处理过程的流程图,需要说明的是,本实施例当前节点为节点B,上一节点为节点A,接收到的广播报文为表6所示的报文四,为了更好地对报文进行说明,本实施例在表6、表7的第一行标示出了报文格式,实际中接收到的报文只有第二行。
Proto_magic | Version | Nid | Seq | HTL | Type | Node_Info | Payload_len | Payload | Dnode_Count | NID1 |
Proto_magic | Version | MACA | MAC_1 | 0 | 1 | 1 | 1 | MACB | 1 | MACB |
表6 报文四示意表
本实施例具体可以包括以下步骤:
步骤301,判断报文四的报文序列号是否在节点B的已发送列表中;当报文四的报文序列号在节点B的已发送列表中时,执行步骤302,丢弃报文四;当报文四的报文序列号不在节点B的已发送列表中时,执行步骤303。
步骤302,丢弃报文四。
步骤303,判断节点B的直接节点地址是否包含在报文四的直接节点地址中;当节点B的直接节点地址包含在报文四的直接节点地址中时,执行步骤302,丢弃报文四;当节点B的直接节点地址未包含在报文四的直接节点地址中时,执行步骤304。
步骤304,转发报文五。假设节点B的直接节点为节点C和节点D,当然节点A也是节点B的直接节点。具体将报文四的转发节点地址(NID1)更新为节点B的地址MACB,将报文四的可选长度(Payload_Len)更新为节点B除节点A外的直接节点个数2,将所述报文的可选节点地址(Payload)更新为节点B除节点A外的直接节点地址(MACC、MACD),将所述报文四的直接节点个数更新为节点B的直接节点个数,并将所述报文四的直接节点地址(NID2-NIDn)更新为节点B的直接节点的地址,即MACA、MACC、MACD。上述更新后的报文作为报文五,按照报文五的直接节点地址进行回复。对报文四进行上述更新后形成的报文五如表7所示:
表7 报文五示意表
参照图5,示出了本发明实施例一种报文转发方法的总体流程图,本实施例具体可以包括以下步骤:
步骤401,接收报文。
步骤402,判断报文为广播报文还是单播报文;当所述报文为广播报文时,执行步骤403;当所述报文为单播报文时,执行步骤404。
步骤403,判断、更新报文并转发。
步骤404,丢弃或回复。
需要说明的是,本实施例仅从整理上对报文转发方法的流程进行说明,其中步骤403对应图2中的步骤103,步骤404对应图2中的步骤104,具体的处理步骤参见图2、图3、图4实施例的相关描述,本实施例在此不作赘述。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
参照图6,示出了本发明实施例一种报文转发装置的结构框图,本实施例具体可以包括:接收模块11、辨别模块12、广播报文处理模块13和单播报文处理模块14,其中:
接收模块11,用于接收上一节点发送的报文,所述报文包括:转发跳数和/或可选节点地址。需要说明的是,和/或包括以下三种情况:(1)报文包括转发跳数和可选节点地址;(2)报文包括转发跳数;(3)报文包括可选节点地址。辨别模块12,与所述接收模块相连,用于辨别所述报文的报文类型,所述报文类型包括:广播报文和单播报文。
在本发明的一种优选实施例中,所述报文还包括:可选长度;所述辨别模块包括:查询子模块,用于查询所述报文的可选长度;广播辨别子模块,与所述查询子模块相连,用于当所述查询子模块查询到所述报文的可 选长度为0时,辨别出所述报文为广播报文;单播辨别子模块,与所述查询子模块相连,用于当所述查询子模块查询到所述报文的可选长度不为0时,辨别出所述报文为单播报文。
广播报文处理模块13,与所述辨别模块相连,用于当所述辨别模块辨别出所述报文为广播报文时,判断所述报文是否已经转发或者达到最大转发跳数,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文;若所述报文未转发且未达到最大转发跳数,则更新所述报文,将更新后的报文转发给其他节点。
在本发明的一种优选实施例中,所述广播报文处理模块13判断所述报文是否已经达到最大转发跳数,具体可以通过以下方式来实现:判断所述报文的转发跳数是否达到预设的转发阈值;当所述转发跳数达到预设的转发阈值时,判断所述报文达到最大转发跳数;当所述转发跳数未达到预设的转发阈值时,判断所述报文未达到最大转发跳数。
在本发明的一种优选实施例中,所述报文还包括:报文序列号;所述广播报文处理模块13判断所述报文是否已经转发,具体可以通过以下方式来实现:查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号;判断所述报文的报文序列号是否在所述当前节点的已发送列表中;当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经转发;当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未转发。
在本发明的一种优选实施例中,所述报文还包括:直接节点个数、直接节点地址和/或转发节点地址;所述广播报文处理模块13更新所述报文,具体可以通过以下方式来实现:判断所述报文的直接节点个数是否为0;当所述报文的直接节点个数为0时,将所述报文的转发节点地址更新为当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为1,将所述报文的直接节点地址更新为所述上一节点的地址;当所述报文的直接节点个数不为0时,则判断当前节点的直接节点地址是否包含在所述报文的直接节点地址中;当所述当前节点的直接节点地址包含在所述报文 的直接节点地址中时,丢弃所述报文;当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址。
在本发明的一种优选实施例中,所述报文还包括:直接节点地址;所述广播报文处理模块13将更新后的报文转发给其他节点,具体可以按照更新后的报文的直接节点地址将所述更新后的报文转发给更新后的报文的直接节点。
单播报文处理模块14,与所述辨别模块相连,用于当所述辨别模块辨别出所述报文为单播报文时,判断所述报文的可选节点地址是否为当前节点的地址或者所述报文已经回复;若所述报文的可选节点地址不是所述当前节点的地址或者所述报文已经回复,则丢弃所述报文;若所述报文的可选节点地址是所述当前节点的地址且所述报文未回复,则回复所述报文。
在本发明的一种优选实施例中,所述报文还包括:报文序列号;所述单播报文处理模块14判断所述报文是否已经回复,具体可以通过以下方式来实现:查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号;判断所述报文的报文序列号是否在所述当前节点的已发送列表中;当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经回复;当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未回复。
在本发明的一种优选实施例中,所述报文还包括:可选长度、直接节点个数、直接节点地址和/或转发节点地址;所述单播报文处理模块14回复所述报文,具体可以通过以下方式来实现:判断所述当前节点的直接节点地址是否包含在所述报文的直接节点地址中;当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的可选长度更新为 所述当前节点除所述上一节点外的直接节点个数,将所述报文的可选节点地址更新为所述当前节点除所述上一节点外的直接节点地址,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址;按照更新后的报文的直接节点地址进行回复。
本实施例提供的报文转发装置,广播报文处理模块在所述报文已经转发或者达到最大转发跳数时,丢弃所述报文,避免了报文转发过程中广播风暴和广播环路的发生,提高了报文转发的效率。
对于上述报文转发的装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见图2所示方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本发明所提供的一种报文转发方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (9)
1.一种报文转发方法,其特征在于,包括:
接收上一节点发送的报文,所述报文包括:转发跳数和/或可选节点地址;
辨别所述报文的报文类型,所述报文类型包括:广播报文和单播报文;
当辨别出所述报文为广播报文时,判断所述报文是否已经转发或者达到最大转发跳数,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文;若所述报文未转发且未达到最大转发跳数,则更新所述报文,将更新后的报文转发给其他节点;
当辨别出所述报文为单播报文时,判断所述报文的可选节点地址是否为当前节点的地址或者所述报文已经回复;若所述报文的可选节点地址不是所述当前节点的地址或者所述报文已经回复,则丢弃所述报文;若所述报文的可选节点地址是所述当前节点的地址且所述报文未回复,则回复所述报文;
所述报文还包括:直接节点个数、直接节点地址和/或转发节点地址;所述更新所述报文包括:
判断所述报文的直接节点个数是否为0;
当所述报文的直接节点个数为0时,将所述报文的转发节点地址更新为当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为1,将所述报文的直接节点地址更新为所述上一节点的地址;
当所述报文的直接节点个数不为0时,则判断当前节点的直接节点地址是否包含在所述报文的直接节点地址中;当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址。
2.根据权利要求1所述的方法,其特征在于,所述报文还包括:可选长度;所述辨别所述报文的报文类型,包括:
查询所述报文的可选长度;
当所述报文的可选长度可选长度为0时,辨别出所述报文为广播报文;
当所述报文的可选长度可选长度为不为0时,辨别出所述报文为单播报文。
3.根据权利要求1所述的方法,其特征在于,所述判断所述报文是否已经达到最大转发跳数,包括:
判断所述报文的转发跳数是否达到预设的转发阈值;
当所述转发跳数达到预设的转发阈值时,判断所述报文达到最大转发跳数;
当所述转发跳数未达到预设的转发阈值时,判断所述报文未达到最大转发跳数。
4.根据权利要求1所述的方法,其特征在于,所述报文还包括:报文序列号;所述判断所述报文是否已经转发,包括:
查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号;
判断所述报文的报文序列号是否在所述当前节点的已发送列表中;
当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经转发;
当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未转发。
5.根据权利要求1所述的方法,其特征在于,所述报文还包括:直接节点地址;所述将更新后的报文转发给其他节点包括:
按照更新后的报文的直接节点地址将所述更新后的报文转发给更新后的报文的直接节点。
6.根据权利要求1所述的方法,其特征在于,所述报文还包括:报文序列号;所述判断所述报文是否已经回复,包括:
查询所述当前节点的已发送列表,所述已发送列表由当前节点在每次转发后记录所转发的报文的报文序列号;
判断所述报文的报文序列号是否在所述当前节点的已发送列表中;
当所述报文的报文序列号在所述当前节点的已发送列表中时,判断所述报文已经回复;
当所述报文的报文序列号不在所述当前节点的已发送列表中时,判断所述报文未回复。
7.根据权利要求1所述的方法,其特征在于,所述报文还包括:可选长度、直接节点个数、直接节点地址和/或转发节点地址;所述回复所述报文包括:
判断所述当前节点的直接节点地址是否包含在所述报文的直接节点地址中;
当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;
当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的可选长度更新为所述当前节点除所述上一节点外的直接节点个数,将所述报文的可选节点地址更新为所述当前节点除所述上一节点外的直接节点地址,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址;按照更新后的报文的直接节点地址进行回复。
8.一种报文转发装置,其特征在于,包括:
接收模块,用于接收上一节点发送的报文,所述报文包括:转发跳数和/或可选节点地址;
辨别模块,与所述接收模块相连,用于辨别所述报文的报文类型,所述报文类型包括:广播报文和单播报文;
广播报文处理模块,与所述辨别模块相连,用于当所述辨别模块辨别出所述报文为广播报文时,判断所述报文是否已经转发或者达到最大转发跳数,若所述报文已经转发或者达到最大转发跳数,则丢弃所述报文;若所述报文未转发且未达到最大转发跳数,则更新所述报文,将更新后的报文转发给其他节点;
单播报文处理模块,与所述辨别模块相连,用于当所述辨别模块辨别出所述报文为单播报文时,判断所述报文的可选节点地址是否为当前节点的地址或者所述报文已经回复;若所述报文的可选节点地址不是所述当前节点的地址或者所述报文已经回复,则丢弃所述报文;若所述报文的可选节点地址是所述当前节点的地址且所述报文未回复,则回复所述报文;
所述报文还包括:直接节点个数、直接节点地址和/或转发节点地址;所述广播报文处理模块更新所述报文,具体可以通过以下方式来实现:判断所述报文的直接节点个数是否为0;当所述报文的直接节点个数为0时,将所述报文的转发节点地址更新为当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为1,将所述报文的直接节点地址更新为所述上一节点的地址;当所述报文的直接节点个数不为0时,则判断当前节点的直接节点地址是否包含在所述报文的直接节点地址中;当所述当前节点的直接节点地址包含在所述报文的直接节点地址中时,丢弃所述报文;当所述当前节点的直接节点地址未包含在所述报文的直接节点地址中时,将所述报文的转发节点地址更新为所述当前节点的地址,将所述报文的转发跳数加一,将所述报文的直接节点个数更新为所述当前节点的直接节点个数,并将所述报文的直接节点地址更新为所述当前节点的直接节点的地址。
9.根据权利要求8所述的装置,其特征在于,所述报文还包括:可选长度;所述辨别模块包括:
查询子模块,用于查询所述报文的可选长度;
广播辨别子模块,与所述查询子模块相连,用于当所述查询子模块查询到所述报文的可选长度为0时,辨别出所述报文为广播报文;
单播辨别子模块,与所述查询子模块相连,用于当所述查询子模块查询到所述报文的可选长度为不为0时,辨别出所述报文为单播报文。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410602687.6A CN104378290B (zh) | 2014-10-31 | 2014-10-31 | 一种报文转发方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410602687.6A CN104378290B (zh) | 2014-10-31 | 2014-10-31 | 一种报文转发方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104378290A CN104378290A (zh) | 2015-02-25 |
CN104378290B true CN104378290B (zh) | 2017-07-11 |
Family
ID=52556960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410602687.6A Expired - Fee Related CN104378290B (zh) | 2014-10-31 | 2014-10-31 | 一种报文转发方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104378290B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104869115A (zh) * | 2015-05-07 | 2015-08-26 | 北京汉柏科技有限公司 | 一种防止dhcp风暴的方法和系统 |
CN105491508A (zh) * | 2015-06-30 | 2016-04-13 | 汤羽 | 基于蓝牙技术的手机自组通信网络CellNet的组网和路由算法 |
TWI738652B (zh) * | 2016-05-16 | 2021-09-11 | 智邦科技股份有限公司 | 控制方法及網路架構 |
CN108933735B (zh) | 2017-05-27 | 2020-12-25 | 华为技术有限公司 | 一种报文发送的方法、装置及设备 |
CN110649954B (zh) * | 2018-06-27 | 2021-12-24 | 海能达通信股份有限公司 | 同频多级中转的通信方法、装置及设备 |
CN108924065A (zh) * | 2018-07-12 | 2018-11-30 | 中国联合网络通信集团有限公司 | 交换机、二层网络报文转发方法及网络系统 |
CN112673602B (zh) * | 2018-09-14 | 2023-02-03 | 华为技术有限公司 | 一种避免广播风暴的方法和装置 |
CN111064593A (zh) * | 2018-10-17 | 2020-04-24 | 中车株洲电力机车研究所有限公司 | 网络拓扑冗余通信系统和网络拓扑冗余通信方法 |
CN114301815B (zh) * | 2021-12-30 | 2024-03-15 | 山石网科通信技术股份有限公司 | 广播风暴的处理方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1607783A (zh) * | 2003-10-13 | 2005-04-20 | 三星电子株式会社 | 在移动ac-hoc网络中处理广播数据 |
CN1996804A (zh) * | 2006-01-04 | 2007-07-11 | 株式会社Ntt都科摩 | 无线移动网络中的广播方法和装置 |
CN101242564A (zh) * | 2007-02-05 | 2008-08-13 | 田蕊 | 移动无线自组网消息广播和接收的方法及所用终端节点 |
CN101989995A (zh) * | 2009-08-07 | 2011-03-23 | 中兴通讯股份有限公司 | 一种分布式网络的拓扑信息收集方法 |
-
2014
- 2014-10-31 CN CN201410602687.6A patent/CN104378290B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1607783A (zh) * | 2003-10-13 | 2005-04-20 | 三星电子株式会社 | 在移动ac-hoc网络中处理广播数据 |
CN1996804A (zh) * | 2006-01-04 | 2007-07-11 | 株式会社Ntt都科摩 | 无线移动网络中的广播方法和装置 |
CN101242564A (zh) * | 2007-02-05 | 2008-08-13 | 田蕊 | 移动无线自组网消息广播和接收的方法及所用终端节点 |
CN101989995A (zh) * | 2009-08-07 | 2011-03-23 | 中兴通讯股份有限公司 | 一种分布式网络的拓扑信息收集方法 |
Non-Patent Citations (2)
Title |
---|
An Adjusted Counter-Based Broadcast Scheme for Mobile Ad Hoc Networks;A. Mohammed等;《Tenth International Conference on Computer Modeling and Simulation, 2008. UKSIM 2008》;20080415;全文 * |
Flooding in wireless ad hoc networks;H Lim等;《Computer Communications》;20010215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104378290A (zh) | 2015-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104378290B (zh) | 一种报文转发方法和装置 | |
Gulati et al. | Performance comparison of mobile Ad Hoc network routing protocols | |
CN105337857A (zh) | 一种基于软件定义网络的多路径传输方法 | |
CN106922008B (zh) | 一种基于RPL路由协议的IPv6无线传感网多路径传输方法 | |
US20110013509A1 (en) | Network node and method for establishing network path and sending data | |
CN105099902B (zh) | 一种用于量子Mesh网络的路由方法 | |
CN111193756B (zh) | 一种vxlan隧道负载均衡方法及相关设备 | |
CN104883304A (zh) | 用于部分纠缠量子对桥接通信网络的路由方法 | |
Brahmbhatt et al. | SSLSM: Signal strength based link stability estimation in MANETs | |
Guo et al. | Resource aware routing protocol in heterogeneous wireless machine-to-machine networks | |
CN104053208B (zh) | 无线自组网中基于信道分配的路由方法、装置 | |
CN106533503A (zh) | 一种电力线网络通信的方法及装置 | |
CN107613470A (zh) | 一种无线Mesh网络中组播业务的实现方法及系统 | |
Bansal et al. | Improved routing protocol for MANET | |
CN104348736A (zh) | 组播负载场景下选路的方法和路由器 | |
Khan et al. | M-AODV: Modified Ad Hoc On-demand distance vector routing scheme | |
WO2014087138A1 (en) | Wireless node | |
Kumar et al. | An energy and traffic aware routing approach as an extension of aodv | |
Jeong et al. | A network coding-aware routing mechanism for time-sensitive data delivery in multi-hop wireless networks | |
Shenbagapriya et al. | An efficient proactive source routing protocol for controlling the overhead in mobile ad-hoc Networks | |
Ramrekha et al. | Standardisation advancements in the area of routing for mobile ad-hoc networks | |
CN103200106A (zh) | 一种报文转发方法和设备 | |
CN104468356A (zh) | 一种多目的节点的消息转发方法 | |
CN107947992B (zh) | 一种快速的大数据通信方法 | |
CN106685836B (zh) | Hwmp按需路由广播包抑制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170711 Termination date: 20191031 |