首页 > 代码库 > mininet and ovs 总结

mininet and ovs 总结

ryu控制器安装在arch linux的什么目录?

/usr/lib/python3.6/site-packages/ryu/

 

如何显示mininetCLI的帮助命令?

mininet> help

 

 

如何显示mininet的结点?

mininet> nodes

 

 

如何显示mininet的连接?

mininet> net

mininet>links

 

如何在某一个虚拟中段中建立一个简单的HTTP服务器,并且从另外一个终端中对它进行访问?

mininet> h1 python -m SimpleHTTPServer 80 &

mininet> h2 wget -O -h1

...

mininet> h1 kill %python

 

 

如何运行一个递归的测试?

sudo mn --test pingpair (测试)

sudo mn --test iperf (测试带宽)

 

如何梗概网络的拓扑和类型?

sudo mn --test pingall --topo single,3
sudo mn --test pingall --topo linear,4

 

 

如何设置连接的属性,包括贷款和延迟?

sudo mn --link tc,bw=10,delay=10ms

 

 

如何设置调试模式?

sudo mn -v debug

 

 

如何自定义一个拓扑,请附上相关的python文件写法?

应用的语句如下:

sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall

 

相应的脚本如下:

topo-2sw-2host.py:

"""Custom topology example

Two directly connected switches plus a host for each switch:

host --- switch --- switch --- host

Adding the ‘topos‘ dict with a key/value pair to generate our newly defined
topology enables one to pass in ‘--topo=mytopo‘ from the command line.
"""

from mininet.topo import Topo

class MyTopo( Topo ):
"Simple topology example."

def __init__( self ):
"Create custom topo."

# Initialize topology
Topo.__init__( self )

# Add hosts and switches
leftHost = self.addHost( h1 )
rightHost = self.addHost( h2 )
leftSwitch = self.addSwitch( s3 )
rightSwitch = self.addSwitch( s4 )

# Add links
self.addLink( leftHost, leftSwitch )
self.addLink( leftSwitch, rightSwitch )
self.addLink( rightSwitch, rightHost )


topos = { mytopo: ( lambda: MyTopo() ) }

 

如何改变相应的mac地址?

sudo mn --mac

 

如何直接打开终端?

sudo mn -x

 

 

如何使用dpctl来查看某个交换机的流表?

dpctl dump-flows的格式如下:

[-m | --more] dump-flows [dp] [filter=filter]

mininet?

 

如何使用其他类型的交换机?

sudo mn --switch ovsk --test iperf

 

 

如何设置所有东西都有它各自的命名空间?

sudo mn --innamespace --switch user

 

 

如何设置链接的属性?比如说打开和关闭。

mininet> link s1 h1 down
mininet> link s1 h1 up

 

 

如何显示某个网络内的主机?

mininet> xterm h1 h2

 

 

如何设置远程的控制器?

$ sudo mn --controller=remote,ip=[controller IP],port=[controller listening port]
sudo mn --controller=remote,ip=192.168.1.150,port=6633

 

 

如何使用其他的OpenFlow协议?

--switch ovsk,protocols=OpenFlow13

 

 


 

参考网页:

http://fishcried.com/2016-02-09/openvswitch-ops-guide/

要想很好理解OVS的操作,必须要理解基本的概念:

Packet

网络转发的最小数据单元,每个包都来自某个端口,最终会被发往一个或多个目标端口,转发数据包的过程就是网络的唯一功能。

Bridge

OpenvSwitch中的网桥对应物理交换机,其功能是根据一定流规则,把从端口收到的数据包转发到另一个或多个端口。

Port

端口是收发数据包的单元。OpenvSwitch中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去.主要有

类型说明
Normal 用户可以把操作系统中的网卡绑定到ovs上,ovs会生成一个普通端口处理这块网卡进出的数据包。
Internal 端口类型为internal时,ovs会创建一块虚拟网卡,端口收到的所有数据包都会交给该网卡,发出的包会通过该端口交给ovs。当ovs创建一个新网桥时,默认会创建一个与网桥同名的Internal Port.
Patch 当机器中有多个ovs网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。
Tunnel 隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。

Interface

接口是ovs与外部交换数据包的组件。一个接口就是操作系统的一块网卡,这块网卡可能是ovs生成的虚拟网卡,也可能是物理网卡挂载在ovs上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在ovs上。

FlowTable

流定义了端口之间数据包的交换规则.下面会对FlowTable做了详细的说明.

 

OVS命令的结构:

技术分享

ovs-dpctl datapath控制器,可以创建删除DP,控制DP中的FlowTables,最常使用show命令,其他很少手动操作
ovs-ofctl 流表控制器,控制bridge上的流表,查看端口统计信息等
ovsdb-tool 专门管理ovsdb的client
ovs-vsctl 最常用的命令,通过操作ovsdb去管理相关的bridge,ports什么的
ovs-appctl 这个可以直接与openvswitch daemon进行交互,上图中没有列出来,这么命令较少使用

 

 对下面这些命令的一个简要记录:

  • ovs-dpctl show -s
  • ovs-ofctl show, dump-ports, dump-flows, add-flow, mod-flows, del-flows
  • ovsdb-tools show-log -m
  • ovs-vsctl
    • show 显示数据库内容
    • 关于桥的操作 add-br, list-br, del-br, br-exists.
    • 关于port的操作 list-ports, add-port, del-port, add-bond, port-to-br.
    • 关于interface的操作 list-ifaces, iface-to-br
    • ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value], 常见的表有bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow.
  • ovs-appctl list-commands, fdb/show, qos/show

 

如何显示bridge,显示它与Port等概念的关系?

# ovs-vsctl show

 

如何查看有哪些Bridge,哪些ports,哪些interface?

root@l-network-1:~# ovs-vsctl list-br
br-ex
br-int
br-tun

root@l-network-1:~# ovs-vsctl list-ports br-tun
patch-int
vxlan-ac1c0509
vxlan-ac1c050d
vxlan-ac1c051c
vxlan-ac1c053f

root@l-network-1:~# ovs-vsctl list-ifaces br-tun
patch-int
vxlan-ac1c0509
vxlan-ac1c050d
vxlan-ac1c051c
vxlan-ac1c053f
# iface与ports同名.

 

如何查看哪个port,interface属于哪个bridge?

root@l-network-1:~# ovs-vsctl port-to-br vxlan-ac1c0509
br-tun
root@l-network-1:~# ovs-vsctl iface-to-br vxlan-ac1c0509
br-tun

 

如何查看某个Bridge的流表,如果不是默认的of协议,那么如何显示?

root@l-network-1:# ovs-ofctl dump-flows br-ex
sudo ovs-ofctl -O Openflow13 dump-flows <switch>

 

如何显示某个Bridge的流表?

# ovs-ofctl show br-ex

 

如何显示隐藏流表规则?

# ovs-appctl bridge/dump-flows br-ex

 

如何查看datapath的统计规则?

# ovs-dpctl show
# ovs-dpctl show -s
## 查看某个端口的统计信息ovs-ofctl dump-ports br [port]
# ovs-ofctl dump-ports br-ex 1

 

如何查看转发表?

# ovs-appctl fdb/show br-ex

 

 

OVS的相关设置

设置sFlow,相关网页:

http://docs.openvswitch.org/en/latest/howto/sflow/

http://www.sdnlab.com/3760.html

sudo ovs-vsctl -- --id=@sflow_1 create sflow agent=s4 target=\"10.0.0.2:6343\"  \
header=128 sampling=64 polling=10 -- set bridge s4 sflow=@sflow_1

 

如何设置qos?

参考网页:

http://docs.openvswitch.org/en/latest/howto/qos/

http://fishcried.com/2016-02-09/openvswitch-ops-guide/

ovs-vsctl set Interface tap0 ingress_policing_rate=100000
ovs-vsctl set Intervace tap ingress_policing_burst=10000
ovs-appctl qos/show <iface>

 

 如何查看流规则的匹配?

watch -d -n 1 "sudo ovs-ofctl dump-flows <bridge>"

 

如何使用tcpdump抓包?

需要设置端口的镜像。

ip link add name snooper0 type dummy
ip link set dev snooper0 up
ovs-vsctl add-port br-int snooper0

# ovs-vsctl -- set Bridge br-int mirrors=@m  -- --id=@snooper0   get Port snooper0  -- --id=@patch-tun get Port patch-tun   -- --id=@m create Mirror name=mymirror select-dst-port=@patch-tun   select-src-port=@patch-tun output-port=@snooper0 select_all=1

tcpdump -i snooper0

ovs-vsctl clear Bridge br-int mirrors
ovs-vsctl del-port br-int snooper0
ip link delete dev snooper0

 

如何查看OVS的日志?

# cat /var/log/openvswitch/*.log

# ovsdb-tool show-log -m

 

如何发送某个包去测试匹配?

# ovs-appctl ofproto/trace br-ex in_port=10,dl_src=http://www.mamicode.com/66:4e:cc:ae:4d:20,dl_dst=46:54:8a:95:dd:f8 -generate
Bridge: br-ex

 

 


 

变更记录:

变更说明变更人时间
整理mininet笔记和部分OVS记录 andrew 2016-04-18
整理fishcired的笔记的OVS部分,添加到我自己的OVS部分 andrew 2016-05-12
     

mininet and ovs 总结