一、问题
问题:tap和tun的区别?作用是什么?
tap和tun两者同属于操作系统内核中的虚拟网络设备(此处指的是逻辑的设备,实际承载载体可能就是数据结构、内核模块,设备驱动)与传统的L3路由器,L2交换机的物理网络设备区分开来。
- tap虚拟设备位于网络OSI模型的二层(数据链路层),主要与Ethernet协议对应,另一个别称也可以是vNIC充当虚拟机的网卡。
- tun虚拟设备是一个网络层(IP)的点对点设备,主要提供IP层隧道功能,如GRE。
问题:namespace的作用是什么?
namespace主要针对Linux的资源进行隔离,Linux再host内创建多个namespace,于是那些原本是Linux全局的资源,就变成了namespace范围内的“全局”资源,而且不同的namespace资源互不可见,彼此透明。此时要想实现对每个namespace的“全局”资源进行限制,可以使用cgroup。
单单从网络视角来看,一个namespace提供独立的网络协议栈(网络设备接口,ipv4、ipv6、ip路由、防火墙规则、sockets)。一个设备(linux Device)只能位于一个namespace中,不同的namespace中的设备可以通过veth pair进行桥接。
问题:veth pair,namespace,bridge的关系?
veth pair :不是一个设备,而是一对设备,以连接两个虚拟 以太端口,可以理解为物理网络中的网线。
namespace:针对Linux设备的资源进行隔离,可以类似于交换机中的VRF,有对应自身的ipv4地址、路由表,ACL等共享使用交换机的硬件资源,彼此隔离。
bridge:在 Linux 的语境里,Bridge( 网桥)与 Switch (交换机)是一个概念,目前linux中常用的两款交换机为linux bridge,ovs,可以类比物理网络中的三层交换机。
当三者进行结合后,可以再linux Host/VM内部就可以实现一个逻辑的虚拟网络,如下图:
问题:虚拟网络中的route如何产生,如何做到不同租户使用不同的router?
再不同网段互访时,Linux自身就是一个路由器,所以不用向bridge那样去手工创建,假如想要实现路由转发,可以开启路由转发功能:
echo “1” /proc/sys/net /工pv4 /工p_f orward
同时针对不同租户,也是通过namespace进行隔离,不同的租户有不同的路由器(linux路由转发功能)。
问题:iptables与netfilter的关系?
iptables与前文介绍的 tap/tun等不同,它并不是一个网络设备 ,准确来说是一个软件。 iptables 其实只是一个运行在用户空间的命令行工具,真正实现这些功能的是运行在内核空间的 netfilter 模块。
不过按照通俗理解iptable就是netfilter的代言人,主要实现的功能有:防火墙、NAT、Qos。
二、物理网络与虚拟设备对比
tap、tun、veth pair 在 Linux 中都被称为设备,但是在与日常概念的类比中,常常被称
作接口 。Neutron 利用这些“接口”进行 Bridge 之间的连接 、 Bridge 与 VM(虚拟机)的连接 、
Bridge 与 Router 之间的连接,对比关系图如下:
反而是 Router 、Bridge 这些在 Linux 中没有被称为设备的网络功能, 反而在日常概念中常常被称为设备 。Bridge 提供二层转发功能,Router 提供三层转发功能 。Router 还常常借助 iptable 提供 SNAT/DNAT 功能 。Bridge 也常常借助 iptable 提供 Firewall 功能 。
同时再Neutron中隔离也是一大特性,利用 namespace 做隔离也是 Neutron 的一个非常重要的手段,提供不同租户的DHCP、Router功能也是依据namespace来实现。
本文参考:《深入理解Openstack Neutron》——李宗标