3.7.3.5路由发现 路由发现是在网络中的设备互相合作条件下选择,并建立路由的一个流程,该流程通常与特定的源地址和目的地址相对应。多点传送路由是执行关于一个特殊的源设备和多点传送组的路由。多对一路由发现是一个源设备与所有的ZigBee路由器和协调器在radius范围内与自身建立路由的过程。根据3.7.3.5小节的描述,目的地址可以是16位的广播地址,或是一个设备的16位网络地址,或作为多点传送组ID的16位多点传送地址。如果一个路由请求命令的目的地址是一个特殊设备的路由地址,它的路由请求选项域没有设置多点传送域,则请求为一个单播路由请求。一个路由请求命令,它的路由请求选项域有多点传送位,则设置为多点传送路由请求。多点传送路由请求的目的地址域应设置为多点传送组的ID。一个目的地址域为广播地址(见表)的路由请求命令的载荷应为多对一路由请求。多对一路由请求的路由请求选项的多点传送位应置为0. 3.7.3.5.1路由发现的初始化 在网络层收到其上层发送来的NLDE-ROUTEDISCOVERY.request原语,其中DstAddrMode参数值为0x00,在路由表中没有与目的地址DstAddr相对应的入口,或在MAC层接收到的帧控制域中的路由搜索子域值为0x01,或在网络层帧报头中的目的地址不是当前设备地址或者为广播地址,或没有与网络层帧报头中的目的地址相对应的路由选择表入口。在其他情况下,如果设备没有路由选择能力,并且NIB属性中nwkUseTreeRouting的值为真,则有问题的数据帧将按照分级的路由方法,沿树搜索路由。如果设备没有路由能力,并且NIB属性中nwkUseTreeRouting值为假,那么该帧将被丢弃,网络层按照3.7.3.7小节中描述的产生NLME-ROUTEERROR.indication原语或路由错误命令帧。 多点传送的路由发现过程可以通过网络层初始化,或者通过从高层接收到NLME-ROUTEDISCOVERY.request原语,其中DesAddrMode参数值为0x01,或者通过下面3.7.5.2.2小节所描述的过程完成。 如果设备具有路由选择能力,则建立一个路由选择表入口和路由搜索表入口,并且该入口的状态设置为DISCOVERY-UNDERWAY。如果已经存在一个与目的地址相对应的路由选择表入口,并且状态值为ACTIVE或VALIDATION_UNDERWAY,那么这个如果可以被使用,并且入口的状态域保存为当前值。如果存在路由表入口,但状态值不是ACTIVE,那么入口可以被使用,并且入口的状态值设置为DISCOVERY_UNDERWAY。如果不存在入口,那么设备将建立一个相对应的路由发现表入口。 每一个发送路由请求命令帧的设备维护一个生成路由请求标识符的计数器。当生成一个新的路由请求命令帧时,该计数器加1,并且将该值保存在设备路由搜索表的路由请求标识符中。路由选择表和路由搜索表中的其他域将根据3.7.3.2小节进行设置。 网络层了缓存所接收到的待处理路由搜索帧,或者,如果为单播帧并且NIB树型中的nwkUseTreeRouting值为真,将网络层帧报头中帧控制域的路由选择子域设置为0,然后沿树向前发送数据帧。 一旦设备创建了路由搜索表和路由选择表入口,则将按照图3.10所示的节后创建哟个载有有效载荷的路由请求命令帧,帧中的各子域的设置如下所述: (1) 命令帧标识符域设置为路由请求帧,详见表3.39 (2) 路由请求标识符设置为路由选择表入口 (3) 多点传送标志位和目的地址域应该设置为与要被发现的目的地址向一致 (4) 路由成本域设为0 在构造完成所广播的路由搜索命令帧后,网络层使用MCPS-DATA.request原语将其传送到MAC层。 在路由搜索的开始阶段,广播一个路由命令请求帧时,网络层在开始广播后,将重播nwkclnitialRREQRetries次,因此,最大的广播次数为nwkclnitialRREQRetries+1次,每次重播的时间间隔为nwkcRREQRetryInterval毫秒。 ZigBee路由器或协调器的网络层管理实体在接收到上层发送的DstAddrMode 参数值为0x00的NLME-ROUTE-DISCOVERY.request原语后,初始化多对一路由发现。在这种情况下,设备不是必须建立路由表入口。如果路由请求命令帧的目的地址参数为0xfff9,那么就如该小节描述的建立并广播。 设备不是必须建立发现表或路由表入口。一个路由请求命令帧可以如3.7.3.5.1小节所示建立并广播。NLME-ROUTE-DISCOVERY.request原语的参数MemoryConstrained为真,那么路由请求命令载荷的目的地址域置为0xfff8.否则,置为0xfff9. 3.7.3.5.2接收到路由请求命令帧 在接收到路由请求命令帧后,如果设备是一个终端设备,那么丢弃该帧。否则,判断是否有路由能力。 如果设备没有路由能力,并且是多点传送路由请求或多对一路由请求,那么路由请求将被丢弃并且路由请求处理被终止。 如果设备没有路由选择能力,并且路由请求时单播路由请求,则将判断所接收的帧是否来自于有效的路由。所谓有效路由是指所接收的帧来自于设备的子设备,并且全设备为孩子设备的后裔设备;或者来自于设备的父设备,并且,源设备不是设备的子设备。如果路由请求命令帧不是来自于有效路由,则将丢弃该帧。否则,将检查设备是否为预期的目的设备。同样,通过路由请求命令帧有效载荷中的目的地址与它的每一个终端子设备地址比较,检查命令帧的目的地址时都为设备的一个终端子设备。如果路由请求命令帧的目的地址为设备本身或者为设备的一个子设备,则它将用一个路由请求应答命令帧进行应答。当设备用一个路由请求应答命令帧应答路由请求时,将构造一个类型域为0x01的帧。路由请求应答的源地址应设置为创建请求应答设备的16位网络地址,在考虑到路由请求的发起者为最终目的地址的情况下,将帧的目的地址域设置为所计算出来的下一跳的地址。计算下一跳设备到挡墙设备的链路成本,其计算方法详见3.7.3.1小节,并将该成本附着在路由应答帧的路由成本域中。通过发送MCPS-DATA.request原语,将路由应答命令帧单播到下一跳设备。 如果设备不是路由请求命令帧的目的地址,则计算从前一个设备到本设备传送该帧的链路成本,其方法如3.7.3.1节中所述。其成本数值将加到路由请求命令帧的路由成本值中,然后,使用MCPS-DATA.request服务原语,向目的地址单播该路由请求命令帧。同数据帧一样,采用有效载荷中的目的地址域标识来判断设备地址的方法,决定单播传输的下一跳地址。 如果设备没有路由能力,接收的请求是一个单播的路由请求,设备将路由请求命令帧载荷的目的地址与自身的地址比较来判断该设备是否时命令帧的目的地址。它还将路由请求命令帧载荷的目的地址与它的终端子设备地址进行比较。判断命令帧的目的地址是否是自己的终端子设备。如果该设备或设备的终端子节点是路由请求命令帧的目的节点,设备将决定在路由发现表(见表3.50)入口中是否存在相同的路由请求标识符和源地址。如果没有相对应的入口存在,将建立一个入口。 如果设备没有路由能力,并且接收到的路由请求帧的路由请求命令选项域标示为多点传送路由请求,设备将判断在nwkGroupIDTable中是否已经存在其GroupID域与目的地址相配的入口。如果相配的入口存在,设备将判断是否存在一个有相同路由请求标识符和源地址的路由发现表(见表3.50)入口。 对于多对一路由请求,和常规的路由请求,如果参数nwkSymLink的值为TRUE,接收到一个路由请求命令帧后,设备将在邻居表中寻找对应于传输设备的入口。如果没有对应的入口或该入口的输出成本域的值为0,则丢弃该帧,路由请求过程终止。邻居设备的最大输出和输入成本时是用来计算路径成本而不是输入成本。这包括增加重发前一个路由请求帧的路径成本。 当建立了路由发现表入口,则其值设置为与路由请求命令帧相对应的值。唯一例外的是前向成本域,该域是利用前面的发送者的命令帧计算的链路成本,详见3.7.3.1小节。将它加到路由请求命令帧的路径成本中。上述计算的结果保存在新建立的路由发现表入口的前向成本域。 如果nwkSymLink属性值为真,设备将建立一个路由表入口,其目的地址域为路由请求命令帧的源地址,下一跳设置为传输命令帧的前一个设备的地址。状态域置为ACTIVE。然后设备向路由请求命令帧的源地址发送路由应答命令帧。如果设备对于源地址和路由请求标识符对已经有一个路由发现表入口,设备判断在路由请求命令帧中的路径成本是否小于存储在路由发现表入口中的前向成本。该比较通过计算发送该帧的前向设备的链路成本,如3.7.3.1小节所述,加上路由请求命令帧的路径成本。如果该值比路由发现表入口的值大,将丢弃该帧,没有后续的处理。否则,路由发现表中的前向成本和发送地址域将被更新为路由请求命令帧的新的成本和前向设备地址。 如果属性nwkSymLink的值为TRUE,接收到的路由请求命令帧是一个单播路由请求,设备仍将建立一个路由表入口,其目的地址设置为路由请求命令帧的源地址,下一跳域设置为传输命令帧的前一个设备的地址。状态域设置为ACTIVE。然后设备将响应一个路由回复命令帧。在任何一种情况下,如果设备是代表它的一个终端子设备响应,那么路由回复命令帧载荷的响应地址应与终端子设备的地址一致,而不是响应设备的地址。 当一个具有路由选择能力的设备不是接收到的路由请求命令帧的目的设备时,则判断在路由选择表(见表3.50)中是否存在一个有相同的路由请求标识符和源地址域入口。如果入口不存在,则创建一个入口。路由请求定时器终止时间设置为nwkcRouteDiscoveryTime毫秒。如果相对应与目的地址的路由地址的路由表入口存在,并且其状态值不为ACTIVE,那么将其设置为DISCOVERY_UNDERWAY。如果不存在这样的入口,并且该帧为单播路由请求,将建立一个入口,其状态值为DISCOVERY_UNDERWAY。如果nwkSymLink属性为TRUE或者是多对一路由请求帧,则设备也将建立一个路由表入口,并且它的目的地址设置为路由请求命令帧的源地址,下一跳的地址设置为上一个传送该命令帧设备的网络地址。如果是多对一的路由请求帧,则多对一域和路由表入口应设置为真,如果目的地址域是0xfff8则MemoryConstrained标志位设为真否则设为假;如果下一跳域改变了,路由记录要求域则设为真。状态域设置为ACTIVE。当路由请求定时器终止时,设备将从路由选择表中删除该路由请求入口。在这种情况下,如果它的状态域的值为DISCOVERY_UNDERWAY并且为目的地址在路由发现表中没有其他的入口,则与路由表入口对应的目的路由地址也要被删除。如果在路由选择表中存在一个入口,则路由请求命令帧中的路由成本将与路由选择表入口的前向成本相比较,比较是通过计算先前设备的链路成本,详见3.7.3.1,加上路由请求帧中的路由成本。如果路由成本更大,则丢弃该路由强求命令帧,不对其进行处理;否则,路由选择表中的前向成本和发送者地址域将更新为路由请求命令帧中的新的成本和上一个发送该帧的设备地址。此外,路由请求命令帧中的路由成本域的值为新的计算结果。如果nwkSymLink属性为TRUE,则设备也将更新它的路由表入口,目的地址将更新为路由请求命令帧的源地址,下一跳的地址将更新为上一个传送该命令帧的设备网络地址。状态域设置为ACTIVE,然后,设备将使用MCPS_DATA.request原语,重新广播该路由请求命令帧。 当重新广播路由请求命令帧时,网络层将使用下面的公式,用一个随机不稳定值计算出重传的时延。 2·R[nwkcMinRREQJitter,nwkcMaxRREqJitter] 其中R[a,b]是在[a,b]参数区间的随机函数,不稳定值的单位为毫秒。设备可调整这个不稳定值,以使接收到的路由成本大的路由请求命令帧比路由成本小的延时更大。网络层将在初始中继后重试广播nwkcRREQRetries次,以至于每次中继为最大的nwkcRREQRetries+1次。当相当的源和路由请求标识符的帧比等候重传帧所花费路由成本小时,设备可能丢弃等待重传的路由选择命令帧。 设备根据有效载荷中的目的地址,将相对应的路由表入口的状态域设为DISCOVERY-UNDERWAY。如果不存在这样的入口,则重新建立一个入口。 当对一个路由请求帧进行应答时,具有与路由请求的源地址、路由请求标识符相对应的路由选择表的入口的设备将构建一个帧类型域为0x01的命令帧。网络头的源地址域设置为当前设备的16位网络地址,目的地址域设置为对应路由选择表入口中的发送者地址域。构造路由应答的设备将按照下述方法在组成载荷域。网络命令标识符设置为路由应答,路由请求标识符域的值设置为与路由请求命令帧的路由请求标识符域中的值相同,起始者域设置为路由请求命令帧中的网络头中的源地址。利用路由请求命令帧中的网络帧报头中的源地址与它相对应的路由选择表入口的起始者地址,并根据3.7.3.1小节中描述的来计算链路成本。该链路成本设置在路由成本域中,然后,利用MCPS-DATA.request原语,将路由请求应答帧单播到目的地址,从路由选择表中所得到的发送地址作为下一跳地址。
|