0%

OpenvSwitch学习笔记1

功能支持

  1. VLAN with trunk and access ports
  2. 绑定NIC(with/without LAC)
  3. 可见性:NetFlow, sFlow®, and mirroring
  4. QoS
  5. Geneve, GRE, VXLAN, STT, and LISP 隧道
  6. 连接故障管理
  7. openflow 1.0及其扩展
  8. 使用Linux内核进行高性能转发

主要组成部分

  • ovs-vswitchd: 实现交换功能的守护进程,与Linux内核模块实现flow-based switching

  • ovsdb-server: 用以保存ovs配置信息的轻量级的数据库

  • ovs-dpctl: 用以配置交换机内核模块的工具

  • ovs-vsctl: 查看和更新ovs配置信息的工具

  • ovs-ofctl: 配置和查看OpenFlow的控制和交换。主要用来操作OpenFlow流表

场景

多服务器虚拟化部署场景

  • 高动态的end-points
  • 维护的是逻辑抽象
  • 状态迁移
  • 响应网络动态修改
  • 维护逻辑标签

包处理流程

如上图

  1. 当包被从物理网卡上收到之后,如果是第一次收到包,ovs的kernel datapath不知道该如何处理,于是,将其送往ovs-vswitchd。
  2. ovs-vswitchd决定这个包该如何处理之后,回送到kernel datapath
  3. kernel datapath根据ovs-vswitchd执行相应的动作,并缓存这个动作
  4. 当再次收到相关包之后,kernel datapath已经存在之前缓存好的动作,则直接执行该动作

包处理流程

  1. 因为Flow table在内核中有一份,当从物理网卡收到包后,通过key查找内核中的flow table,即可以得到action,然后执行action
  2. 如果没有查找到,则通过upcall调用,将数据包以netlink协议上传到vswitchd
  3. vswitchd将数据包在ovsdb中进行查表匹配,若能匹配,则转到第五步
  4. 若不能匹配,则通过 OpenFlow协议与控制器通信,控制器下发流表项,Vswitchd解析流表项得到相应的动作,同时将流表存入ovsdb。
  5. 将匹配的流表项通过netlink下发到内核的Flow-table中
  6. 通过reinject,使用netlink将包重新送回内核
  7. 匹配流表项并根据相应的动作执行