Open vSwitch系列之一 Open vSwitch诞生

Open vSwitch系列之二 安装指定版本ovs

Open vSwitch系列之三 ovs-vsctl命令使用

Open vSwitch系列之四 ovs-ofctl命令使用

Open vSwitch系列之五 网桥特性功能配置

Open vSwitch系列之六 vlan隔离

ovs-ovofctl 命令是对流表的操作,包括对流表的增,删,改,查等命令。简单来说流表类似于交换机的MAC地址表,路由器的路由表,是ovs交换机指挥流量转化的表。

说到流表就不得不说控制器。控制器是给交换机下发流表的设备,最常见的控制器是OpenDaylight,简称ODL,下面首先安装一个ODL控制器,看看控制器给交换机下发的原汁原味的流表是怎么样的。

一、安装 ODL控制器

1.安装java

apt install openjdk--jdk

2.配置环境

vim /etc/environment ,进入环境变量配置文件,在第二行加入java的环境变量。

JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"

3.下载ODL编译好的文件

wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.6.4-Carbon/distribution-karaf-0.6.4-Carbon.tar.gz

4.解压文件

tar zvxf distribution-karaf-0.6.-Carbon.tar.gz

5.配置文件

简单配置ODL的运行文件

 /etc/org.apache.karaf.management.cfg 

6.开启ODL控制器

7. 安装必要的插件。

全新的ODL只有核心插件,还需要web 页面,openflow支持等插件。

opendaylight-user@root>feature:install odl-restconf
opendaylight-user@root>feature:install odl-l2switch-switch-ui
opendaylight-user@root>feature:install odl-openflowplugin-flow-services-ui
opendaylight-user@root>feature:install odl-mdsal-apidocs
opendaylight-user@root>feature:install odl-dluxapps-applications
opendaylight-user@root>feature:install odl-faas-all

8.查看端口验证ODL是否启动成功

当ODL启动成功之后会监听在6633端口,监听交换机的连接。如果6633端口有监听,那就说明ODL启动是正常的

sudo netstat -anput | grep 

二、连接控制器   

这个命令是不是很熟悉呢?对的,这个命令就是上一篇 ovs-vsctl 命令 中最后一个命令,交换机连接控制器的命令。

 ovs-vsctl set-controller br-test tcp:127.0.0.1:

连接上控制器之后我们来看看有什么变化。在网桥br-test下多了一个controller设备信息,包括一个状态 is_connected:true,这个状态标志这连接成功,如果没有这个状态说明交换机并没正真的连接到控制器上。

当交换机连接上控制器之后,有没有好奇控制器会给交换机发送什么流表呢?发送的流表就是如下啦:

上面的命令是交换机查看流表的命令  ovs-ofctl dump-flows br-test ,这个命令和ovs-vsctl show 命令是使用频率最高的两个命令,一定要记住的。那么这两条流表是什么意思呢?我们逐个分析:

在分析之前简单介绍一个流表的组成,一个最简单的流表由3部分组成,分别是:匹配项  ,动作 ,计数器。

匹配项:用来匹配流量的特征,例如传统交换机能够根据mac地址转发,路由器能够根据ip地址转发。mac,ip都是流量的特征。

动作:动作是匹配项匹配到数据之后采取的动作,包括转发和丢弃这两个最常见的动作。

在OpenStack的ovs交换机中,流表是这样的:

可以看到in_port=1是一种匹配项,actions指明了转发动作。

对于以上两条流表来说转发动作分别是CONTROLLER:65535 转发给控制器,drop 丢弃流表。那么这两个动作是怎么执行呢?以上两个流表都没有匹配项就是说默认匹配进入的所有的流量。一个转发,一个丢弃,到底执行谁呢?这个根据优先级来选择,priority 是优先级,作用是优先级越高,流表越先执行。所有第一条:actions=CONTROLLER:65535 发挥效果。其实这也符合常识,交换机里没有流表,所以进入的流表都要交给控制器,让控制器去完成计算和流表下发。

三、手动下发流表

流表(低版本)可以匹配OSI模型的1层至4层,如下图所示,对匹配到的流表做转发、丢弃或者更复杂的操作。具体的匹配项如下图所示:

下发流表的命令,需要加上匹配项和动作,可以匹配到上面提到1~4层。

ovs-ofctl add-flow 

1.第一层:入端口

in_port 表示入端口,匹配到之后的actions是output:2, 意思是从2端口转发出去。

使用命令来查看刚刚下发的流表,可以在交换机中找到。

ovs-ofctl dump-flows br-test

2.第二层:匹配MAC地址

匹配mac地址的关键字是:

dl_src :源mac地址

dl_dst :目的mac地址

然后转发actions=output:2 从2端口转发出去

查看流表下发是否成功:

3.第三层:匹配IP地址

匹配网络层ip地址比匹配入端口和mac地址要复杂一些。因为网络层中除了IP协议外还有ICMP,IGMP等,所以需要指定匹配的是网络层中的哪一种协议。

匹配方式:

协议: dl_type=0x0800 或者 ip   表明是用于匹配哪一种协议

nw_src: 源ip地址

nw_dst: 目的ip地址

dl_type = 0x0800 

ip

 

更多匹配字段:

字段名称  说明
 in_port=port 传递数据包的端口的 OpenFlow 端口编号
dl_vlan=vlan 数据包的 VLAN Tag 值,范围是 0-4095,0xffff 代表不包含 VLAN Tag 的数据包
dl_vlan_pcp=priority VLAN 优先级,改值取值区间为[0-7]。数字越大,表示优先级越高。

dl_src=<MAC>
dl_dst=<MAC>  

匹配源或者目标的 MAC

地址01:00:00:00:00:00/01:00:00:00:00:00 代表广播

地址00:00:00:00:00:00/01:00:00:00:00:00 代表单播

dl_type=ethertype 

匹配以太网协议类型,其中:
dl_type=0x0800 代表 IPv4 协议
dl_type=0x086dd 代表 IPv6 协议
dl_type=0x0806 代表 ARP 协议

nw_src=ip[/netmask]

nw_dst=ip[/netmask]

当 dl_typ=0x0800 时,匹配源或者目标的 IPv4 地址,可以使 IP 地址或者域名 
nw_proto=proto  和 dl_type 字段协同使用。

当 dl_type=0x0800 时,匹配 IP 协议编号
当 dl_type=0x086dd 代表 IPv6 协议编号

table=number

指定要使用的流表的编号,范围是 0-254。

在不指定的情况下,默认值为 0 通过使用流表编号,可以创建或者修改多个 Table 中的 Flow

reg<idx>=value[/mask]

交换机中的寄存器的值。

当一个数据包进入交换机时,所有的寄存器都被清零,用户可以通过 Action 的指令修改寄存器中的值

tp_src=number TCP/UDP/SCTP 源端口
tp_dst=number  TCP/UDP/SCTP 目的端口
 

四、删除流表

流表不仅要会添加,同时也要会删除。删除流表的命令是:ovs-ofctl del-flows  + 网桥 + 匹配条件

匹配条件一:入端口

匹配条件二:源ip地址。删除去往 114.114.114.114 的流表

想要使用ovs交换机,知道了vsctl以及ofctl这两个命令之后基本上就能上手了,但作为对ovs交换机的深入学习到现在为止也才入门而已,下面还会有更复杂但更强大的命令使用介绍和原理介绍。更复杂,更强大?怎么感觉是在说:我变强了,也变秃了!

OpenvSwitch系列之ovs-ofctl命令使用的更多相关文章

  1. OpenvSwitch系列之八 vxlan隧道

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  2. OpenvSwitch系列之七 meter表限速

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  3. OVS常用命令与使用总结

    说明 在平时使用ovs中,经常用到的ovs命令,参数,与举例总结,持续更新中… 进程启动 1.先准备ovs的工作目录,数据库存储路径等 mkdir -p /etc/openvswitch mkdir ...

  4. Android Studio系列教程五--Gradle命令详解与导入第三方包

    Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...

  5. 分布式系列 - dubbo服务telnet命令【转】

    dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以通过实例抛砖引玉一下: 1.连接服务 测试对应IP和端口下的d ...

  6. 大数据系列之数据仓库Hive命令使用及JDBC连接

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

  7. 抛砖系列之redis监控命令

    前言 redis是一款非常流行的kv数据库,以高性能著称,其高吞吐.低延迟等特性让广大开发者趋之若鹜,每每看到别人发出的redis故障报告都让我产生一种居安思危,以史为鉴的危机感,恰逢今年十一西安烟雨 ...

  8. OpenvSwitch系列之ovs-vsctl命令使用

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl 命令使用 OpenvSwit ...

  9. OpenvSwitch系列之五 网桥特性功能配置

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

随机推荐

  1. 如何更规范化编写Java 代码

    如何更规范化编写Java 代码 Many of the happiest people are those who own the least. But are we really so happy ...

  2. Android Studio [跑马灯]

    MainActivity package com.xdw.secondapp; import android.graphics.Paint; import android.support.v7.app ...

  3. 每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM

    # 由来 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题.除了应用图标之外,我们所要显示的图片基本上只有两个来源: 来自网络下载 本地相册中加载 不管是网上下载下来的也好,还是 ...

  4. 使用VirtualBox虚拟机搭建hadoop运行环境,

    最近学了一下大数据,包括hadoop环境的搭建,搭建工具:centos6.5,hadoop2.6.4,eclipse Mars.1 Release (4.5.1),jdk1.8 第一步.网络与ip地址 ...

  5. 玩转 SpringBoot 2 之整合 JWT 下篇

    前言 在<玩转 SpringBoot 2 之整合 JWT 上篇> 中介绍了关于 JWT 相关概念和JWT 基本使用的操作方式.本文为 SpringBoot 整合 JWT 的下篇,通过解决 ...

  6. YiShaAdmin,基于.NET Core Web开源的后台快速开发框架

    YiShaAdmin YiShaAdmin 基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web管理系统和移动端Api更简单,所以我也把她开源了. 她可以用于所有的Web应用程 ...

  7. Go中使用seed得到相同随机数的问题

    1. 重复的随机数 废话不多说,首先我们来看使用seed的一个很神奇的现象. func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now( ...

  8. yii2 对字段 自动加一 或 减一

    用于数字类型,将值进行 累加 或者 累减 $count = 1, 就是加一 .   $count = -1, 就是减一 . $effect =  Model::updateAllCounters( [ ...

  9. Github | 吴恩达新书《Machine Learning Yearning》完整中文版开源

    最近开源了周志华老师的西瓜书<机器学习>纯手推笔记: 博士笔记 | 周志华<机器学习>手推笔记第一章思维导图 [博士笔记 | 周志华<机器学习>手推笔记第二章&qu ...

  10. Windows中0环与3环通信(常规方式)

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 一.知识点讲解 1. 设备对象 我们在开发窗口程序的时候,消息被封 ...