openvswitch流表应用实战(代码片段)

Learnbydoing! Learnbydoing!     2022-11-12     227

关键词:

写在前面


本随笔参考

  • 学会了如何下发流表及删除流表的操作。
  • 第一个不用脚本的实验。

实验原理


  • 在SDN环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包发送给控制器,由控制器决策数据包如何处理。
  • 控制器下发决策后,交换机根据控制器下发的信息来进行数据包的处理,即转发或者丢弃该数据包。我们可以通过对流表操作来控制交换机的转发行为。

实验任务


  • Mininet创建一个默认树形拓扑。
  • 选择Mininet的控制器指定为ODL,进行基本的添加、删除流表操作,使网络实现网络通信和不通信。
  • 拓扑如下所示:

实验步骤


Opendaylight控制器

  • 打开一个终端,输入ifconfig,查看ODL所在IP为127.0.0.1(环回IP)。
  • 进入bin目录下,运行karaf文件。

Mininet创建topo

  • sudo su进入管态。
  • 输入命令mn --controller=remote,ip=127.0.0.1,port=6633

  • Mininet或默认创建一个交换机下挂两台主机的topo。

流表的简单操作

  • 输入sh ovs-ofctl dump-flows s1,查看s1中的流表项。

  • 输入pingall查看主机之间连通性。

  • 这时我们再查看s1中的流表项时,会发现多出两条由Controller下发的流表项。
  • Controller学习了h1h2的MAC地址后下发的流表。

我们看到每条流规则由一系列字段组成,它们由基本字段、条件字段和动作字段三部分组成。有了流表后交换机就根据流表来进行数据包的操作,当然我们也可以人工的进行流表的新增、修改、删除操作,在我们这个环境下可直接在终端下输入命令。

添加删除流表项

  • 我们想让h1,h2之间ping不通,只需要让交换机把从2号端口发来的数据包全部丢弃即可,1端口也可以。
  • h1即使把ICMP包发过去,h2回应的ICMP包也过不来。
  • h2h1发送ICMP包根本发不过去。
  • 下发一条流表实现上述功能:
sh ovs-ofctl add-flow s1 priority=12,in_port=2,actions=drop
  • 注意:这条流表项的优先级要高于原来流表项的优先级10
  • 增加这条流表以后,h1h2主机之间无法通信了。

  • 输入sh ovs-ofctl dump-flows s1,查看s1中的流表项。

  • 再删除一条流规则:如将删除条件字段中包含in_port=2的所有流表,如下图所示,将含有in_port=2的所有流表被删除了。
sh ovs-ofctl del-flows s1 in_port=2
  • 因为之前添加的丢弃2号端口包的流表已被删除,这时h1h2又可以正常通信了。

  • 输入sh ovs-ofctl dump-flows s1,查看s1中的流表项。

实验小结


主要是对OpenFlow流表有更进一步的了解,简略介绍一些基本的流表操作。在此基础上可以进行比如改写源和目地主机的ip和mac地址、对数据包泛洪、回环等操作,用户可以根据需求通过修改流表来自主地控制转发行为,这本身也是SDN的初衷之一,也使得我们控制网络更加的便捷、灵活、多样。

追踪openvswitch对特定数据报文的流表匹配与处理结果的实例(代码片段)

 https://blog.51cto.com/smoke520/2314922SDN环境中,每一个openvswitch的datapath实例中都会有大量的流表项,无论是使用各种关键字的grep手段或者是其他方法来确认是否由控制器下发了预期正确流表项,还是看关于特定数据包的匹配与最... 查看详情

openvswitch原理与代码分析:内核中的流表flowtable操作

?当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表FlowTable在内核中有一份,通过key查找内核中的flowtable,即可以得到action,然后执行action之后,直接发送这个包,只有在内核无法查找到流表项的时候,才会到用户... 查看详情

openvswitch原理与代码分析:用户态流表flowtable的操作

当内核无法查找到流表项的时候,则会通过upcall来调用用户态ovs-vswtichd中的flowtable。会调用ofproto-dpif-upcall.c中的udpif_upcall_handler函数。 static void*udpif_upcall_handler(void*arg){????structhandler*handler=arg;????structu 查看详情

openvswitch原理与代码分析:添加一条流表flow

添加一个flow,调用的命令为ovs-ofctladd-flowhello"hard_timeout=0idle_timeout=0priority=1table=21pkt_mark=0x55tun_id=0x55actions=mod_nw_dst:192.168.56.101,output:2"这里调用的是调用ovs/utilities/ovs-ofctl.c的命令行工具这个命令行工具支持的 查看详情

openvswitch(ovs)源代码分析之工作流程(数据包处理)

...数据包的收发,这篇开始着手分析数据包的处理问题。在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一、根据skb数据包提取相关信息封装成key值;第二、根据提取到key值和skb数据包进行流表的匹配;第... 查看详情

ovs中的key解析(代码片段)

...,看看对于一条流会提出那些特征信息。对于key的描述在openvswitch源码中的flow.h文件中。structsw_flow_keyu8tun_opts[255];u8tun_opts_len;structip_tunnel_keytu 查看详情

实验3openvswitch实验

...用Mininet基于python的脚本,调用“ovs-vsctl”命令直接控制OpenvSwitch。使用默认的交换机泛洪规则,设置更高的优先级规则进行预先定义IP报文的转发。在多个交换机中通过设置不同TOS值的数据包将通过不同的方式到达目的地址,验... 查看详情

小电流/高阻抗测量(代码片段)

  电流表是用于测量电流设备,读数为安培(amperes)。存在两种电流表结构:分流(shunt)型电流表和反馈(feedback)型电流表。1、分流型与反馈型电流表  分流型电流表是常用的形式,应... 查看详情

openvswitch的gre隧道(代码片段)

  此实验为sdnlab上OpenvSwitch系列实验。 一、实验目的了解GRE协议及原理理解OpenvSwitch如何配置GRE隧道  二、实验原理    OpenvSwitch创建GRE原理很简单,就是把对GRE头和外部IP头的一些操作从原来的代码中抽象出来,... 查看详情

ryu--北向接口(流表的操作以及多控制器流表信息互通)(代码片段)

...之间的相互通信(2)实现各个自治域的控制器的流表获取(各个控制器的流表信息互通)(3)实现应用层对控制器的控制,进而实现对整个网络的控制大致的实现效果如下: 实验原理:利用mininet进行拓... 查看详情

ryu--北向接口(流表的操作以及多控制器流表信息互通)(代码片段)

...之间的相互通信(2)实现各个自治域的控制器的流表获取(各个控制器的流表信息互通)(3)实现应用层对控制器的控制,进而实现对整个网络的控制大致的实现效果如下: 实验原理:利用mininet进行拓... 查看详情

[ovs]openvswitch从源码编译安装(代码片段)

文档:https://docs.openvswitch.org/en/latest/intro/install/general/ 1. yuminstallautoconfautomakelibtool2../boot.sh3../configure4. yuminstallkernel-devel  查看详情

centos7安装openvswitch(代码片段)

Centos7安装openvswitch1.安装依赖包:yum-yinstallmakegccopenssl-develautoconfautomakerpm-buildredhat-rpm-configyum-yinstallpython-developenssl-develkernel-develkernel-debug-devellibtoolwget2.预处理: 查看详情

openvswitch的vxlan隧道网络实验(代码片段)

实验参考OpenvSwitch的VxLAN隧道网络实验实验步骤1预先配置登录两台Mininet虚拟机或者是已安装OpenvSwitch的虚拟机。查看两台虚拟机IP#ifconfig验证OvS服务是否被启动好:#ps–ef|grepovsOvS已启动。步骤1:分别在两台机器上创建网桥:#s... 查看详情

openvswitch的gre隧道实验网络(代码片段)

实验参考OpenvSwitch的GRE隧道实验网络实验步骤:1.配置VM1(1)OpenvSwitch服务验证验证虚拟机VM1的OvS服务是否被启动好:#ps-ef|grepovs   2.在VM1中创建两个bridge:#ovs-vsctladd-brbr0#ovs-vsctladd-brbr1 3.配置br0:#ifconfigeth00up#ifconfigbr020... 查看详情

openvswitch编译及升级(代码片段)

https://chengqian90.com/Openvswitch/Openvswitch-%E7%BC%96%E8%AF%91%E5%8F%8A%E5%8D%87%E7%BA%A7.html 编译安装参照官网,也查了些资料,编译期间出现些问题,先将正确的流程及问题解决方法记录如下。Kernel版本为3.10.0-693.11.1.el7.x86_64。内核与ovs关... 查看详情

openvswitch+vxlan网络(代码片段)

规划网络部署节点为一个controller节点,一个compute节点。controller节点有3个网卡,分别为eth0(管理和API网络,192.168.10.0/24)、eth1(租户网络,10.10.10.0/24)、eth2(外部网络,192.168.100.0/24,不设置IP);compute节点有2个网卡,分别为eth0(管理... 查看详情

利用openvswitch对广播报文限速

参考技术ACentOS7(1511)Docker(1.11.2)OpenVswitch(2.4.0-1)Iperf(2.0.8-2)3.1创建容器3.2创建虚拟网卡3.3创建ovs拓扑3.4构建容器NameSpace3.5ovs创建队列和流表由于没有测试广播风暴的工具,就以iperf测试单播为准4.1iperfserver4.2容器iperfClient... 查看详情