网络时延、带宽等状态测量以及Ryu基于状态的最短路径转发

目录

1.基于OpenFlow协议的链路带宽测量[1]

2.基于Ryu的链路时延测量[1][2][3]

3.基于跳数,时延,带宽的最短/优路径和负载均衡[4]

参考文献


1.基于OpenFlow协议的链路带宽测量[1]

带宽数据是网络状态中的重要数据。在SDN网络中获取带宽可以通过OpenFlow协议,也可以通过第三方的测量软件获取数据,如sFlow。此处仅介绍如何通过OpenFlow协议来获取可用带宽。

一条链路的带宽由两个端口的能力决定,所以我们可以通过获取端口的流量来得到链路的流量。OpenFlow协议中可以通过统计报文来获取端口、流表、流表项、组表和meter表的统计信息

以端口的统计信息为例,控制器通过周期下发Port statistics消息可以获得交换机端口的统计信息,其返回的统计消息格式如下:

struct ofp_port_stats {
    uint32_t port_no;
    uint8_t pad[4];/* Align to 64-bits. */
    uint64_t rx_packets;/* Number of received packets. */
    uint64_t tx_packets;/* Number of transmitted packets. */
    uint64_t rx_bytes;/* Number of received bytes. */
    uint64_t tx_bytes;/* Number of transmitted bytes. */
    uint64_t rx_dropped;/* Number of packets dropped by RX. */
    uint64_t tx_dropped;/* Number of packets dropped by TX. */
    uint64_t rx_errors;/* Number of receive errors. This is a super-set
                         of more specific receive errors and should be
    uint64_t tx_errors; /*
    uint64_t rx_frame_err;
    uint64_t rx_over_err;
    uint64_t rx_crc_err;
    uint64_t collisions;
    uint32_t duration_sec;
    uint32_t duration_nsec;
};

从返回的统计消息中可获取到:收发数据包的数量、字节数以及这个统计持续的时间。

统计流量速度=两个不同时间的统计消息的字节数之差/两个消息的统计时间差。

每条链路的已用带宽可根据统计一段时间间隔\Delta T内端口接收到的数据字节总数\Delta b_{rx}和传输的字节总数\Delta b_{tx},则链路的已用带宽公式为:

B^{used}=\left (\Delta b_{rx}+\Delta b_{tx}\right )/\Delta T.

因此,链路的可用带宽可表示为:B^{remain}=B^{total}-B^{used},其中B^{total}为链路的总带宽。

同理,可以计算出对应流表项或者组表等的统计流量。

基于以上计算出来的端口剩余带宽等数据,可为部署负载均衡等流量优化工程提高数据支撑。

2.基于Ryu的链路时延测量[1][2][3]

时延的测试在终端会显得很容易,但是在交换机节点上测试时延就比较麻烦。在SDN中,可以通过一下步骤实现交换机之间链路的时延。

(1)控制器向交换机A下发一个Packet_out报文。报文的数据段携带了任意一个约定好的协议报文,其报文的数据段携带了控制器下发报文时的时间戳。Packet_out报文的动作指示交换机将其泛洪或者转发到某端口。

(2)交换机B收到了交换机A发送过来的数据包,无法匹配对应流表项,从而packet_in到控制器。控制器接收到这个数据包之后,和当下时间相减,得到时间差\Delta T1,即

\Delta T1\approx T_{_controller\rightarrow switchA}+T_{switchA\rightarrow switchB}+T_{switchB\rightarrow controller}.

(3)同理,控制器向交换机B发送一个类似的报文。然后控制器从交换机A收到Packet_in报文,记录下时间差\Delta T2,则:

\Delta T1+\Delta T2=RTT_{controller\leftrightarrow switchA}+RTT_{switchA\leftrightarrow switchB}+RTT_{controller\leftrightarrow switchB}.

(4)控制器向交换机A和交换机B分别发送带有时间戳的Echo request。交换机收到之后即刻回复携带echo request时间戳的echo reply消息。所以控制器可以通过Echo reply的时间戳减去Echo reply携带的时间,从而得到\Delta T_{A}=RTT_{controller\leftrightarrow switchA}\Delta T_{B}=RTT_{controller\leftrightarrow switchB}。因此,交换机A到交换机B的RTT为:

RTT_{switchA\leftrightarrow switchB}=\Delta T1+\Delta T2-\Delta T_{A}-\Delta T_{B}.

(5)假设交换机A与交换机B之间的往返时间一样,则交换机A到交换机B的链路时延为:

Latency_{A\rightarrow B}=\frac{RTT_{switchA\leftrightarrow switchB}}{2}=\frac{\Delta T1+\Delta T2-\Delta T_{A}-\Delta T_{B}}{2}.

通过以上步骤,可以相对准确地测量链路传输时延,但在计算过程中,数据包在交换机中的处理时延这部分时间无法计算而被忽略掉了。

3、基于跳数,时延,带宽的最短/优路径和负载均衡[4]

表1 基于状态的最短路径转发
原理设置
基于跳数的最短路径转发[5]

通过network_awareness应用来实现网络拓扑资源的感知并计算最短路径。

1.使用networkx的有向图数据结构存储拓扑信息;

2.使用networkx提供的shortest_simple_paths函数来计算最短路径。其函数参数信息为:shortest_simple_paths(G, source, target, weight=None);

3.获得最短路径之后,shortest_forwarding应用将完成流表下发等工作,实现基于跳数的最短路径转发应用。

基于时延的最优路径转发[6]

原理和基于跳数的最短路径转发应用类似,只是链路权重类型变成了时延。

1.NetworkDelayDetector是一个网络时延探测应用[6],其在获取到链路时延之后,将时延数据存储到Networkx的图数据结构中,以供其他模块使用。

2.通过设置链路权重参数,Shortest_forwarding应用可以基于时延数据计算最优的转发路径。

基于带宽的最优路径转发/负载均衡

先计算基于跳数的K条最短路径,再从中选取可用带宽最大的那条路径为最优解。

1.链路可用带宽的数据由nework_monitor应用提供。周期地获取链路的剩余带宽,并将带宽数据存储到networkx的图结构中,提供给其他模块使用;

2.network_monitor模块还实现了基于链路可用带宽的最优转发路径的计算,为其他模块提供最优路径信息;

3.Shortest_forwarding应用可以基于带宽数据计算最优的转发路径。

为解析权重和最短K路径的参数,还需要在Ryu中注册全局的启动参数。

1.需要在Ryu顶级目录下的flags.py文件中添加如下的代码:

CONF.register_cli_opts([

# k_shortest_forwarding

cfg.IntOpt('k-paths', default=1, help='number for k shortest paths'),

cfg.StrOpt('weight', default='hop',

help='type of computing shortest path.')])

2.还需要重新安装Ryu:进入到ryu/的根目录,运行setup.py文件,并添加install参数。

sudo python setup.py install

3.重新安装完成之后,启动shortest_forwarding应用,并添加observe-links,链路权重和最短路径条数等重要参数,示例如下:

ryu-manager ryu/app/network_awareness/shortest_forwarding --observe-links --k-paths=2 --weight=bw

4.启动Ryu之后,启动任意的SDN网络,如Mininet模拟的网络,并连接到Ryu控制器。最后可以在Mininet输入框中输入pingall进行测试。

sudo mn --controller=remote --topo=tree,3,3 --mac

参考文献

1.基于SDN的网络状态测量. Muzixing.

2.Ryu:网络时延探测应用. Muzixing.

3.ryu实例---网络时延探测. ryu实例---网络时延探测_楊木木8023的博客-CSDN博客_ryu测量时延.

4.基于跳数,时延,带宽的最短/优路径和负载均衡. 基于跳数,时延,带宽的最短/优路径和负载均衡_「已注销」的博客-CSDN博客_最短路径负载均衡.

5.ryu实例---基于跳数的最短路径转发. ryu实例---基于跳数的最短路径转发_楊木木8023的博客-CSDN博客_ryu最短路径

6.ryu实例---基于链路质量(时延)的最短路径转发. ryu实例---基于链路质量(时延)的最短路径转发_楊木木8023的博客-CSDN博客_ryu最短路径.

  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
网络性能测试工具是用于评估网络连接质量和性能指标的软件工具。它们可以帮助用户检测带宽时延、丢包率等网络性能指标,从而对网络连接的质量进行评估。 带宽是指单位时间内网络传输的数据量,通常以Mbps或Gbps为单位。带宽测试工具可以通过向服务器发送数据并计算传输时间来测量带宽。这个工具会发送不同大小的数据包,以便用户能够确定网络的最大传输能力。 时延是指数据包从发送端到接收端所需的时间。时延测试工具通过向服务器发送一些数据包并测量它们的往返时间来测量时延时延测试工具可以帮助用户确定网络的响应速度。 除了带宽时延网络性能测试工具还可以提供关于丢包率、抖动等其他性能指标的信息。丢包率是指在传输过程中丢失的数据包的比例。抖动是指数据包在传输过程中的延迟变化的情况。 CSDN是一家面向IT技术人员的社区平台,提供大量的技术文章、博客和资源。在CSDN上,用户可以找到网络性能测试工具的评测和使用方法等相关信息。用户可以在CSDN上找到一些常用的网络性能测试工具,如iperf、PingPlotter等,并了解它们的功能和使用方式。 总之,网络性能测试工具是帮助用户评估网络连接质量和性能指标的重要工具。通过使用这些工具,用户可以了解网络带宽时延、丢包率等性能指标,并根据这些信息来调整网络配置和优化网络连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值