Home Archives Categories Tags

OpenvSwitch 介绍

发布时间: 更新时间: 总字数:1856 阅读时间:4m 作者: 分享
专栏文章
  1. OpenvSwitch 介绍(当前)
  2. 编译 OpenvSwitch RPM 包
  3. OpenvSwitch 常用命令
  4. OpenvSwitch 命令与flow

本文结合自己的理解介绍什么是OpenvSwitch和他的功能。

OpenvSwitch 简介

OpenvSwitch(简称OVS)是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。OpenvSwitch还支持多个物理机的分布式环境。

在虚拟化环境中,一个虚拟交换机(vswitch)主要有如下两个作用:

  • 传递虚拟机VM之间的流量
  • 实现VM和外界网络的通信

如下图所示:

说明:

  • Data Flow: 数据流
  • Physical Switch: 物理交换机
  • Vistual Switch: 虚机交换机
  • NIC(Network interface controller): 网卡,又称网络接口控制器网络适配器,或局域网接收器,是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由于其拥有MAC地址,因此属于OSI模型的第2层。它使得用户可以通过电缆或无线相互连接。
  • vNIC(Virtual Network interface controller)): 虚拟网卡
  • VIF(Virtual network interface) 虚拟网络接口,是计算机网络接口的抽象虚拟化表现,它可能直接或间接连接与NIC

OpenvSwitch主要采用用C编写。目前有以下功能:

  • Standard 802.1Q VLAN model with trunk and access ports
  • NIC bonding with or without LACP on upstream switch
  • NetFlow, sFlow(R), and mirroring for increased visibility
  • QoS (Quality of Service) configuration, plus policing
  • GRE, GRE over IPSEC, VXLAN, and LISP tunneling
  • 802.1ag connectivity fault management
  • OpenFlow 1.0 plus numerous extensions
  • Transactional configuration database with C and Python bindings
  • High-performance forwarding using a Linux kernel module

组成

OpenvSwitch的核心组件包括ovsdb-serverovs-vswitchdovs kernel module。如下图所示:

运行原理:

  • 内核模块实现了多个数据路径(DataPath)(类似于网桥),每个都可以有多个vports(类似于桥内端口
  • 每个数据路径也通过关联流表flow table)来设置操作,而这些流表中的都是用户空间报文头元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport
  • 当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息
    • 当有一个匹配的流时它执行对应的操作
    • 如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后遇到相同类型的数据包可以在内核中执行操作)

细节如下图所示:

除了核心组件,还包括一些管理工具,详细介绍如下:

  • ovs-vswitchd:OVS的核心部件,守护进程,实现交换功能,和Linux内核兼容模块一起,实现基于交换flow-based switching
    • 它和上层 controller 通信遵从 OpenFlow 协议
    • 它与 ovsdb-server 通信使用 OVSDB 协议
    • 它和内核模块通过Netlink通信
    • 它支持多个独立的 datapath(网桥),它通过更改flow table实现了绑定和VLAN等功能
  • ovsdb-server:轻量级的数据库服务器,用于整个OVS的配置信息,包括接口交换内容VLAN等等。
    • ovs-vswitchd 根据ovsdb-server数据库中的配置信息工作
    • 它于 managerovs-vswitchd 交换信息使用了OVSDB(JSON-RPC)的方式
  • ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则
  • ovs-vsctl:主要是获取或者更改 ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库
  • ovs-appctl:主要是向ovs-vswitchd守护进程发送命令的,一般用不上
  • ovsdbmonitor:GUI工具来显示ovsdb-server中数据信息
  • ovs-controller:一个简单的OpenFlow控制器
  • ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容
  • ovs-pki:OpenFlow交换机创建和管理公钥框架
  • ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息
  • brocompat.ko : Linux bridge compatibility(兼容性) module
  • openvswitch.ko : Open vSwitch switching datapath

概念及工作流程

理解网桥

  • 在网络中,交换机是同一个概念,Open vSwitch实现了一个虚拟机以太交换机,换句话说,Open vSwitch也就是实现了一个以太桥。在Open vSwitch中,给一个交换机(或),专业的名词叫做DataPath
  • 网桥也叫做桥接器,连接两个局域网的设备,网桥工作在数据链路层,将两个LAN连接,根据MAC 地址来转发帧

网桥的工作原理

网桥处理包遵循以下几条规则:

  • 在一个接口上接收到的包不会再往那个接口上发送此包
  • 每个接收到的包都要学习其源MAC地址
  • 如果数据包是多播或者广播包(通过2层MAC地址确定)则要向接收端口以外的所有端口转发,如果上层协议感兴趣,则还会递交上层处理
  • 如果数据包的地址不能再MAC表中找到,则向接收端口以外的其他端口转发
  • 如果MAC表中能找到,则转发给相应端口,如果发送和接收都是统一端口,则不发送
  • 网桥是以混杂模式工作的

参考

  1. https://www.openvswitch.org/
  2. https://github.com/openvswitch/ovs/
专栏文章
  1. OpenvSwitch 介绍(当前)
  2. 编译 OpenvSwitch RPM 包
  3. OpenvSwitch 常用命令
  4. OpenvSwitch 命令与flow
最新评论
加载中...