---
title: 实现原理
description: "如图1所示，OVS软件主要架构由内核态的Datapath和用户态的vswitchd、ovsdb组成。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Docker/kunpengcontainer_06_0005.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/Docker/kunpengcontainer_06_0005.html
indexId: ff1b0ecb7a6e3677a9950a6d07f249858aa00ea06f8e020311f74853bb066f5775
---
# 实现原理

#### Open vSwitch

如图1所示，OVS软件主要架构由内核态的Datapath和用户态的vswitchd、ovsdb组成。

Datapath是负责数据交换的内核模块，从网口读取数据，快速匹配FlowTable中的流表项，成功的直接转发，失败的上交vswitchd进程进行处理。在OVS初始化和port binding时注册钩子函数，把端口的报文处理接管到内核模块。

vswitchd是负责OVS管理和控制的守护进程，通过Unix Socket将配置信息保存到ovsdb中，并通过Netlink和内核模块进行交互。

ovsdb是OVS数据库，保存了OVS的配置信息。

此外，OVS发布包中还包含了一系列管理工具（ovs-vsctl、ovs-dpctl、ovs-ofctl、ovs-appctl、ovs-docker等），方便用户对OVS进行配置和使用。

图1 Open vSwitch软件架构图

如图2所示，在OVS接管网络数据前，数据包在Linux网络协议中的流向为虚线所示——物理网卡端口在接收到数据包后经过内核协议栈的逐层解析，最后离开内核态，把数据传送到用户态；

而经过OVS创建网桥、绑定物理网卡后，数据流从物理网卡端口收包后，在内核态经由OVS的vPort进入到OVS中，根据数据包Key值进行FlowTable流表匹配，成功则执行流表Action后续流程，失败则进行Upcall由vswitchd进程进行处理。

图2 Open vSwitch基本原理图


#### Calico

如图3所示，Calico组件主要架构由Felix、Confd、BIRD组成。

- Felix是负责Calico Node运行并作为每个节点Endpoint端点的守护程序，它负责管理当前主机中的Pod信息，与集群etcd服务交换集群Pod信息，并组合路由信息和ACL策略。
- Confd是负责存储集群etcd生成的Calico配置信息，提供给BIRD层运行时使用。
- BIRD（BIRD Internet Routing Daemon）是核心组件，Calico中的BIRD特指BIRD Client和BIRD Route Reflector，负责主动读取Felix在本机上设置的路由信息，并通过BGP广播协议在数据中心中进行分发路由。

此外，etcd组件是Calico组件运行的依赖组件，需事先在集群中部署etcd服务，或复用Kubernetes的etcd；Calico官方也提供了calicoctl管理工具，用于与Calico Node进行状态确认、状态配置等操作。

图3 Calico软件架构图
