我是怎么丢掉饭碗的

2016-07-26 by muzi

我出门名门,骨骼精奇,身怀绝迹,独步武林多年,凭着祖传的无影手和行走江湖多年练就的一套安检基本法,我房霍强当上了桃花镇的城门护卫队的队长,也算不负家族期望。

桃花镇自古以来就是兵家必争之地,又有许多桃花盛开,所以也是一个远近闻名的旅游胜地。为保证桃花镇的安全,又要保证桃花镇的游客流量,我房某人必须要快速地做好安检工作。多亏我祖传的无影手绝技和总结的安检基本法,我才能应对每天如此多的人流。

身居要位的我身价自然不会太低,多少也要个20W年薪吧。我要价高也是有道理的,自古以来,能做安检工作的都是像我这样骨骼精奇又身怀绝学的人,软硬实力俱佳啊。先说软实力,我行走江湖十余载,见过采花、毛贼、刺客少说上百,多了上千,早已掌握了一套基本法,练就了一副火眼金睛,一眼就能看出蹊跷。只要学会了这套安检基本法,就可以做到像我这样的火眼金睛。硬实力上,与普通骨架的人不同,我们家族的人骨骼精奇,手速极快,有无影手之称。无影手是我们家族的祖传技能,到我已经19代有余。即使软件方面其他人可以做到,但是别人做不到我的速度,所以我身价才这么高。

事业成功不算什么,我房霍强还是和镇长女儿慕容翠花定了亲的男人,那可是要迎娶白富美的节奏。

我的工作内容无非就是禁止一些黑名单上的人进城,限制人流等等,早已轻车熟路。我还可以防止DoS恶意攻击。比如有时会有同一拨人在不断假装去桃花庙上香 ...

read more

基于跳数\时延\带宽的最短/优路径和负载均衡

2016-07-08 by muzi

对于SDN初学者而言,最短路径转发应用和负载均衡应用是最常见,也是最适合学习的经典应用。根据链路权重参数的不同,主要有基于跳数、时延和带宽的几种最短\最优路径转发应用。根据链路可用带宽实现的最优路径转发本质上也是一种网络流量负载均衡的简单实现。本文将介绍笔者在学习过程中开发的网络感知模块以及基于跳数、时延和带宽三种最优路径转发应用。

基于跳数的最短路径转发

基于跳数的最短路径转发是最简单的最优路径转发应用。我们通过network_awareness应用来实现网络拓扑资源的感知并计算最短路径。首先控制器通过下发LLDP报文来获取网络链路信息,然后再利用网络信息,生成网络拓扑图。网络感知应用使用networkx的有向图数据结构存储拓扑信息,使用networkx提供的shortest_simple_paths函数来计算最短路径。shortest_simple_paths函数支持在图上找出源交换机到目的交换机的K条最短路径,其函数参数信息如下:

shortest_simple_paths(G, source, target, weight=None)

在给定图G,源交换机source,目的交换机target以及链路权重类型weight的情况下,会返回一个路径生成器。通过K次调用生成器可以生成K条最短路径。

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

基于时延的最优路径转发

基于时延的最优路径转发应用原理和基于跳数的最短路径转发应用类似,只是链路权重类型变成了时延。关于计算链路时延的原理,读者可以阅读Ryu:网络时延探测应用Network_Delay_Detector是一个网络时延探测应用,其在获取到链路时延之后,将时延数据存储到Networkx的图数据结构中 ...

read more

SDN最新研究进展

2016-06-28 by muzi

自SDN出现以来,关于SDN的研究一直没有停止,只是不同的阶段关于SDN的研究的重点不同。比如最开始的时候,探讨最多的是SDN的可行性,以及如何将SDN应用到对应的网络场景中。本文是笔者在最近阅读2015年至今的若干SDN论文后总结的SDN最新研究进展,希望对读者提供一些帮助。

SDN/NFV

SDN和NFV都是当下网络界研究的热点,而如何将两者整合部署,也是研究的热点之一。设计SDN/NFV整合部署框架的研究是这个研究方向的主要研究切入点之一,比如参考文献[1]中就提出了一个SDN/NFV的整体架构。框架中的NFV协调器可以和云管理平台配合使用,SDN控制器也支持与云平台结合。由于此类方案是SDN与其他技术/框架的集合,本身没有太多创新性,论文中也仅仅介绍了其实现方案,所以此处不加赘述。

SDN/NFV结合还可以部署在很多场景,比如WiFi场景。OpenSDWN[2]就是一种软件定义的家庭/企业WiFi架构框架。 将SDN与其他技术结合并应用在特定网络场景是一种主要的研究方向之一。

流表优化

OpenFlow所支持的细粒度流管理是SDN最大的优势之一,但是细粒度的管理是需要付出代价的。为满足细粒度的管理,则需要更粒度的流表项。但是像OpenFlow协议这种细粒度的管理会带来一定的时延,对于时延敏感的短流业务而言,这个时延带来的影响是不可忽视的,这很可能会抵消了SDN带来的好处。所以如何通过流表来匹配流,从而减少流表项下发次数,是降低时延影响的有利手段。

此外,当网络流数目过多时,交换机的流表空间就无法满足需求。当流表满时 ...

read more

Ryu:网络时延探测应用

2016-05-24 by muzi

之前,笔者已经发布了网络感知应用和基于跳数的最短路径转发应用。本文将介绍笔者开发的网络时延探测应用。该应用通过LLDP数据包的时延和Echo数据包的时延计算得出链路的时延数据,从而实现网络链路时延的感知。详细原理和实现步骤将在文章中详细介绍。

测试原理

网络时延探测应用利用了Ryu自带的Switches模块的数据,获取到了LLDP数据发送时的时间戳,然后和收到的时间戳进行相减,得到了LLDP数据包从控制器下发到交换机A,然后从交换机A到交换机B,再上报给控制器的时延T1,示例见图1的蓝色箭头。同理反向的时延T2由绿色的箭头组成。此外,控制器到交换机的往返时延由一个蓝色箭头和一个绿色箭头组成,此部分时延由echo报文测试,分别为Ta,Tb。最后链路的前向后向平均时延T=(T1+T2-Ta-Tb)/2。

link delay
图1. 测量链路时延原理图

获取LLDP时延

获取T1和T2的逻辑一样,均需要使用到Switches模块的数据。计算LLDP时延的处理逻辑如下代码所示。首先从Packet_in中解析LLDP数据包,获得源DPID,源端口。然后根据发送端口的数据获取到portdata中的发送时间戳数据,并用当下的系统时间减去发送时间戳,得到时延,最后将其保存到graph数据中。

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def packet_in_handler(self, ev):
        msg = ev.msg
        try:
            src_dpid ...
read more

Ryu:如何在LLDP中添加自定义LLDPDU

2016-05-20 by muzi

在许多实验场景中,都需要使用链路发现协议(LLDP)来发现链路,从而构建网络拓扑。然而LLDP协议不仅仅可以用来发现拓扑,也可以用于时延检测等业务。LLDP通过添加对应的TLV格式的LLDPDU(LLDP数据单元)来携带对应的信息,从而为上层业务提供信息支撑。为实现LLDP数据单元的拓展,本文将以Ryu控制器为例,介绍如何添加自定义的LLDPDU,从而满足多种业务的需求。

添加自定义LLDPDU其实只需修改ryu/lib/packet/lldp.py即可,但是由于该文件仅定义了LLDP的相关类,如何使用还需要其他文件去调用,所以还需要其他的修改步骤。具体步骤将在文章后续介绍。

修改lldp.py文件

ryu/lib/packet/lldp.py文件是Ryu控制器中关于LLDP协议数据类的描述,其中定义了如LLDPBasicTLV类等重要的报文类。 以添加发送时间戳的TLV为例,我们需要完成TLV类型号的声明,以及TLV类的定义。

在文件开头处有关于LLDP TLV类型的声明,所以首先我们需要添加一个新的类型:LLDP_TLV_SEND_TIME,其类型号为11。

    # LLDP TLV type
    LLDP_TLV_END = 0                        # End of LLDPDU
    LLDP_TLV_CHASSIS_ID = 1 ...
read more