1.确定openvswitch模块加载
#lsmod |grep oepnvswitch
#/sbin/modprobe openvswitch

2.启动配置:
1)默认配置
rm -f /usr/local/etc/openvswitch/conf.db
ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema

ovsdb-server -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --log-file --pidfile --detach

ovs-vswitchd --log-file --pidfile --detach

注:-vINFO”表示日志级别,共有emer、err、warn、info、dbg ;-v默认不带是dbg级别。

2)自定义路径
rm /etc/openvswitch/*.db
ovsdb-tool create /etc/openvswitch/ovs.db /usr/local/share/openvswitch/vswitch.ovsschema
ovsdb-tool create /etc/openvswitch/vtep.db /usr/local/share/openvswitch/vtep.ovsschema

ovsdb-server --pidfile --detach --log-file --remote punix:/usr/local/var/run/openvswitch/db.sock --remote=db:hardware_vtep,Global,managers --remote ptcp:9999 /etc/openvswitch/ovs.db /etc/openvswitch/vtep.db

ovs-vswitchd --log-file --detach --pidfile unix:/usr/local/var/run/openvswitch/db.sock

LOG: /usr/local/var/log/openvswitch/ovsdb-server.log

3.操作配置
ovs-vsctl add-br br0
ovs-vsctl set-controller br0 tcp:172.16.26.136:6653

通过ovs 创建一个br0,  端口tap0 ,tap1,tap2对应 值为100, 101,102;创建虚拟网络空间ns0,ns1,ns2,创建虚拟网卡veth0,veth1, veth2,对应ip地址为192.168.1.100,192.168.1.101,192.168.1.102;tap0-veth0,tap1-veth1,tap2-veth2桥接。

1.创建虚拟交换机

#ovs-vsctl add-br br0

2.创建网络空间ns0, 虚拟网卡veth0 和 peer tap0

#ip netns add ns0

#ip link add veth0 type veth peer name tap0

#ip link set veth0 netns ns0

#ip netns exec ns0 ip link set dev veth0 up

#ip netns exec ns0 ip addr add 192.168.1.100/24 dev veth0

#ip link set dev tap0 up

#ovs-vsctl add-port br0 tap0

#ovs-vsctl set Interface tap0 ofport_request=100

3.创建网络空间ns1 虚拟网卡veth1 和 peer tap1

ip netns add ns1

#ip link add veth1 type veth peer name tap1

#ip link set veth1 netns ns1

#ip netns exec ns1 ip link set dev veth1 up

#ip netns exec ns1 ip addr add 192.168.1.101/24 dev veth1

#ip link set dev tap1 up

#ovs-vsctl add-port br0 tap1

#ovs-vsctl set Interface tap1 ofport_request=101

4.创建网络空间ns2 虚拟网卡veth1 和 peer tap2

#ip netns add ns2

#ip link add veth2 type veth peer name tap2

#ip link set veth2 netns ns2

#ip netns exec ns2 ip link set dev veth2 up

#ip netns exec ns2 ip addr add 192.168.1.102/24 dev veth2

#ip link set dev tap2 up

#ovs-vsctl add-port br0 tap2

#ovs-vsctl set Interface tap2 ofport_request=102

5.查看流表

#root@ubuntu:~# ovs-ofctl dump-flows br0

NXST_FLOW reply (xid=0x4):

cookie=0x0, duration=3230.736s, table=0, n_packets=0, n_bytes=0, idle_age=3230, priority=3,dl_dst=00:00:00:00:00:00 actions=drop

cookie=0x9, duration=3230.696s, table=0, n_packets=0, n_bytes=0, idle_age=3230, priority=65535,ip,nw_proto=2 actions=CONTROLLER:65535

cookie=0x0, duration=3230.815s, table=0, n_packets=182, n_bytes=15421, idle_age=1659, priority=0 actions=drop

cookie=0x0, duration=3230.696s, table=0, n_packets=0, n_bytes=0, idle_age=3230, priority=3,dl_src=00:00:00:00:00:00 actions=drop

cookie=0x0, duration=3230.696s, table=0, n_packets=0, n_bytes=0, idle_age=3230, priority=3,dl_src=ff:ff:ff:ff:ff:ff actions=drop

cookie=0x0, duration=3230.777s, table=1, n_packets=181, n_bytes=15379, idle_age=1659, priority=0 actions=drop

cookie=0x0, duration=3230.776s, table=2, n_packets=181, n_bytes=15379, idle_age=1659, priority=0 actions=drop

cookie=0x0, duration=3230.776s, table=3, n_packets=27, n_bytes=1439, idle_age=1659, priority=0 actions=CONTROLLER:65535

6.测试连通性

终端1执行#ip netns exec ns0 ping 192.168.1.101

终端2执行# ip netns exec ns1 tcpdump –i veth1    终端2会显示 veth0 – veth2的icmp交互信息

7.添加流表,修改来自port100 的源地址为222.222.137.1

#ovs-ofctl add-flow br0 "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:222.222.137.1,normal"

执行第6的测试 显示

root@ubuntu:~# ip netns exec ns1 tcpdump -i veth1 -v

tcpdump: listening on veth1, link-type EN10MB (Ethernet), capture size 65535 bytes

^C01:54:49.822143 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff6f:c5b8: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::ac78:4bff:fe6f:c5b8

01:54:49.994149 IP (tos 0x0, ttl 64, id 12026, offset 0, flags [DF], proto ICMP (1), length 84)

222.222.137.1 > 192.168.1.101: ICMP echo request, id 21405, seq 244, length 64

8.删除 port 100上所有流表

#ovs-ofctl del-flows ovs-switch "in_port=100"

9.测试IP匹配流表, 将192.168.1.100  ping 192.168.101的报文 转到port 102 (192.168.1.102)

#ovs-ofctl add-flow br0 "priority=111 idle_timeout=0,dl_type=0x0800,nw_src=192.168.1.100,nw_dst=192.168.1.101,actions=output:102"

root@ubuntu:/home/chulk/sdn/openmul# ip netns exec ns2 tcpdump -i veth2 icmp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on veth2, link-type EN10MB (Ethernet), capture size 65535 bytes

^C01:21:05.933940 IP 192.168.1.100 > 192.168.1.101: ICMP echo request, id 43886, seq 32, length 64

01:21:08.934038 IP 192.168.1.100 > 192.168.1.101: ICMP echo request, id 43886, seq 35, length 64

测试tcp 数据匹配

终端 1执行ip netns exec ns2 tcpdump -i veth2 icmp

终端2执行#ip netns exec ns1 nc -lp 1234 > test.log      //服务端 192.168.1.101:1234

终端3执行#ip netns exec ns0 nc -w 1 192.168.1.101 1234 < test.log //veth0 tcp连接veth1

注:Test.log为测试文件,用来测试veth0 veth1直接文件传输,相当于远程拷贝,其他参考:http://blog.csdn.net/wang7dao/article/details/7684998;也可以用netperf测试。

终端1会显示TCP会话报文,只有SYN请求, 因为连接的报文本应该去101,但是被流表导向了102,所以导致没有ack响应报文。

root@ubuntu:~# ip netns exec ns2 tcpdump -i veth2

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on veth2, link-type EN10MB (Ethernet), capture size 65535 bytes

01:42:43.809629 IP 192.168.1.100.38815 > 192.168.1.101.1234: Flags [S], seq 2964554190, win 29200, options [mss 1460,sackOK,TS val 65016423 ecr 0,nop,wscale 7], length 0

01:42:44.632833 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 3a:e4:96:ae:57:9f (oui Unknown), length 300

01:42:44.806696 IP 192.168.1.100.38815 > 192.168.1.101.1234: Flags [S], seq 2964554190, win 29200, options [mss 1460,sackOK,TS val 65016673 ecr 0,nop,wscale 7], length 0

10.IP+PORT流表

#ovs-ofctl add-flow br0 "priority=111 idle_timeout=0,dl_type=0x0800,nw_src=192.168.1.100,nw_dst=192.168.1.101,nw_proto=6,tp_dst=1234,actions=output:102"  //按照9的测试,修改这个tp_dst=1234将不会获取到tcp的SYN报文(上面红色字体部分) 每次测试仅仅是当前流表,其他冲突流表已删

测试FlowTable的更多相关文章

  1. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  2. Apache Ignite之集群应用测试

    集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...

  3. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  4. TechEmpower 13轮测试中的ASP.NET Core性能测试

    应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...

  5. .NET Core系列 :4 测试

    2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...

  6. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  7. 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()

    1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...

  8. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

  9. CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]

    上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...

随机推荐

  1. matlab中boxplot字体大小设置

    网上找到的:set(findobj(gca,'Type','text'),'FontSize',18) boxplot() uses the default axes labeling for the ...

  2. Node.js笔记07——不使用generator自定义一个项目,深入了解项目结构

    一.初始化项目 新建项目 git init manager 新建view文件夹,建几个静态文件夹 新建app.js 快速初始化项目依赖 npm init -y 安装express npm instal ...

  3. ASP.NET Core 2.0中如何更改Http请求的maxAllowedContentLength最大值

    Web.config中的maxAllowedContentLength这个属性可以用来设置Http的Post类型请求可以提交的最大数据量,超过这个数据量的Http请求ASP.NET Core会拒绝并报 ...

  4. MySql第几行到第几行语句

    1.查询第一行记录: select * from table limit 1 2.查询第n行到第m行记录 select * from table1 limit n-1,m-n; SELECT * FR ...

  5. 轻量ORM-SqlRepoEx (七)AspNetCore应用

    ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...

  6. Oracle作业5——多表查询、子查询

    一.基础练习: 1.查询和scott相同部门的员工姓名ename和雇用日期hiredate SELECT ENAME,HIREDATE FROM EMP WHERE DEPTNO=(SELECT DE ...

  7. 在mac下运行 npm run eject 出现报错问题解决方法

    当使用create-react-app创建项目后,接着运行npm run eject时,如果出现下面的错误 可能是脚手架添加了.gitignore这个文件,但是没有本地仓库,可以使用以下代码解决这个问 ...

  8. mui的openWindowWithTitle()参数及说明

    mui.openWindowWithTitle({ url: 'xxx.html', //String类型,要打开的界面的地址 id: 'id', //String类型,要打开的界面的id style ...

  9. 如何优雅的使用C语言绘制一只小猪佩奇

    今天我们来用C语言画一只小猪佩奇---社会.社会....在画小猪佩奇之前,我们先使用带符号的距离长 (signed distance field,SDF) 来画一个圆形. 使用这个方法表示形状,但是这 ...

  10. WSO2 API Manager 替换mysql作为数据库,解决AuthorizationUtils Could not set authorizations for the root问题

    按照wso2官网(https://docs.wso2.com/display/ADMIN44x/Changing+to+MySQL)配置AM的数据库,想从H2换成Mysql5.7,费了将近一天的时间, ...