发送、接收以及转发报文的方法和装置与流程

文档序号:18134528发布日期:2019-07-10 10:30阅读:204来源:国知局
发送、接收以及转发报文的方法和装置与流程

本申请涉及通信领域,尤其涉及发送、接收以及转发报文的方法和装置。



背景技术:

网络设备对报文流进行转发时,网络设备可以对报文流进行负载分担。报文流可以经由多个链路到达目的地。例如,路由器可以根据ip报文中的五元组,对报文进行负载分担。负载分担的目的是实现对网络资源的充分利用。上述技术方案有可能造成网络拥塞。



技术实现要素:

本申请实施例提供了发送、接收以及转发报文的方法和装置,有助于降低网络拥塞。

第一方面,提供了一种发送报文的方法。所述方法包括如下步骤:

源设备生成第一报文以及第二报文。所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

所述源设备向转发设备发送所述第一报文以及所述第二报文,所述第一报文中的第一字段的值被所述转发设备用于确定转发所述第一报文的端口,所述转发设备用于转发所述第一报文的端口为第一端口,所述第二报文中的第一字段的值被所述转发设备用于确定转发所述第二报文的端口,所述转发设备用于转发所述第二报文的端口为第二端口,所述第一报文通过第一路径到达目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

所述源设备根据与所述第一长度对应的所述第一报文中的第一字段生成多个报文,所述多个报文中的每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

所述源设备向所述转发设备发送所述多个报文,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

上述技术方案中,所述第一路径上除了所述目的节点的多个节点的发送缓存队列的长度的总和等于第一长度。所述第二路径上除了所述目的节点的多个节点的发送缓存队列的长度的总和等于第二长度。所述第一长度小于所述第二长度,因此可以认为所述第一路径的拥塞程度小于所述第二路径的拥塞程度。所述多个报文中每个报文中的第一字段的值等于所述第一报文中的第一字段的值。可以使得所述转发设备沿着所述第一路径向所述目的节点发送所述多个报文。上述技术方案实现了经由拥塞程度较低的路径发送多个报文,有助于降低网络的的拥塞程度。

可选地,上述技术方案中,所述源设备根据与所述第一报文对应的所述第一长度生成多个报文,包括:所述源设备接收所述目的设备发送的所述第一长度和所述第二长度;所述源设备确定所述第一长度和所述第二长度中的较小的值对应所述第一报文中的第一字段;所述源设备生成所述多个报文,每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

上述技术方案中,所述源设备可以根据所述目的设备反馈的信息,从至少两个路径中选择发送缓存队列的长度的总和较小的路径。

可选地,上述技术方案中,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点在所述第一报文中添加该节点的发送缓存队列的长度,所述第一长度是所述目的节点基于接收到的所述第一报文中携带的所述第一路径上除了所述目的节点的多个节点中的每个节点添加的该节点的发送缓存队列的长度获得的。

上述技术方案中,路径的中间节点不需要执行计算。例如,不需要执行对接收到的报文中包含已包含的发送缓存队列的长度进行增量更新。有助于降低路径的中间节点的开销以及复杂度。

可选地,上述技术方案中,所述第一报文还包含第二字段,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点使用该节点的发送缓存队列的长度对所述第二字段的值进行增量更新,所述第一长度等于所述目的节点从接收到的所述第一报文中携带的增量更新后的所述第二字段的值。

上述技术方案中,路径的中间节点对第二字段的值进行增量更新。因此,有助于减少发送缓存队列的长度信息对第一报文的占用。进而,有助于减小第一报文的长度。

第二方面,提供了一种接收报文的方法。所述方法包括如下步骤:

目的设备经由第一路径接收源设备发送的第一报文,经由第二路径接收所述源设备发送的第二报文,所述第一报文中携带第一字段以及第二字段,所述第一报文中的第二字段的值等于第一长度,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第一长度,当所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的节点时,所述第一报文中的第一字段的值被所述第一路径上除所述目的节点的节点用于确定转发所述第一报文的端口。

所述第二报文中携带第一字段以及第二字段,所述第二报文中的第二字段的值等于第二长度,所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第二长度。

所述第一报文中携带的第一字段的值不等于所述第二报文中携带的第一字段的值,当所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的节点时,所述第二报文中的第一字段的值被所述第二路径上除所述目的节点的节点用于确定转发所述第二报文的端口,所述第一长度小于所述第二长度。

所述目的设备向源设备发送所述第一长度。

所述目的设备经由所述第一路径接收所述源设备发送的多个报文,所述多个报文中的每个报文中携带的第一字段的值等于所述第一报文中携带的第一字段的值,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

可选地,上述技术方案中,还包括:所述目的设备向源设备发送所述第二长度。

第三方面,提供了一种转发报文的方法。所述方法包括:

转发设备接收来自源设备的第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

所述转发设备根据所述第一报文中的第一字段确定第一端口。

所述转发设备经由所述第一端口向目的设备转发所述第一报文,所述第一报文通过第一路径到达所述目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

所述转发设备根据所述第二报文中的第一字段确定第二端口。

所述转发设备经由所述第二端口向所述目的设备转发所述第二报文,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

所述转发设备接收来自所述目的设备的所述第一长度。

所述转发设备向所述源设备转发所述第一长度。

所述转发设备接收来自所述源设备的多个报文,每个报文中携带的第一字段的值等于所述第一报文中的第一字段的值。

所述转发设备经由所述第一端口转发所述多个报文,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

可选地,上述技术方案中,还包括:所述转发设备接收来自所述目的设备的所述第二长度;所述转发设备向所述源设备转发所述第二长度。

可选地,上述技术方案中,所述转发设备接收来自所述源设备的第一报文以后,以及所述转发设备经由所述第一端口向所述目的设备转发所述第一报文之前,所述方法还包括:所述转发设备将所述转发设备中对应所述第一端口的发送缓存队列的长度添加到所述第一报文中;

所述转发设备接收来自所述源设备的第二报文以后,以及所述转发设备经由所述第二端口向所述目的设备转发所述第二报文之前,所述方法还包括:所述转发设备将所述转发设备中对应所述第二端口的发送缓存队列的长度添加到所述第二报文中。

第四方面,提供了一种源设备。源设备包括第一生成单元、第一发送单元、第二生成单元以及第二发送单元。

第一生成单元,用于生成第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

第一发送单元,用于向转发设备发送所述第一报文以及所述第二报文。

所述第一报文中的第一字段的值被所述转发设备用于确定转发所述第一报文的端口,所述转发设备用于转发所述第一报文的端口为第一端口,所述第二报文中的第一字段的值被所述转发设备用于确定转发所述第二报文的端口,所述转发设备用于转发所述第二报文的端口为第二端口,所述第一报文通过第一路径到达目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

第二生成单元,用于根据与所述第一长度对应的所述第一报文中的第一字段生成多个报文。

所述多个报文中的每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

第二发送单元,用于向所述转发设备发送所述多个报文。

所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

可选地,上述技术方案中,第二生成单元用于:

接收所述目的设备发送的所述第一长度和所述第二长度;

确定所述第一长度和所述第二长度中的较小的值对应所述第一报文中的第一字段;

生成所述多个报文,每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

可选地,上述技术方案中,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点在所述第一报文中添加该节点的发送缓存队列的长度,所述第一长度是所述目的节点基于接收到的所述第一报文中携带的所述第一路径上除了所述目的节点的多个节点中的每个节点添加的该节点的发送缓存队列的长度获得的。

可选地,上述技术方案中,所述第一报文还包含第二字段,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点使用该节点的发送缓存队列的长度对所述第二字段的值进行增量更新,所述第一长度等于所述目的节点从接收到的所述第一报文中携带的增量更新后的所述第二字段的值。

第五方面,提供了一种目的设备。目的设备包括第一接收单元、发送单元以及第二接收单元。

第一接收单元,用于经由第一路径接收源设备发送的第一报文,经由第二路径接收所述源设备发送的第二报文。

所述第一报文中携带第一字段以及第二字段,所述第一报文中的第二字段的值等于第一长度,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第一长度,当所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的节点时,所述第一报文中的第一字段的值被所述第一路径上除所述目的节点的节点用于确定转发所述第一报文的端口。

所述第二报文中携带第一字段以及第二字段,所述第二报文中的第二字段的值等于第二长度,所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第二长度。

所述第一报文中携带的第一字段的值不等于所述第二报文中携带的第一字段的值,当所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的节点时,所述第二报文中的第一字段的值被所述第二路径上除所述目的节点的节点用于确定转发所述第二报文的端口,所述第一长度小于所述第二长度。

发送单元,用于向源设备发送所述第一长度。

第二接收单元,用于经由所述第一路径接收所述源设备发送的多个报文。

所述多个报文中的每个报文中携带的第一字段的值等于所述第一报文中携带的第一字段的值,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

可选地,上述技术方案中,发送单元还用于向源设备发送所述第二长度。

第六方面,提供了一种转发设备。转发设备包括第一接收单元、第一确定单元、第一转发单元、第二确定单元、第二转发单元、第二接收单元、第三转发单元、第三接收单元以及第四转发单元。

第一接收单元,用于接收来自源设备的第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

第一确定单元,用于根据所述第一报文中的第一字段确定第一端口。

第一转发单元,用于经由所述第一端口向目的设备转发所述第一报文。

所述第一报文通过第一路径到达所述目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

第二确定单元,用于根据所述第二报文中的第一字段确定第二端口。

第二转发单元,用于经由所述第二端口向所述目的设备转发所述第二报文。

所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

第二接收单元,用于接收来自所述目的设备的所述第一长度。

第三转发单元,用于向所述源设备转发所述第一长度。

第三接收单元,用于接收来自所述源设备的多个报文。

每个报文中携带的第一字段的值等于所述第一报文中的第一字段的值。

第四转发单元,用于经由所述第一端口转发所述多个报文。

所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

可选地,上述技术方案中,第二接收单元还用于接收来自所述目的设备的所述第二长度。第三转发单元还用于向所述源设备转发所述第二长度。

可选地,上述技术方案中,转发设备还包括添加单元,用于在接收来自所述源设备的第一报文以后,以及经由所述第一端口向所述目的设备转发所述第一报文之前,将所述转发设备中对应所述第一端口的发送缓存队列的长度添加到所述第一报文中。

所述添加单元,还用于在接收来自所述源设备的第二报文以后,以及经由所述第二端口向所述目的设备转发所述第二报文之前,将所述转发设备中对应所述第二端口的发送缓存队列的长度添加到所述第二报文中。

第七方面,提供了一种源设备。所述源设备可以执行第一方面提供的方法。

所述源设备包括处理器以及与所述处理器耦合的收发器。

所述处理器用于生成第一报文以及第二报文,所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

所述收发器用于向转发设备发送所述第一报文以及所述第二报文,所述第一报文中的第一字段的值被所述转发设备用于确定转发所述第一报文的端口,所述转发设备用于转发所述第一报文的端口为第一端口,所述第二报文中的第一字段的值被所述转发设备用于确定转发所述第二报文的端口,所述转发设备用于转发所述第二报文的端口为第二端口,所述第一报文通过第一路径到达目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

所述处理器还用于根据与所述第一长度对应的所述第一报文中的第一字段生成多个报文,所述多个报文中的每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

所述收发器还用于向所述转发设备发送所述多个报文,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

在一种可能的设计中,所述收发器还用于接收所述目的设备发送的所述第一长度和所述第二长度。

所述处理器用于确定所述第一长度和所述第二长度中的较小的值对应所述第一报文中的第一字段;并基于所述第一报文中的第一字段生成所述多个报文。

在一种可能的设计中,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点在所述第一报文中添加该节点的发送缓存队列的长度,所述第一长度是所述目的节点基于接收到的所述第一报文中携带的所述第一路径上除了所述目的节点的多个节点中的每个节点添加的该节点的发送缓存队列的长度获得的。

在一种可能的设计中,所述第一报文还包含第二字段,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点使用该节点的发送缓存队列的长度对所述第二字段的值进行增量更新,所述第一长度等于所述目的节点从接收到的所述第一报文中携带的增量更新后的所述第二字段的值。

第八方面,提供一种目的设备。所述目的设备可以用于执行第二方面提供的方法。

所述目的设备包括收发器以及与所述收发器耦合的处理器。

所述收发器用于经由第一路径接收源设备发送的第一报文,经由第二路径接收所述源设备发送的第二报文,所述第一报文中携带第一字段以及第二字段,所述第一报文中的第二字段的值等于第一长度,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第一长度,当所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的节点时,所述第一报文中的第一字段的值被所述第一路径上除所述目的节点的节点用于确定转发所述第一报文的端口。

所述第二报文中携带第一字段以及第二字段,所述第二报文中的第二字段的值等于第二长度,所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第二长度。

所述第一报文中携带的第一字段的值不等于所述第二报文中携带的第一字段的值,当所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的节点时,所述第二报文中的第一字段的值被所述第二路径上除所述目的节点的节点用于确定转发所述第二报文的端口,所述第一长度小于所述第二长度。

所述处理器用于确定所述第一长度。

所述收发器还用于向所述源设备发送所述第一长度。

所述收发器还用于经由所述第一路径接收所述源设备发送的多个报文,所述多个报文中的每个报文中携带的第一字段的值等于所述第一报文中携带的第一字段的值,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

在一种可能的设计中,所述处理器还用于确定所述第二长度。

所述收发器还用于向所述源设备发送所述第二长度。

第九方面,提供了一种转发设备。所述转发设备可以用于执行第三方面提供的方法。

所述转发设备包括收发器以及与所述收发器耦合的处理器。

所述收发器用于接收来自源设备的第一报文以及第二报文,所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

所述处理器用于根据所述第一报文中的第一字段确定第一端口。

所述收发器还用于经由所述第一端口向目的设备转发所述第一报文,所述第一报文通过第一路径到达所述目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

所述处理器还用于根据所述第二报文中的第一字段确定第二端口。

所述收发器还用于经由所述第二端口向所述目的设备转发所述第二报文,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

所述收发器还用于接收来自所述目的设备的所述第一长度。

所述收发器还用于向所述源设备转发所述第一长度。

所述收发器还用于接收来自所述源设备的多个报文,每个报文中携带的第一字段的值等于所述第一报文中的第一字段的值。

所述收发器还用于经由所述第一端口转发所述多个报文,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

在一种可能设计中,所述收发器还用于接收来自所述目的设备的所述第二长度;以及向所述源设备转发所述第二长度。

在一种可能设计中,所述处理器还用于在所述收发器接收来自所述源设备的第一报文以后,以及经由所述第一端口向所述目的设备转发所述第一报文之前,将所述转发设备中对应所述第一端口的发送缓存队列的长度添加到所述第一报文中。

所述处理器还用于在所述收发器接收来自所述源设备的第二报文以后,以及经由所述第二端口向所述目的设备转发所述第二报文之前,将所述转发设备中对应所述第二端口的发送缓存队列的长度添加到所述第二报文中。

可选地,在第一方面至第九方面提供的技术方案中,所述第一报文中的第一字段为生存时间(timetolive,ttl)字段。所述第二报文中的第一字段为ttl字段。

可选地,在第一方面至第九方面提供的技术方案中,所述同一个报文流中的任意两个报文都包含相同的五元组。

第十方面,提供了一种计算机可读存储介质。所述计算机可读存储介质存储了计算机程序。当所述计算机程序被计算机执行时,使得所述计算机执行第一方面至第三方面提供的方法。

第十一方面,提供了一种计算机程序产品。所述计算机程序产品包括计算机程序。当所述计算机程序被计算机执行时,使得所述计算机执行第一方面至第三方面提供的方法。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍。

图1为本申请提供的一种数据中心网络的结构示意图。

图1a为本申请提供的一种交换机的结构示意图。

图1b为本申请提供的一种服务器的结构示意图。

图2为本申请提供的一种传输数据的方法的流程示意图。

图3为本申请提供了一种发送报文的方法的流程示意图。

图4为本申请提供了一种接收报文的方法的流程示意图。

图5为本申请提供了一种转发报文的方法的流程示意图。

图6为本申请提供的一种源设备的结构示意图。

图7为本申请提供的一种目的设备的结构示意图。

图8为本申请提供的一种转发设备的结构示意图。

具体实施方式

图1为本申请提供的一种数据中心网络的结构示意图。参见图1,数据中心网络包括服务器1至服务器6、叶子交换机(leafswitch,ls)1、ls1、ls3以及脊柱交换机(spineswitch,ss)1、ss2以及ss3。其中,服务器1和服务器2连接到ls1。服务器3和服务器4连接到ls2。服务器5和服务器6连接到ls3。ls1连接到ss1、ss2以及ss3。ls2连接到ss1、ss2以及ss3。ls3连接到ss1、ss2以及ss3。服务器1需要经由ls1与其他服务器进行通信。服务器6需要经由ls3与其他服务器进行通信。服务器1与服务器6进行通信时,服务器1发送的数据流可以经由不同的路径到达服务器6。不同的路径包括:路径1(ls1-ss1-ls3)、路径2(ls1-ss2-ls3)以及路径3(ls1-ss3-ls3)。在某个时间,不同路径的拥塞程度可能是不同的。相对于拥塞程度较高的路径,选择拥塞程度较低的路径传输服务器1发送给服务器6的数据流,有助于降低网络拥塞。

图1a为本申请提供的一种交换机的结构示意图。图1中的ls可以是交换机100。图1中的ss可以是交换机100。关于图1中的ls和ss的具体实现方式,可以参见本申请对交换机100的描述。

参见图1a,交换机100包括端口a至端口f、网络处理器110、存储器120、流量管理器130以及存储器140。端口a、端口b以及端口c与网络处理器110耦合。端口a、端口b以及端口c为发送端口,可以将接收到的报文发送至网络处理器110。交换机100可以包含更多或者更少的接收端口。端口d、端口e以及端口f与流量管理器130耦合。网络处理器110和存储器120耦合。存储器120中可以保存计算机程序以及转发表。所述转发表可以是哈希表。网络处理器110可以通过执行存储器120中保存的计算机程序和/或查找转发表,对来自接收端口的报文进行处理。例如,网络处理器110可以通过执行计算机程序,对报文中的哈希键执行哈希运算,从而获得哈希值。再例如,网络处理器110可以通过查找哈希表,确定与哈希值匹配的表项。根据与哈希值匹配的表项,确定用于转发报文的发送端口。所述发送端口可以是端口d、端口e或者端口f。网络处理器110和流量管理器130耦合。流量管理器130与存储器140耦合。例如,网络处理器110确定用于转发报文的发送端口后,可以将报文发送至流量管理器130。流量管理器130也可以称为调度器。流量管理器130中可以维护与端口d、端口e以及端口f一一对应的三个发送缓存队列。流量管理器130接收到来自网络处理器110的报文后,可以根据用于转发报文的发送端口,将报文入队到与用于转发报文的发送端口对应的发送缓存队列。流量管理器130可以对位于发送缓存队列中的报文进行调度,从而通过发送端口发送报文。具体地,流量管理器130中可以维护与所述三个发送缓存队列一一对应的三个报文描述符队列。报文描述符队列中包含多个报文描述符。每个报文描述符包含报文存储在发送缓存队列中的地址。当流量管理器130需要将报文入队到发送缓存队列时,流量管理器130可以在报文描述符队列中增加该报文的存储地址。流量管理器130可以对存储器140执行写操作,从而将报文入队到发送缓存队列。当流量管理器130需要将报文从发送缓存队列出队时,流量管理器130可以将报文描述符队列中该报文的存储地址删除。流量管理器130可以对存储器140执行读操作,从而将报文从发送缓存队列出队。报文出队后,报文经由发送端口被发送。网络处理器110可以用于实现本申请中的生成单元、确定单元以及添加单元。端口可以用于实现本申请中的接收单元和发送单元。

图1b为本申请提供的一种服务器的结构示意图。图1中的服务器可以是服务器1000。关于图1中的服务器的具体实现方式,可以参见本申请对服务器1000的描述。

参见图1b,服务器1000包括中央处理单元1100、存储器1200、端口1300以及总线。处理单元1100、存储器1200以及端口1300通过所述总线耦合。存储器1200存储软件。所述软件包含操作系统以及多个应用程序。中央处理单元1100通过访问存储器1200运行所述操作系统以及所述多个应用程序。所述操作系统可以是window或者linux。基于所述操作系统,中央处理单元1100运行所述多个应用程序。端口1300可以用于接收报文以及发送报文。例如,当端口1300接收到来自交换机100的报文后,存储器1200可以保存报文。中央处理单元1100可以根据应用程序对报文进行处理。另外,中央处理单元1100可以根据应用程序生成报文,并经由端口1300将报文发送至交换机100。

中央处理单元1100可以用于实现本申请中的生成单元、确定单元以及添加单元。端口可以用于实现本申请中的接收单元和发送单元。另外,中央处理单元1100可以被替换为其他的处理器。所述其他处理器可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(application-specificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明实施例公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。

图2为本申请提供的一种传输数据的方法的流程示意图。所述方法可以应用于图1所示的网络。参见图2,所述方法包括s201至s210。图2所示的方法涉及到的交换机可以是图1a所示的交换机1000。图2所示的方法涉及到的服务器可以是图1b所示的服务器1000。

s201、服务器1生成报文1以及报文2。

服务器1可以运行多个应用程序。例如,服务器1运行应用程序1以及应用程序2。服务器1基于应用程序1与服务器6进行通信。服务器6运行与应用程序1对应的应用程序。服务器1基于应用程序2与服务器2进行通信。服务器2运行与应用程序2对应的应用程序。当然,服务器2可以运行与应用程序1对应的应用程序,进而,服务器1可以基于应用程序1与服务器2进行通信。服务器1基于应用程序1与服务器6进行通信时,服务器1向服务器6发送报文流1。服务器1基于应用程序1与服务器2进行通信时,服务器1向服务器2发送报文流2。报文流1的报文中包含五元组与报文流2的报文中包含五元组不同。例如,报文流1的报文中包含源ip地址(服务器1的ip地址)、目的ip地址(服务器6的ip地址)、源端口(例如60)、目的端口(例如61)以及协议号(例如6)。报文流2的报文中包含源ip地址(服务器1的ip地址)、目的ip地址(服务器2的ip地址)、源端口(例如60)、目的端口(例如61)以及协议号(例如6)。服务器1生成报文1以及报文2。报文1和报文2属于报文流1。除了五元组,报文1还包含其他字段。例如,报文1还包含ttl字段。报文1包含的ttl字段的值为80。除了五元组,报文2还包含其他字段。例如,报文2还包含ttl字段。报文2包含的ttl字段的值为81。本申请中的源端口可以是tcp端口,也可以是udp端口。本申请中的目的端口可以是tcp端口,也可以是udp端口。

在上述举例中,报文流1和报文流2是基于五元组进行区分的。也就是说,不同的五元组对应不同的报文流。可选地,也可以基于其他方式对报文流进行区分。例如,可以基于两元组(包括源ip地址以及目的ip地址)对报文流进行区分。也就是说,不同的两元组对应不同的报文流。或者,基于三元组(包括源ip地址、目的ip地址以及协议号)对报文流进行区分。也就是说,不同的三元组对应不同的报文流。

需要说明的是,服务器1还可以生成其他报文。其他报文的数量是一个或者多个。其他报文属于报文流1。其他报文包含的ttl字段的值不等于报文1中的ttl字段的值,也不等于报文2中的ttl字段的值。例如,其他报文包含的ttl字段的值可以是82。

s202、服务器1向ls1发送报文1以及报文2。

服务器1可以包括arp表。arp表包含多个表项。每个表项包含一个ip地址以及与该ip地址对应的mac地址。服务器1经由与ls1连接的端口,向ls1发送报文1以及报文2。所述端口可以是以太网端口。报文1以及报文2可以分别被携带在以太网帧1以及以太网帧2中。以太网帧1和以太网帧2的源mac地址为服务器1的mac地址,目的mac地址为ls1的mac地址。具体地,ls1可以是服务器1的网关。服务器1保存ls1的ip地址。服务器1向ls1发送报文1以及报文2时,服务器1可以在arp表中查找与ls1的ip地址匹配的表项。根据匹配的表项获得ls1的mac地址。进而,服务器1可以将报文1和报文2封装在以太网帧1和以太网帧2中。另外,服务器1可以包括mac表。mac表包括多个表项。每个表项包含一个mac地址以及与该mac地址对应的以太网端口的标识。服务器1可以在mac地址表中查找与以太网帧1和以太网帧2的目的mac地址(ls1的mac地址)匹配的表项。根据匹配表项确定对应的以太网端口。服务器1经由对应的以太网端口向ls1发送以太网帧1和以太网帧2。

需要说明的是,服务器1还可以向ls1发送其他报文。例如,其他报文中包含的ttl字段的值可以是82。

s203、ls1经由端口1向ss1发送报文1。

ls1可以包含多个端口。ls1通过端口1与ss1连接。ls1通过端口2与ss2连接。所述ls1包含fifo存储器。所述fifo存储器中维护了多个发送缓存队列。所述多个发送缓存队列分别对应所述多个端口。所述多个发送缓存队列包括发送缓存队列1以及发送缓存队列2。发送缓存队列1对应端口1。发送缓存队列2对应端口2。ls1确定需要通过某个端口发送某个报文时,ls1需要将该报文入队到该端口对应的发送缓存队列。所述ls1可以包含调度器。所述调度器可以对发送缓存队列中的报文进行调度,从而将发送缓存队列中的报文经由对应的端口进行发送。

ls1包含哈希表。所述哈希表包含多个表项。每个表项包含哈希值以及与哈希值对应的端口的标识。例如,所述哈希表包含表项1以及表项2。表项1包含哈希值1以及端口1的标识。表项2包含哈希值2以及端口2的标识。另外,ls1包含网络处理器以及与网络处理器耦合的存储器。所述网络处理器可以是fpga。所述存储器可以是ddr。所述存储器中保存微码以及所述哈希表。所述微码包含执行哈希运算的指令。ls1接收到报文1后,所述网络处理器可以对报文1进行解析,从而获取报文1中的五元组以及ttl字段。所述网络处理器可以以报文1中的五元组以及ttl字段的值为哈希键,通过执行所述微码执行哈希运算。所述网络处理器可以确定哈希键1(包含报文1中的五元组以及ttl字段的值)对应的哈希值为哈希值1。所述网络处理器以哈希值1为查找关键字,在所述哈希表中查找到与哈希值1匹配的表项(表项1)。所述网络处理器根据表项1确定端口1为用于发送报文1的端口。

所述网络处理器确定端口1为用于发送报文1的端口后,可以将发送缓存队列1的长度(例如长度1)携带在报文1中,并将携带有长度1的报文1入队到发送缓存队列1。具体来说,当报文1到达ls1时,发送缓存队列1中包含10个报文。所述10个报文包含的比特的数量为2000。报文1的报文头中可以包含预留字段。所述网络处理器可以将报文1的所述保留字段的值设置为2000,从而使得报文1携带长度1。当然,长度1也可以携带在报文1的净荷中。所述调度器根据fifo原则,将携带有长度1的报文1经由端口1向ss1发送。

s204、ls1经由端口2向ss2发送报文2。

s204的具体实现方式与s203的具体实现方式类似。关于s204的具体实现方式,可以参考上文对s203的描述。需要说明的是,所述网络处理器对报文2进行解析,从而获取报文2中的五元组以及ttl字段。所述网络处理器以报文2中的五元组以及ttl字段的值为哈希键,通过执行所述微码执行哈希运算。所述网络处理器可以确定哈希键2(包含报文2中的五元组以及ttl字段的值)对应的哈希值为哈希值2。所述网络处理器以哈希值2为查找关键字,在所述哈希表中查找到与哈希值2匹配的表项(表项2)。所述网络处理器根据表项2确定端口2为用于发送报文2的端口。所述网络处理器确定端口2为用于发送报文2的端口后,可以将发送缓存队列2的长度(例如长度2)携带在报文2中,并将携带有长度2的报文2入队到发送缓存队列2。例如,当报文2到达ls1时,发送缓存队列2中包含20个报文。所述20个报文包含的比特的数量为4000。所述网络处理器可以将报文2中的保留字段的值设置为4000,从而使得报文2携带长度2。当然,长度2也可以携带在报文2的净荷中。所述调度器根据fifo原则,将携带有长度2的报文2经由端口2向ss1发送。

需要说明的是,ls1还可以经由其他端口发送其他报文。例如,其他报文中包含的ttl字段的值可以是82。其他报文的传输路径不同于报文1的传输路径。其他报文的传输路径不同于报文2的传输路径。具体地,ls1可以经由其他端口向ss3发送其他报文。ls1向ss3发送其他报文前,可以将其他端口对应的发送缓存队列的长度携带在其他报文中。报文1经由路径1到达服务器6。报文2经由路径2到达服务器6。其他报文经由路径3到达服务器6。

s205、ss1向ls3发送报文1。

举例来说,ss1中包含路由器表1。路由表1包含多个表项。每个表项包含一个ip地址以及出接口。例如,路由表1包含表项3。表项3包含服务器6的ip地址以及出接口1。ss1通过出接口1连接到ls3。

ss1接收到报文1后,ss1可以以报文1中的目的ip地址(服务器6的ip地址)为查找关键字,在路由表1中查找与服务器6的ip地址匹配的表项(表项3)。ss1根据表项3,确定用于转发报文1的出接口为出接口1。

与ls1类似,ss1中也可以维护多个发送缓存队列。所述多个发送缓存队列与ss1的多个出接口一一对应。例如,发送缓存队列3与出接口1对应。ss1确定用于转发报文1的出接口为出接口1后,ss1可以将长度3(例如3000)携带在报文1中。ss1将携带有长度3的报文1入队到发送缓存队列3。例如,ss1可以将报文1中的保留字段的值设置为3000。当报文1到达ss1时,发送缓存队列3的长度为长度3。根据上文的描述,当报文1到达ss1时,报文1中携带有长度1。报文1的报文头可以包含多个保留字段。不同的保留字段可以分别携带长度1以及携带长度3。当然,报文1的净荷可以包含多个字段,不同的字段可以分别携带长度1以及长度3。

在一种可能的实现方式中,当报文1到达ss1时,发送缓存队列3的长度为长度3(例如3000)。ss1确定用于转发报文1的出接口为出接口1后,ss1可以计算长度1和长度3的和,并将长度1和长度3的和(例如5000)携带在报文1中。ss1将携带有长度1和长度3的和的报文1入队到发送缓存队列3。例如,当报文1到达ss1时,报文1中携带有长度1。长度1具体携带在保留字段上。ss1可以将报文1中的保留字段的值设置从2000设置为5000。当然,报文1的报文头可以包含多个保留字段。不同的保留字段可以分别携带长度1以及长度1和长度3的和。可选地,报文1的净荷可以包含多个字段,不同的字段可以分别携带长度1以及长度1和长度3的和。

ss1经由出接口1向ls3发送报文1。具体可以包括,ss1中的调度器将位于发送缓存队列3中的报文1经由出接口1向ls3发送。

s206、ss2向ls3发送报文2。

s206的具体实现方式与s205的具体实现方式类似。关于s206的具体实现方式,可以参考上文对s205的描述。需要说明的是,ss2中包含路由器表2。所述路由表2包含多个表项。每个表项包含一个ip地址以及出接口。例如,路由表2包含表项4。表项4包含服务器6的ip地址以及出接口2。ss2通过出接口2连接到ls3。

ss2接收到报文2后,ss2可以以报文2中的目的ip地址(服务器6的ip地址)为查找关键字,在路由表2中查找与服务器6的ip地址匹配的表项(表项4)。ss1根据表项4,确定用于转发报文2的出接口为出接口2。

与ss1类似,ss2中也可以维护多个发送缓存队列。所述多个发送缓存队列与ss2的多个出接口一一对应。例如,发送缓存队列4与出接口2对应。ss2确定用于转发报文2的出接口为出接口2后,ss2可以将长度4(例如6000)携带在报文2中。ss2将携带有长度4的报文2入队到发送缓存队列4。例如,ss2可以将报文2中的保留字段的值设置为6000。当报文2到达ss2时,发送缓存队列4的长度为长度4。根据上文的描述,当报文2到达ss2时,报文2中携带有长度2。报文2的报文头可以包含多个保留字段。不同的保留字段可以分别携带长度2以及携带长度4。当然,报文2的净荷可以包含多个字段,不同的字段可以分别携带长度2以及长度4。

在一种可能的实现方式中,当报文2到达ss2时,发送缓存队列3的长度为长度4(例如6000)。ss2确定用于转发报文2的出接口为出接口2后,ss2可以计算长度2和长度4的和,并将长度2和长度4的和(例如10000)携带在报文2中。ss2将携带有长度2和长度4的和的报文2入队到发送缓存队列4。例如,当报文2到达ss2时,报文2中携带有长度2。长度2具体携带在保留字段上。ss2可以将报文2中的保留字段的值设置从4000设置为10000。当然,报文2的报文头可以包含多个保留字段。不同的保留字段可以分别携带长度2以及长度2和长度4的和。可选地,报文2的净荷可以包含多个字段,不同的字段可以分别携带长度2以及长度2和长度4的和。

ss2经由出接口2向ls3发送报文2。具体可以包括,ss2中的调度器将位于发送缓存队列4中的报文2经由出接口2向ls3发送。

需要说明的是,ss3可以向ls3发送携带ttl字段的其他报文。举例来说,其他报文中的ttl字段的值可以是82。

s207、ls3向服务器6发送报文1以及报文2。

ls3可以是服务器6的网关。ls3可以包含转发表。所述转发表包含多个表项。每个表项包含目的ip地址以及出接口。例如,所述转发表包含表项5。表项5包含服务器6的ip地址以及出接口3的标识。ls3经由出接口3与服务器6连接。

ls3接收到报文1后,可以在所述转发表中查找与报文1中的目的ip地址匹配的表项。与报文1中的目的ip地址匹配的表项为表项5。ls3根据表项5确定用于转发报文1的出接口为出接口3。基于类似的机制,ls3根据表项5确定用于转发报文2的出接口为出接口3。

ls3可以维护与多个出接口一一对应的多个发送缓存队列。具体地,发送缓存队列5与出接口3对应。假设ls3接收到报文1时,发送缓存队列5的长度为长度5(例如1000),ls3接收到报文2时,发送缓存队列5的长度为长度5(例如1000)。ls3将报文1入队到发送缓存队列5前,ls3可以将长度5携带在报文1中。具体地,如果报文1包含了保留字段列表,并且所述保留字段列表包含保留字段1(携带长度1)和保留字段2(携带长度3),则ls3可以在所述保留字段列表中增加一个保留字段。所述增加的保留字段为保留字段3,用于携带长度5。如果报文1仅包含一个保留字段,并且所述保留字段的值为长度1和长度3的和(例如5000),则ls3可以将所述保留字段更新为长度1、长度3以及长度5的和(例如6000)。类似地,ls3将报文2入队到发送缓存队列5前,ls3可以将长度5携带在报文2中。具体地,如果报文2包含了保留字段列表,并且所述保留字段列表包含保留字段4(携带长度2)和保留字段5(携带长度4),则ls3可以在所述保留字段列表中增加一个保留字段。所述增加的保留字段为保留字段6,用于携带长度5。如果报文2仅包含一个保留字段,并且所述保留字段的值为长度2和长度4的和(例如10000),则ls3可以将所述保留字段更新为长度2、长度4以及长度5的和(例如11000)。

需要说明的是,ls3可以向服务器6发送携带ttl字段的其他报文。举例来说,其他报文中的ttl字段的值可以是82。

s208、服务器6向服务器1发送报文3以及报文4。

服务器1发送的报文1经由路径1到达服务器6。报文1可以包含保留字段列表。报文1的保留字段列表中记录了报文1从源设备(服务器1)到目的设备(服务器6)经过的多个转发设备中每个转发设备的发送缓存队列的长度。服务器6接收到报文1后,可以从报文1的保留字段列表中获取长度1、长度3以及长度5。具体地,报文1经过的转发设备包括ls1、ss1以及ls3。ls1、ss1以及ls3分别对应长度1、长度3以及长度5。服务器6确定长度1、长度3以及长度5的和(例如6000)后,服务器可以基于报文1生成报文3。报文1可以是请求消息,报文3可以是响应消息。报文3可以包含源ip地址以及目的ip地址。报文3的源ip地址为服务器6的ip地址。报文3的目的ip地址为服务器1的ip地址。报文3中可以携带长度1、长度3以及长度5的和(例如6000)。另外,报文3中可以携带报文1中的ttl字段。服务器6向服务器1发送报文3。

可替换地,报文1中仅包含一个保留字段,所述保留字段携带了长度1、长度3以及长度5的和(例如6000)。当报文1中携带了长度1、长度3以及长度5的和(例如6000),则服务器6可以不执行计算长度1、长度3以及长度5的和的操作,而是将6000携带在报文3中。

服务器1发送的报文2经由路径2到达服务器6。报文2可以包含保留字段列表。报文2的保留字段列表中记录了报文1从源设备(服务器1)到目的设备(服务器6)经过的多个转发设备中每个转发设备的发送缓存队列的长度。服务器6可以基于报文2生成报文4。服务器6生成报文4的具体实现方式可以参考上文对服务器6生成报文3的具体实现方式的描述。报文4中携带长度2、长度4以及长度5的和(例如11000)。另外,报文4可以携带报文2中的ttl字段。服务器6向服务器1发送报文4。关于服务器6向服务器1发送报文4的具体实现方式,可以参考上文对服务器6向服务器1发送报文3的描述,此处不再赘述。

需要说明的是,服务器6有可能接收到携带ttl字段的其他报文。举例来说,其他报文中的ttl字段的值可以是82。所述其他报文中可以携带所述其他报文在传输路径上经过的节点的发送缓存队列的长度的总和。例如,所述其他报文可以经由路径3到达服务器6。所述其他报文可以携带ls1的发送缓存队列的长度、ss3的发送缓存队列的长度以及ls3的发送缓存队列的长度的总和(例如4000)。响应于所述其他报文,服务器6可以向服务器1发送所述其他报文的响应报文。例如,服务器6可以向服务器1发送的响应报文中可以包含4000。可选地,所述响应报文还可以包含ttl字段。ttl字段的值可以是82。

s209、服务器1选择路径1作为发送报文流的路径。

服务器1接收到报文3和报文4后,可以基于报文3和报文4确定路径1为发送报文流1的优选路径。

具体来说,报文3中携带路径1上的多个节点的发送缓存队列的长度之和(例如6000)。报文4中携带路径2上的多个节点的发送缓存队列的长度之和(例如11000)。入队到发送缓存队列的报文需要等待入队时已保存在发送缓存队列的报文被调度出发送缓存队列后,才能被发送。因此,发送缓存队列的长度越短,需要入队的报文需要等待的时间越短。发送缓存队列的长度越短,网络的拥塞程度越低。因此,可以认为路径1的拥塞程度低于路径2。

服务器1通过对路径1上的多个节点的发送缓存队列的长度之和以及路径2上的多个节点的发送缓存队列的长度之和进行比较从而确定路径1上的多个节点的发送缓存队列的长度之和小于路径2上的多个节点的发送缓存队列的长度之和。进而,服务器1可以确定确定路径1为发送报文流1的优选路径。

需要说明的是,服务器1可能向服务器6发送其他报文。例如,其他报文中的ttl字段的值等于82。其他报文经由路径3到达服务器6。所述其他报文可以携带ls1的发送缓存队列的长度、ss3的发送缓存队列的长度以及ls3的发送缓存队列的长度的总和(例如4000)。当服务器1不仅接收到报文3和报文4,还接收到服务器6针对其他报文的响应报文时,服务器1可以基于报文3、报文4以及其他报文确定路径3为发送报文流1的优选路径。具体地,路径3对应的发送缓存队列的长度总和(例如4000)小于路径1对应发送缓存队列的长度总和(例如6000)。路径3对应的发送缓存队列的长度总和(例如4000)小于路径2对应发送缓存队列的长度总和(例如11000)。

s210、服务器1经由路径1向服务器6发送报文流。

根据s203和s204可以确定,当报文流1中的报文携带的ttl的值等于报文1中的ttl的值时,ls1可以经由端口1向服务器6发送报文流1。当报文流1中的报文携带的ttl的值等于报文2中的ttl的值时,ls1可以经由端口2向服务器6发送报文流1。端口1位于路径1上。端口2位于路径2上。因此,服务器1可以将待发送的报文流1中的报文的ttl的值设置为报文1中的ttl的值,并向ls1发送所述待发送的报文流1中的报文。从而使得报文流1经由路径1到达服务器6。

在一种可能的设计中,当报文3是报文1的响应报文时,服务器1根据报文3的报文头,可以确定报文3对应报文1。当报文4是报文2的响应报文时,服务器1根据报文4的报文头,可以确定报文4对应报文2。服务器1确定报文3中的发送缓存队列的长度之和小于报文4中的发送缓存队列的长度之和时,服务器1可以根据报文3与报文1的对应关系,将报文流1中的报文的ttl的值设置为与报文3对应的报文1中的ttl的值。

在一种可能的设计中,当报文3携带报文1的ttl的值,报文4携带报文2的ttl的值,服务器1根据报文4的报文头,可以确定报文4对应报文2。服务器1确定报文3中的发送缓存队列的长度之和小于报文4中的发送缓存队列的长度之和时,服务器1可以根据报文3携带的报文1的ttl的值,将报文流1中的报文的ttl的值设置为报文3携带的报文1中的ttl的值。

举例来说,当服务器1确定路径3为发送报文流1的优选路径时,服务器1经由路径3向服务器6发送报文流。具体地,服务器1将报文流1中的报文的ttl的值设置为其他报文携带的ttl的值(例如82)。

图3为本申请提供了一种发送报文的方法的流程示意图。图3所示的方法的执行主体是源设备。所述源设备可以是图2所示的方法涉及的服务器1。在图3所示的方法的一种可能的实现方式中,所述源设备可以执行图2所示的方法中服务器1执行的步骤。因此,关于图3所示的方法的具体实现方式,可以参考图2所示的实施例中的描述。下面结合图2所示的实施例,对图3的方法进行举例说明。

参见图3,所述方法包括s301至s304。

s301、源设备生成第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

举例来说,所述第一报文可以是报文1。所述第二报文可以是报文2。所述第一报文的第一字段可以是ttl字段。所述第二报文的第一字段可以是ttl字段。当然,所述第一报文的第一字段也可以是其他字段。所述第二报文的第一字段可以是其他字段。

s302、所述源设备向转发设备发送所述第一报文以及所述第二报文。

所述第一报文中的第一字段的值被所述转发设备用于确定转发所述第一报文的端口,所述转发设备用于转发所述第一报文的端口为第一端口,所述第二报文中的第一字段的值被所述转发设备用于确定转发所述第二报文的端口。所述转发设备用于转发所述第二报文的端口为第二端口。所述第一报文通过第一路径到达目的设备。所述第一路径的开始节点为所述转发设备。所述第一路径的目的节点为所述目的设备。所述第一端口位于所述第一路径上。

所述第二报文通过第二路径到达所述目的设备。所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备。所述第二端口位于所述第二路径上。

所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列。

所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度。所述第一长度小于所述第二长度。

举例来说,所述转发设备可以是ls1。所述第一端口可以是端口1。所述第二端口可以是端口2。所述目的设备可以是服务器6。所述第一路径可以包括路径1。此外,所述第一路径还可以包括ls3到服务器6的路径。所述第二路径可以包括路径2。此外,所述第一路径还可以包括ls3到服务器6的路径。

举例来说,所述第一路径上的多个被到达节点可以包括ls1、ss1以及ls3。所述第二路径上的多个被到达节点可以包括ls1、ss2以及ls3。

举例来说,所述第一长度可以是发送缓存队列1的长度、发送缓存队列3的长度以及发送缓存队列5的长度的总和。所述第二长度可以是发送缓存队列2的长度、发送缓存队列4的长度以及发送缓存队列5的长度的总和。所述第一长度可以等于6000。所述第二长度可以等于11000。

s303、所述源设备根据与所述第一长度对应的所述第一报文中的第一字段生成多个报文。

所述多个报文中的每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

举例来说,所述多个报文可以是报文流1中的报文。所述多个报文可以是服务器1生成报文1以及报文2后生成的。第一长度小于第二长度,因此,所述第一路径的拥塞程度低于所述第二路径的拥塞程度。所述源设备可以将所述第一路径作为发送所述多个报文的路径。具体地,所述源设备将所述多个报文的每个报文中携带的ttl的值设置为与所述第一路径对应的ttl的值。与所述第一路径对应的ttl的值等于所述第一报文(例如报文1)中的ttl的值。

s304、所述源设备向所述转发设备发送所述多个报文。

所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

举例来说,所述多个报文中的每个报文携带的第一字段(例如ttl字段)的值等于所述第一报文(例如报文1)中的第一字段(例如ttl字段)的值。进而,所述转发设备(例如ls1)可以基于所述多个报文中的每个报文携带的第一字段的值,确定发送所述多个报文的端口为所述第一端口(例如端口1)。因此,有助于使得所述多个报文经由所述第一路径到达所述目的设备(例如服务器6)。所述转发设备确定所述第一端口具体实现时,可以执行哈希运算以及查找哈希表。具体可以参考图2对应的实施例对s203的描述,此处不再赘述。

上述技术方案中,所述第一路径上除了所述目的节点的多个节点的发送缓存队列的长度的总和等于第一长度。所述第二路径上除了所述目的节点的多个节点的发送缓存队列的长度的总和等于第二长度。所述第一长度小于所述第二长度,因此可以认为所述第一路径的拥塞程度小于所述第二路径的拥塞程度。所述多个报文中每个报文中的第一字段的值等于所述第一报文中的第一字段的值。可以使得所述转发设备沿着所述第一路径向所述目的节点发送所述多个报文。上述技术方案实现了经由拥塞程度较低的路径发送多个报文,有助于降低网络的的拥塞程度。

可选地,上述技术方案中,所述源设备根据与所述第一报文对应的所述第一长度生成多个报文,包括:

所述源设备接收所述目的设备发送的所述第一长度和所述第二长度;

所述源设备确定所述第一长度和所述第二长度中的较小的值对应所述第一报文中的第一字段;

所述源设备生成所述多个报文,每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

举例来说,服务器6可以生成报文3以及报文4。报文3中携带所述第一长度。报文4中携带所述第二长度。服务器6向服务器1发送报文3以及报文4。

服务器1对报文3中的第一长度以及报文4中的第二长度进行比较,确定第一长度小于第二长度。所述第一长度是报文1沿着路径1进行传输时,路径1上的交换机包含的发送缓存队列的长度总和。因此,所述第一长度和所述第二长度中的较小的值为所述第一长度。所述第一长度对应报文1中的ttl字段的值。进一步地,服务器1生成的所述多个报文中每个报文的ttl字段的值等于报文1中的ttl字段的值。以上使得所述多个报文可以沿着与报文1相同的路径(路径1)传输到服务器6。

可选地,上述技术方案中,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点在所述第一报文中添加该节点的发送缓存队列的长度,所述第一长度是所述目的节点基于接收到的所述第一报文中携带的所述第一路径上除了所述目的节点的多个节点中的每个节点添加的该节点的发送缓存队列的长度获得的。

举例来说,报文1可以包含保留字段列表。保留字段列表可以包括多个保留字段。每个保留字段可以用于携带一个被到达节点的发送缓存队列的长度。例如,报文1到达ls3之前,报文1中的保留字段列表包含保留字段1(携带长度1)和保留字段2(携带长度3)。ls3可以在报文1的保留字段列表中增加一个保留字段,从而携带ls3的发送缓存队列的长度(长度5)。

可选地,上述技术方案中,所述第一报文还包含第二字段,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点使用该节点的发送缓存队列的长度对所述第二字段的值进行增量更新,所述第一长度等于所述目的节点从接收到的所述第一报文中携带的增量更新后的所述第二字段的值。

举例来说,报文1可以仅包括一个保留字段。报文1到达ls1时,ls1可以将所述保留字段的值设置为ls1的发送缓存队列的长度(长度1)。当报文1到达ss1时,ss1可以将所述保留字段的值从长度1(例如2000)设置为长度1与长度3的和(例如5000)。当报文1到达ls3时,ls3可以将所述保留字段的值从长度1与长度3的和(例如5000)设置为长度1、长度3以及长度5的和(例如6000)。

图4为本申请提供了一种接收报文的方法的流程示意图。图4所示的方法的执行主体是目的设备。所述目的设备可以是图2所示的方法涉及的服务器6。在图4所示的方法的一种可能的实现方式中,所述目的设备可以执行图2所示的方法中服务器6执行的步骤。因此,关于图4所示的方法的具体实现方式,可以参考图2所示的实施例中的描述。下面结合图2所示的实施例,对图4的方法进行举例说明。

参见图4,所述方法包括s401至s404。

s401、目的设备经由第一路径接收源设备发送的第一报文。

举例来说,目的设备可以是服务器6。源设备可以是服务器1。第一报文可以是报文1。

s402、所述目的设备经由第二路径接收所述源设备发送的第二报文。

所述第一报文中携带第一字段以及第二字段,所述第一报文中的第二字段的值等于第一长度,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第一长度,当所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的节点时,所述第一报文中的第一字段的值被所述第一路径上除所述目的节点的节点用于确定转发所述第一报文的端口。

所述第二报文中携带第一字段以及第二字段,所述第二报文中的第二字段的值等于第二长度,所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第二长度。

所述第一报文中携带的第一字段的值不等于所述第二报文中携带的第一字段的值,当所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的节点时,所述第二报文中的第一字段的值被所述第二路径上除所述目的节点的节点用于确定转发所述第二报文的端口,所述第一长度小于所述第二长度。

举例来说,第二报文可以是报文2。所述第一报文的第一字段可以是ttl字段。所述第二报文的第一字段可以是ttl字段。当然,所述第一报文的第一字段也可以是其他字段。所述第二报文的第一字段可以是其他字段。

所述第一路径可以包括路径1。此外,所述第一路径还可以包括ls3到服务器6的路径。所述第二路径可以包括路径2。此外,所述第一路径还可以包括ls3到服务器6的路径。

举例来说,所述第一路径上的多个被到达节点可以包括ls1、ss1以及ls3。所述第二路径上的多个被到达节点可以包括ls1、ss2以及ls3。

举例来说,所述第一长度可以是发送缓存队列1的长度、发送缓存队列3的长度以及发送缓存队列5的长度的总和。所述第二长度可以是发送缓存队列2的长度、发送缓存队列4的长度以及发送缓存队列5的长度的总和。所述第一长度可以等于6000。所述第二长度可以等于11000。

s403、所述目的设备向源设备发送所述第一长度。

例如,所述第一长度可以被携带在报文3。所述目的设备向源设备发送报文3。

在一种设计中,报文1包含ls1中的发送缓存队列的长度(长度1)、ss1中的发送缓存队列的长度(长度3)以及ls3中的发送缓存队列的长度(长度5)。服务器6可以计算长度1、长度3以及长度5的和(第一长度)。例如,所述第一长度可以等于6000。

在一种设计中,报文1包含ls1中的发送缓存队列的长度(长度1)、ss1中的发送缓存队列的长度(长度3)以及ls3中的发送缓存队列的长度(长度5)的和(第一长度)。例如,所述第一长度可以等于6000。服务器6可以不执行计算长度1、长度3以及长度5的和的操作,而是将6000携带在报文3中。

s404、所述目的设备经由所述第一路径接收所述源设备发送的多个报文。

所述多个报文中的每个报文中携带的第一字段的值等于所述第一报文中携带的第一字段的值,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

举例来说,所述多个报文可以是报文流1中的报文。所述多个报文可以是服务器1生成报文1以及报文2后生成的。第一长度小于第二长度,因此,所述第一路径的拥塞程度低于所述第二路径的拥塞程度。所述源设备可以将所述第一路径作为发送所述多个报文的路径。具体地,所述源设备将所述多个报文的每个报文中携带的ttl的值设置为与所述第一路径对应的ttl的值。与所述第一路径对应的ttl的值等于所述第一报文(例如报文1)中的ttl的值。

举例来说,所述多个报文中的每个报文携带的第一字段(例如ttl字段)的值等于所述第一报文(例如报文1)中的第一字段(例如ttl字段)的值。进而,所述转发设备(例如ls1)可以基于所述多个报文中的每个报文携带的第一字段的值,确定发送所述多个报文的端口为所述第一端口(例如端口1)。因此,有助于使得所述多个报文经由所述第一路径到达所述目的设备(例如服务器6)。所述转发设备确定所述第一端口具体实现时,可以执行哈希运算以及查找哈希表。具体可以参考图2对应的实施例对s203的描述,此处不再赘述。

可选地,上述技术方案中,还包括:所述目的设备向源设备发送所述第二长度。

举例来说,服务器6可以生成报文3以及报文4。报文3中携带所述第一长度。报文4中携带所述第二长度。服务器6向服务器1发送报文3以及报文4。

服务器1对报文3中的第一长度以及报文4中的第二长度进行比较,确定第一长度小于第二长度。所述第一长度是报文1沿着路径1进行传输时,路径1上的交换机包含的发送缓存队列的长度总和。因此,所述第一长度和所述第二长度中的较小的值为所述第一长度。所述第一长度对应报文1中的ttl字段的值。进一步地,服务器1生成的所述多个报文中每个报文的ttl字段的值等于报文1中的ttl字段的值。以上使得所述多个报文可以沿着与报文1相同的路径(路径1)传输到服务器6。

图5为本申请提供了一种转发报文的方法的流程示意图。图5所示的方法的执行主体是转发设备。所述转发设备可以是图2所示的方法涉及的ls1。在图5所示的方法的一种可能的实现方式中,所述转发设备可以执行图2所示的方法中ls1执行的步骤。因此,关于图5所示的方法的具体实现方式,可以参考图2所示的实施例中的描述。下面结合图2所示的实施例,对图5的方法进行举例说明。

参见图5,所述方法包括s501至s509。

s501、转发设备接收来自源设备的第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

举例来说,所述源设备可以是服务器1。所述目的设备可以是服务器6。所述转发设备可以是ls1。所述第一报文可以是报文1。所述第二报文可以是报文2。所述第一报文的第一字段可以是ttl字段。所述第二报文的第一字段可以是ttl字段。当然,所述第一报文的第一字段也可以是其他字段。所述第二报文的第一字段可以是其他字段。

s502、所述转发设备根据所述第一报文中的第一字段确定第一端口。

s503、所述转发设备经由所述第一端口向目的设备转发所述第一报文。

所述第一报文通过第一路径到达所述目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

s504、所述转发设备根据所述第二报文中的第一字段确定第二端口。

s505、所述转发设备经由所述第二端口向所述目的设备转发所述第二报文。

所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

举例来说,所述第一端口可以是端口1。所述第二端口可以是端口2。所述第一路径可以包括路径1。此外,所述第一路径还可以包括ls3到服务器6的路径。所述第二路径可以包括路径2。此外,所述第一路径还可以包括ls3到服务器6的路径。

举例来说,所述第一路径上的多个被到达节点可以包括ls1、ss1以及ls3。所述第二路径上的多个被到达节点可以包括ls1、ss2以及ls3。

举例来说,所述第一长度可以是发送缓存队列1的长度、发送缓存队列3的长度以及发送缓存队列5的长度的总和。所述第二长度可以是发送缓存队列2的长度、发送缓存队列4的长度以及发送缓存队列5的长度的总和。所述第一长度可以等于6000。所述第二长度可以等于11000。

s506、所述转发设备接收来自所述目的设备的所述第一长度。

s507、所述转发设备向所述源设备转发所述第一长度。

例如,所述第一长度可以被携带在报文3。所述目的设备向源设备发送报文3。

在一种设计中,报文1包含ls1中的发送缓存队列的长度(长度1)、ss1中的发送缓存队列的长度(长度3)以及ls3中的发送缓存队列的长度(长度5)。服务器6可以计算长度1、长度3以及长度5的和(第一长度)。例如,所述第一长度可以等于6000。

在一种设计中,报文1包含ls1中的发送缓存队列的长度(长度1)、ss1中的发送缓存队列的长度(长度3)以及ls3中的发送缓存队列的长度(长度5)的和(第一长度)。例如,所述第一长度可以等于6000。服务器6可以不执行计算长度1、长度3以及长度5的和的操作,而是将6000携带在报文3中。

举例来说,报文3可以沿着路径(ls3-ss1-ls1)进行传输。报文3可以包含源ip地址以及目的ip地址。报文3的源ip地址为服务器6的ip地址。报文3的目的ip地址为服务器1的ip地址。报文3中可以携带长度1、长度3以及长度5的和(例如6000)。另外,报文3中可以携带报文1中的ttl字段。ls1接收到报文3后,可以根据报文3的目的ip地址,将报文3转发给服务器1。

s508、所述转发设备接收来自所述源设备的多个报文。

每个报文中携带的第一字段的值等于所述第一报文中的第一字段的值。

举例来说,所述多个报文可以是报文流1中的报文。所述多个报文可以是服务器1生成报文1以及报文2后生成的。第一长度小于第二长度,因此,所述第一路径的拥塞程度低于所述第二路径的拥塞程度。所述源设备可以将所述第一路径作为发送所述多个报文的路径。具体地,所述源设备将所述多个报文的每个报文中携带的ttl的值设置为与所述第一路径对应的ttl的值。与所述第一路径对应的ttl的值等于所述第一报文(例如报文1)中的ttl的值。

s509、所述转发设备经由所述第一端口转发所述多个报文。

所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

举例来说,所述多个报文中的每个报文携带的第一字段(例如ttl字段)的值等于所述第一报文(例如报文1)中的第一字段(例如ttl字段)的值。进而,所述转发设备(例如ls1)可以基于所述多个报文中的每个报文携带的第一字段的值,确定发送所述多个报文的端口为所述第一端口(例如端口1)。因此,有助于使得所述多个报文经由所述第一路径到达所述目的设备(例如服务器6)。所述转发设备确定所述第一端口具体实现时,可以执行哈希运算以及查找哈希表。具体可以参考图2对应的实施例对s203的描述,此处不再赘述。

可选地,上述技术方案中,所述方法还包括:

所述转发设备接收来自所述目的设备的所述第二长度;

所述转发设备向所述源设备转发所述第二长度。

举例来说,服务器6可以生成报文3以及报文4。报文3中携带所述第一长度。报文4中携带所述第二长度。服务器6向服务器1发送报文3以及报文4。

服务器1对报文3中的第一长度以及报文4中的第二长度进行比较,确定第一长度小于第二长度。所述第一长度是报文1沿着路径1进行传输时,路径1上的交换机包含的发送缓存队列的长度总和。因此,所述第一长度和所述第二长度中的较小的值为所述第一长度。所述第一长度对应报文1中的ttl字段的值。进一步地,服务器1生成的所述多个报文中每个报文的ttl字段的值等于报文1中的ttl字段的值。以上使得所述多个报文可以沿着与报文1相同的路径(路径1)传输到服务器6。

可选地,上述技术方案中,所述转发设备接收来自所述源设备的第一报文以后,以及所述转发设备经由所述第一端口向所述目的设备转发所述第一报文之前,所述方法还包括:所述转发设备将所述转发设备中对应所述第一端口的发送缓存队列的长度添加到所述第一报文中。

所述转发设备接收来自所述源设备的第二报文以后,以及所述转发设备经由所述第二端口向所述目的设备转发所述第二报文之前,所述方法还包括:所述转发设备将所述转发设备中对应所述第二端口的发送缓存队列的长度添加到所述第二报文中。

举例来说,报文1可以仅包括一个保留字段。报文1到达ls1时,ls1可以将所述保留字段的值设置为ls1的发送缓存队列的长度(长度1)。报文2可以仅包括一个保留字段。报文2到达ls1时,ls1可以将所述保留字段的值设置为ls1的发送缓存队列的长度(长度2)。当然,报文1可以包括多个保留字段。每个保留字段可以用于携带一个被到达节点的发送缓存队列的长度。报文2也可以包括多个保留字段。每个保留字段可以用于携带一个被到达节点的发送缓存队列的长度。

图6为本申请提供的一种源设备的结构示意图。源设备600可以用于执行图3所示的方法。源设备600可以是图2所示的方法涉及的服务器1。在图6所示的源设备的一种可能的实现方式中,源设备600可以执行图2所示的方法中服务器1执行的步骤。因此,关于图6所示的源设备的具体实现方式,可以参考图2所示的实施例中的描述。

参见图6,源设备600包括第一生成单元601、第一发送单元602、第二生成单元603以及第二发送单元604。

第一生成单元601,用于生成第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

举例来说,第一生成单元601可以执行图3中的s301。具体可参见图3所示的实施例对s301的描述。

第一发送单元602,用于向转发设备发送所述第一报文以及所述第二报文。

所述第一报文中的第一字段的值被所述转发设备用于确定转发所述第一报文的端口,所述转发设备用于转发所述第一报文的端口为第一端口,所述第二报文中的第一字段的值被所述转发设备用于确定转发所述第二报文的端口,所述转发设备用于转发所述第二报文的端口为第二端口,所述第一报文通过第一路径到达目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

举例来说,第一发送单元602可以执行图3中的s302。具体可参见图3所示的实施例对s302的描述。

第二生成单元603,用于根据与所述第一长度对应的所述第一报文中的第一字段生成多个报文。

所述多个报文中的每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

举例来说,第二生成单元603可以执行图3中的s303。具体可参见图3所示的实施例对s303的描述。

第二发送单元604,用于向所述转发设备发送所述多个报文。

所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

举例来说,第二发送单元604可以执行图3中的s304。具体可参见图3所示的实施例对s304的描述。

可选地,上述技术方案中,第二生成单元603用于:

接收所述目的设备发送的所述第一长度和所述第二长度;

确定所述第一长度和所述第二长度中的较小的值对应所述第一报文中的第一字段;

生成所述多个报文,每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

可选地,上述技术方案中,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点在所述第一报文中添加该节点的发送缓存队列的长度,所述第一长度是所述目的节点基于接收到的所述第一报文中携带的所述第一路径上除了所述目的节点的多个节点中的每个节点添加的该节点的发送缓存队列的长度获得的。

可选地,上述技术方案中,所述第一报文还包含第二字段,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点使用该节点的发送缓存队列的长度对所述第二字段的值进行增量更新,所述第一长度等于所述目的节点从接收到的所述第一报文中携带的增量更新后的所述第二字段的值。

图7为本申请提供的一种目的设备的结构示意图。目的设备700可以用于执行图4所示的方法。目的设备700可以是图2所示的方法涉及的服务器6。在图7所示的目的设备的一种可能的实现方式中,目的设备700可以执行图2所示的方法中服务器6执行的步骤。因此,关于图7所示的目的设备的具体实现方式,可以参考图2所示的实施例中的描述。

参见图7,目的设备700包括第一接收单元701、发送单元702以及第二接收单元703。

第一接收单元701,用于经由第一路径接收源设备发送的第一报文,经由第二路径接收所述源设备发送的第二报文。

所述第一报文中携带第一字段以及第二字段,所述第一报文中的第二字段的值等于第一长度,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第一长度,当所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的节点时,所述第一报文中的第一字段的值被所述第一路径上除所述目的节点的节点用于确定转发所述第一报文的端口。

所述第二报文中携带第一字段以及第二字段,所述第二报文中的第二字段的值等于第二长度,所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第二长度。

所述第一报文中携带的第一字段的值不等于所述第二报文中携带的第一字段的值,当所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的节点时,所述第二报文中的第一字段的值被所述第二路径上除所述目的节点的节点用于确定转发所述第二报文的端口,所述第一长度小于所述第二长度。

举例来说,第一接收单元701可以执行图4中的s401以及s402。具体可参见图4所示的实施例对s401以及s402的描述。

发送单元702,用于向源设备发送所述第一长度。

举例来说,发送单元702可以执行图4中的s403。具体可参见图4所示的实施例对s403的描述。

第二接收单元703,用于经由所述第一路径接收所述源设备发送的多个报文。

所述多个报文中的每个报文中携带的第一字段的值等于所述第一报文中携带的第一字段的值,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

举例来说,第二接收单元703可以执行图4中的s404。具体可参见图4所示的实施例对s404的描述。

可选地,上述技术方案中,发送单元702还用于向源设备发送所述第二长度。

图8为本申请提供的一种转发设备的结构示意图。转发设备800可以用于执行图5所示的方法。转发设备800可以是图2所示的方法涉及的ls1。在图8所示的转发设备的一种可能的实现方式中,转发设备800可以执行图2所示的方法中ls1执行的步骤。因此,关于图8所示的转发设备的具体实现方式,可以参考图2所示的实施例中的描述。

参见图8,转发设备800包括第一接收单元801、第一确定单元802、第一转发单元803、第二确定单元804、第二转发单元805、第二接收单元806、第三转发单元807、第三接收单元808以及第四转发单元809。

第一接收单元801,用于接收来自源设备的第一报文以及第二报文。

所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

举例来说,第一接收单元801可以执行图5中的s501。具体可参见图5所示的实施例对s501的描述。

第一确定单元802,用于根据所述第一报文中的第一字段确定第一端口。

举例来说,第一确定单元802可以执行图5中的s502。具体可参见图5所示的实施例对s502的描述。

第一转发单元803,用于经由所述第一端口向目的设备转发所述第一报文。

所述第一报文通过第一路径到达所述目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

举例来说,第一转发单元803可以执行图5中的s503。具体可参见图5所示的实施例对s503的描述。

第二确定单元804,用于根据所述第二报文中的第一字段确定第二端口。

举例来说,第二确定单元804可以执行图5中的s504。具体可参见图5所示的实施例对s504的描述。

第二转发单元805,用于经由所述第二端口向所述目的设备转发所述第二报文。

所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

举例来说,第二转发单元805可以执行图5中的s505。具体可参见图5所示的实施例对s505的描述。

第二接收单元806,用于接收来自所述目的设备的所述第一长度。

举例来说,第二接收单元806可以执行图5中的s506。具体可参见图5所示的实施例对s506的描述。

第三转发单元807,用于向所述源设备转发所述第一长度。

举例来说,第三转发单元807可以执行图5中的s507。具体可参见图5所示的实施例对s507的描述。

第三接收单元808,用于接收来自所述源设备的多个报文。

每个报文中携带的第一字段的值等于所述第一报文中的第一字段的值。

举例来说,第三接收单元808可以执行图5中的s508。具体可参见图5所示的实施例对s508的描述。

第四转发单元809,用于经由所述第一端口转发所述多个报文。

所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

举例来说,第四转发单元809可以执行图5中的s509。具体可参见图5所示的实施例对s509的描述。

可选地,上述技术方案中,第二接收单元806还用于接收来自所述目的设备的所述第二长度。

第三转发单元807还用于向所述源设备转发所述第二长度。

可选地,上述技术方案中,转发设备800还包括添加单元,用于在接收来自所述源设备的第一报文以后,以及经由所述第一端口向所述目的设备转发所述第一报文之前,将所述转发设备中对应所述第一端口的发送缓存队列的长度添加到所述第一报文中。

所述添加单元,还用于在接收来自所述源设备的第二报文以后,以及经由所述第二端口向所述目的设备转发所述第二报文之前,将所述转发设备中对应所述第二端口的发送缓存队列的长度添加到所述第二报文中。

本申请还提供了一种源设备。所述源设备可以执行图1提供的方法。

所述源设备包括处理器以及与所述处理器耦合的收发器。

所述处理器用于生成第一报文以及第二报文,所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

所述收发器用于向转发设备发送所述第一报文以及所述第二报文,所述第一报文中的第一字段的值被所述转发设备用于确定转发所述第一报文的端口,所述转发设备用于转发所述第一报文的端口为第一端口,所述第二报文中的第一字段的值被所述转发设备用于确定转发所述第二报文的端口,所述转发设备用于转发所述第二报文的端口为第二端口,所述第一报文通过第一路径到达目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

所述处理器还用于根据与所述第一长度对应的所述第一报文中的第一字段生成多个报文,所述多个报文中的每个报文中的第一字段的值等于所述第一报文中的第一字段的值。

所述收发器还用于向所述转发设备发送所述多个报文,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

在一种可能的设计中,所述收发器还用于接收所述目的设备发送的所述第一长度和所述第二长度。

所述处理器用于确定所述第一长度和所述第二长度中的较小的值对应所述第一报文中的第一字段;并基于所述第一报文中的第一字段生成所述多个报文。

在一种可能的设计中,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点在所述第一报文中添加该节点的发送缓存队列的长度,所述第一长度是所述目的节点基于接收到的所述第一报文中携带的所述第一路径上除了所述目的节点的多个节点中的每个节点添加的该节点的发送缓存队列的长度获得的。

在一种可能的设计中,所述第一报文还包含第二字段,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,多个被到达节点中的每个节点使用该节点的发送缓存队列的长度对所述第二字段的值进行增量更新,所述第一长度等于所述目的节点从接收到的所述第一报文中携带的增量更新后的所述第二字段的值。

本申请提供一种目的设备。所述目的设备可以用于执行图4提供的方法。

所述目的设备包括收发器以及与所述收发器耦合的处理器。

所述收发器用于经由第一路径接收源设备发送的第一报文,经由第二路径接收所述源设备发送的第二报文,所述第一报文中携带第一字段以及第二字段,所述第一报文中的第二字段的值等于第一长度,所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第一长度,当所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的节点时,所述第一报文中的第一字段的值被所述第一路径上除所述目的节点的节点用于确定转发所述第一报文的端口。

所述第二报文中携带第一字段以及第二字段,所述第二报文中的第二字段的值等于第二长度,所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于所述第二长度。

所述第一报文中携带的第一字段的值不等于所述第二报文中携带的第一字段的值,当所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的节点时,所述第二报文中的第一字段的值被所述第二路径上除所述目的节点的节点用于确定转发所述第二报文的端口,所述第一长度小于所述第二长度。

所述处理器用于确定所述第一长度。

所述收发器还用于向所述源设备发送所述第一长度。

所述收发器还用于经由所述第一路径接收所述源设备发送的多个报文,所述多个报文中的每个报文中携带的第一字段的值等于所述第一报文中携带的第一字段的值,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

在一种可能的设计中,所述处理器还用于确定所述第二长度。

所述收发器还用于向所述源设备发送所述第二长度。

本申请提供了一种转发设备。所述转发设备可以用于执行图5提供的方法。

所述转发设备包括收发器以及与所述收发器耦合的处理器。

所述收发器用于接收来自源设备的第一报文以及第二报文,所述第一报文包括第一字段,所述第二报文包括第一字段,所述第一报文中的第一字段的值不等于所述第二报文中的第一字段的值。

所述处理器用于根据所述第一报文中的第一字段确定第一端口。

所述收发器还用于经由所述第一端口向目的设备转发所述第一报文,所述第一报文通过第一路径到达所述目的设备,所述第一路径的开始节点为所述转发设备,所述第一路径的目的节点为所述目的设备,所述第一端口位于所述第一路径上;所述第一报文沿着所述第一路径分别到达所述第一路径上除了所述目的节点的多个节点时,所述第一路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第一路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第一长度。

所述处理器还用于根据所述第二报文中的第一字段确定第二端口。

所述收发器还用于经由所述第二端口向所述目的设备转发所述第二报文,所述第二报文通过第二路径到达所述目的设备,所述第二路径的开始节点为所述转发设备,所述第二路径的目的节点为所述目的设备,所述第二端口位于所述第二路径上;所述第二报文沿着所述第二路径分别到达所述第二路径上除了所述目的节点的多个节点时,所述第二路径上的多个被到达节点中每个被到达节点对应一个发送缓存队列,所述第二路径上的所述多个被到达节点对应的多个发送缓存队列的长度的总和等于第二长度,所述第一长度小于所述第二长度。

所述收发器还用于接收来自所述目的设备的所述第一长度。

所述收发器还用于向所述源设备转发所述第一长度。

所述收发器还用于接收来自所述源设备的多个报文,每个报文中携带的第一字段的值等于所述第一报文中的第一字段的值。

所述收发器还用于经由所述第一端口转发所述多个报文,所述第一报文、所述第二报文以及所述多个报文属于同一个报文流。

在一种可能设计中,所述收发器还用于接收来自所述目的设备的所述第二长度;以及向所述源设备转发所述第二长度。

在一种可能设计中,所述处理器还用于在所述收发器接收来自所述源设备的第一报文以后,以及经由所述第一端口向所述目的设备转发所述第一报文之前,将所述转发设备中对应所述第一端口的发送缓存队列的长度添加到所述第一报文中。

所述处理器还用于在所述收发器接收来自所述源设备的第二报文以后,以及经由所述第二端口向所述目的设备转发所述第二报文之前,将所述转发设备中对应所述第二端口的发送缓存队列的长度添加到所述第二报文中。

可选地,在第一方面至第九方面提供的技术方案中,所述第一报文中的第一字段为生存时间(timetolive,ttl)字段。所述第二报文中的第一字段为ttl字段。

可选地,在第一方面至第九方面提供的技术方案中,所述同一个报文流中的任意两个报文都包含相同的五元组。

本申请提供了一种计算机可读存储介质。所述计算机可读存储介质存储了计算机程序。当所述计算机程序被计算机执行时,使得所述计算机执行图3、图4或者图5提供的方法。

本申请提供了一种计算机程序产品。所述计算机程序产品包括计算机程序。当所述计算机程序被计算机执行时,使得所述计算机执行图3、图4或者图5提供的方法。

本申请实施例中所提及的通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器。结合本发明实施例所公开的方法的步骤,可以直接体现为处理器中的硬件及软件模块组合执行完成。当使用软件实现时,可以将实现上述功能的代码存储在计算机可读介质中。计算机可读介质包括计算机存储介质。存储介质可以是计算机能够存取的任何可用介质。以此为例但不限于:计算机可读介质可以是随机存取存储器(英文全称为random-accessmemory,英文缩写为ram)、只读存储器(英文全称为read-onlymemory,英文缩写为rom)、电可擦可编程只读存储器(英文全称为electricallyerasableprogrammableread-onlymemory,英文缩写为eeprom)、只读光盘(英文全称为compactdiskread-onlymemory,英文缩写为cd-rom)或其他光盘存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质。计算机可读介质可以是压缩碟(英文全称为compactdisk,英文缩写为cd)、激光碟、数字视频光碟(英文全称为digitalvideodisk,英文缩写为dvd)、软盘或者蓝光碟。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1