OpenFlow1.0数据结构图示

2013-12-20 by muzi

每一次查看协议都是看到代码定义,总感觉不够清晰,那么自己去画一遍数据结构能给你带来很大的帮助!

以下的图片是OpenFlow1.0的相关数据结构。希望能给你带来一点帮助。

也许还有一些没有花全。因为这个是我初学OpenFlow时候画的,若有错误,欢迎指正!

如果你觉得我的小站还不错,可以帮忙宣传宣传咯。创建初期,积攒人气!

read more

【原创】SDN控制器开发教程——打造属于你自己的控制器

2013-12-17 by muzi

前言

SDN(Software Defined Network)这些年越来越火。当我还是大三的小朋友的时候,我的学长带我走进了OpenFlow的世界。一年里,我慢慢学会了许多东西,研究过pox,写过mininet自定义拓扑,画过OpenFlow的数据结构,做过HTTP的流量引导,广播风暴解除等许多小东西。在SDN这条道路上越走越远,也希望有一天,我能在这个领域有所成就,做出一点自己的贡献。

暑假的时候开始来工信部电信研究院实习,开始跟着学长一起开发,后来学长去美帝了,我继续完成剩下的工作。为了实现demo,我们顺便写了一个小小的控制器,其本质很简单,也许简单到你都不屑一顾。但是这个过程,我们需要从底层通信开始搭建,一直到最后的上层应用,无论哪一个环节,都会涉及到。到最后你会发现,其实也许这个控制器并没有太大的用处,但是更多的是这个过程中你学到的知识,那是使用别人开发的控制器说不能得到的宝贵知识。


你能得到的

  • 底层通信:基于Tornado架构的socket通信的搭建
  • OpenFlow协议数据结构细节
  • 通信流程的事件处理
  • 若干网络协议的熟悉与掌握。
  • 最重要的,你自己从无到有,经历了一个开发过程,所有出现的你想到的想不到的问题,你都需要自己去解决。你会在解决问题的过程中收获太多太多你想不到的财富。
  • 自信!你可以大声对自己说 ...
read more

【原创】OpenFlow通信流程解读

2013-12-12 by muzi

前言

接触了这么久的SDN,OpenFlow协议前前后后也读过好多遍,但是一直没有时间总结一下自己的一些见解。现在有时间了,就写一写自己对OpenFlow协议通信流程的一些理解。

SDN中Switch和controller

在SDN中很重要的两个实体是Switch跟Controller。Controller在网络中相当于上帝,可以知道网络中所有的消息,可以给交换机下发指令。Switch就是一个实现Controller指令的实体,只不过这个交换机跟传统的交换机不一样,他的转发规则由流表指定,而流表由控制器发送。

switch组成与传统交换机的差异

switch组成

switch由一个Secure Channel和一个flow table组成,of1.3之后table变成多级流表,有256级。而of1.0中table只在table0中。

  • Secure Channel是与控制器通信的模块,switch和controller之间的连接时通过socket连接实现。
  • Flow table里面存放这数据的转发规则,是switch的交换转发模块。数据进入switch之后,在table中寻找对应的flow进行匹配,并执行相应的action,若无匹配的flow则产生packet_in(后面有讲)

of中sw与传统交换机的差异

  • 匹配层次高达4层,可以匹配到端口,而传统交换机只是2层的设备。
  • 运行of协议,实现许多路由器的功能,比如组播。
  • 求补充!!(如果你知道,请告诉我,非常感谢!)

OpenFlow的switch可以从以下方式获得

  • 实体of交换机,目前市场上有一些厂商已经制造出of交换机 ...
read more

【原创】SDN下的分布式广播风暴解决方案

2013-12-07 by muzi

前言

这是很久以前的成果了,那时候我才大三上。为了学习sdn,openflow等知识,北邮科研楼628的一群哥们儿,想着各种新奇的东西去解决已有的问题。

有一天,我们遇到了网络风暴,但是我们觉得STP有点复杂,而且,确实也不愿意去学。那么,就自己写一个解决方案吧。于是,下面的小代码产生了。

核心思想

其实特别简单,一句话:不让同一个数据包从第二个端口进入,即仅允许数据包从第一个进来的端口进入。

也就是说,我确保了,同一个数据包,不会从别的交换机从非第一次的in_port进入本交换机,那就不会有环路,也就解决了风暴,而且,同一个端口允许进入,不影响主机继续发送广播包。

具体实现

这个就需要我们建立一个macToport的表,在python里面数据结构字典来实现。使用src_mac作为key,记录值为[dstip,port,time]

self.macToPort = {srcMAC:[dst_ip,in_port,time]}

这个字典记录了用数据包的mac地址记录了数据包的目标ip,入口端口,到达时间三个信息,其实如果为了更好的对应,我们应该使用上xid,让 ...

read more

[原]poxdesk实现拓扑显示

2013-11-29 by muzi

POXDESK实现拓扑的显示

今天实习第二天,开始深入逐渐玩POX跟mininet!之前只是会基本的操作,慢慢的要更加了解!今天早上就实现了一下poxdesk的功能!

操作步骤如下:

git clone https://github.com/noxrepo/pox
cd pox
git checkout betta
cd ext
git clone https://github.com/MurphyMc/poxdesk
cd poxdesk
wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
unzip qooxdoo-2.0.2-sdk ...
read more