【原创】OpenFlow通信流程解读
前言
接触了这么久的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交换机 ...
【原创】SDN下的分布式广播风暴解决方案
前言
这是很久以前的成果了,那时候我才大三上。为了学习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【原创】mininet搭建自定义网络拓扑 by muzi
你知道的mininet
相信很多研究SDN的朋友都知道mininet,也是用过mininet。但是恐怕大多数人都只是局限于workthough的水平.链接:http://mininet.org/walkthrough/
搭建更多的,灵活的拓扑还是有一定的难度。
上一次实验的时候,看了一下spirent testceter的一套测试拓扑,从中受益,学了一点。现在写出来分享一下。
如果你想快速建立拓扑,请直接拉到最后一个标题
教你搭建你自己的任意拓扑
首先把需要用到的相关模块import进来。
/#!/usr/bin/python
import re
from mininet.cli import CLI
from mininet.log import setLogLevel, info,error
from mininet.net import Mininet
from mininet.link import Intf
from mininet ...
基于tornado的简单socket通信建立
配图版请查看:http://user.qzone.qq.com/350959853/blog/1375093527
安装tornado
这里有比较全的介绍,写得非常好。http://sebug.net/paper/books/tornado/
hello world
首先,下载安装好tornado之后,我们就可以去使用tornado里面的库了。 照着官网的简单的例子抄了一遍,写了一个hello world!
显示效果如下:
基于tornado的简单的socket连接通信实现
代码如下:
import errno
import functools
from tornado.ioloop import IOLoop
import socket
import time
import Queue
sock = socket.socket (socket.AF_INET,socket ...
N个整数,求其中任意N-1个数的乘积中的最大的一个(禁用除法)
刚才看程序员面试宝典的时候看到这个有趣的题目,也是google2007年的笔试题目。只能用乘法,不能用除法。
看了网上一些扯到不行算法之后,我决定把我自己的想法写一下,不一定对。
PS:好久没写C++,语法都忘了,跟python语法混乱了……哎。。
整个问题只会有一下3种情况
-
有两个0,最大必为0。
-
数组全非负,最好办,在没有两个及以上的0的情况下,把最小的剔除即可。
-
数组有正有负,有0,最困难。
具体代码如下:
//数组a[n]
//——————————————————————————————————————————————
int min1 = -65534,min2=65535,No,No_1,No_2 = 0,total=1,z_num=-1;//初始化参数;
for(int i=0,j=0;(i<n)||(j<1 ...