概念

Open vSwitch中许多网络上的概念与平时接触到的不同,这里介绍一下Open vSwitch中用到的一些名词及概念。

Packet (数据包)

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

Bridge (网桥)

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

Port (端口)

端口是收发数据包的单元。Open vSwitch中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去。Open vSwitch支持的端口有以下几种:

  • Normal Port: 用户可以把操作系统中的网卡绑定到Open vSwitch上,Open vSwitch会生成一个普通端口处理这块网卡进出的数据包。

  • Internal Port: 当设置端口类型为internal,Open vSwitch会创建一快虚拟网卡,此端口收到的所有数据包都会交给这块网卡,网卡发出的包会通过这个端口交给Open vSwitch。

    aaarticlea/png;base64,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" alt="Note" /> 当Open vSwitch创建一个新网桥时,默认会创建一个与网桥同名的Internal Port
  • Patch Port: 当机器中有多个Open vSwitch网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。

    aaarticlea/png;base64,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" alt="Tip" /> Patch Port是机房术语,特指用于切换网线连接的接线卡。此卡上面网口成对出现,当需要把两台设备连接起来时,只需要把两台设备接入同一对网口即可。
  • Tunnel Port: 隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。

Interface (iface/接口)

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

Flow (流)

流定义了端口之间数据包的交换规则。每条流分为匹配和动作两部分,匹配部分选择哪些数据包需要可以通过这条流处理,动作决定这些匹配到的数据包如何转发。流描述了一个网桥上,端口到端口的转发规则。比如我可以定义这样一条流:

当数据包来自端口A,则发往端口B

来自端口A 就是匹配部分,发往端口B 就是动作部分。

流的定义可能非常复杂,比如:

当数据包来自端口A,并且其源MAC是aa:aa:aa:aa:aa:aa,并且其拥有vlan tag为a,并且其源IP是a.a.a.a,并且其协议是TCP,其TCP源端口号为a,则修改其源IP为b.b.b.b,发往端口B
Datapath

由于流可能非常复杂,对每个进来的数据包都去尝试匹配所有流,效率会非常低,所以有了datapath这个东西。Datapath是流的一个缓存,会把流的执行结果保存起来,当下次遇到匹配到同一条流的数据包,直接通过datapath处理。考虑到转发效率,datapath完全是在内核态实现的,并且默认的超时时间非常短,大概只有3秒左右。

实现

当Open vSwitch的一个接口收到数据包后,会由下图所描述的流程处理:

aaarticlea/png;base64,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" alt="2014-11-19-openvswitch-internal__1.png" />

收到数据包后,会交给datapath内核模块处理,当匹配到对应的datapath会直接输出,如果没有匹配到,会交给用户态的ovs-vswitchd查询flow,用户态处理后,会把处理完的数据包输出到正确的端口,并且设置新的datapath规则,后续数据包可以通过新的datapath规则实现快速转发。

结论

抛开流的管理,Open vSwitch的工作原理非常简单,下次会介绍使用Open vSwitch提供的管理工具,搭建一个网络,并且调试其中的流与datapath。

Open vSwitch 工作原理的更多相关文章

  1. VMware vSphere中的HA工作原理介绍

    http://blog.51cto.com/linkinsds/416738 HA全称High Availability.它是VMware的企业应用环境中用来保障企业级应用的不间断运行需求所产生的一个 ...

  2. K8s的工作原理

    title: Kubernetes之初探 subtitle: K8s的工作原理 date: 2018-09-18 18:26:37 --- K8s概述 我清晰地记得曾经读到过的一篇博文,上面是这样写的 ...

  3. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  4. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  5. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  6. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  7. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  8. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  9. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

随机推荐

  1. 跟我学TCP/IP系列

    最近在微信公众号“java与Android开发专栏”,看到系列文章“跟我学TCP/IP系列”,共7章,文章很赞. 系列文章在CSDN上也有分发,下列出地址以备以后查看(版权问题不转载内容). http ...

  2. Nhibernate 一对一,一对多,多对多 成功映射

    前语: 在Nhibernate xml 的文件配置上,一对一和多对多的配置比较简单,容易出错的反而是一对多(多对一)上. 1.一对一关联关系的映射: <one-to-one name=" ...

  3. linux中hive无法使用删除键或无反应

    用的工具secureCRT连接linux服务器的,登录到hive中后无法使用删除键. 修改如下: 会话选项 -> 终端|仿真 ->  选择终端为linux.

  4. Hibernate- 条件查询

    01.搭建开发环境 02.条件查询 package com.gordon.test; import java.util.List; import org.hibernate.Query; import ...

  5. html2canvas如何在元素隐藏的情况下生成截图

    html2canvas官网地址:http://html2canvas.hertzen.com/ github地址:https://github.com/niklasvh/html2canvas/ 从官 ...

  6. WCF(一)

    摘自:http://www.cnblogs.com/yank/p/3653160.html WCF入门教程(一)简介 1.WCF是什么? WCF( Windows Communication Foun ...

  7. java笔记知识点总结

    1.switch case default 语句 : switch case 语句是一个条件选择语句,找到相同的case值做为入口,执行后面的程序:若所有的case都不满足,则找default入口:若 ...

  8. 《FPGA全程进阶---实战演练》第三章之接地设计

    信号回路的电位基准点,(直流电源的负极或者零伏点)在单板上可以分为数字地和模拟地.理想的工作地是电路参考点的等电位平面,然而在实际中,工作地被认为信号电流的低阻抗回路和电源的供电回路,这样就会有三个方 ...

  9. activiti小结

    前提:业务流程复杂且流程频繁变更的,建议使用工作流:其他情况不建议使用. activiti(v5.14),工作流引擎,基于jbpm.使用建模语言BPMN2.0进行定义. 工作流数据需要写入数据库,ac ...

  10. linux 打包 解压 tar zip tgz

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)------------------------- ...