网络虚拟化
1.为什么要虚拟化
对于传统网络而言,传统网络就是由各种网络设备(如:交换机,路由器)相连组成的一个网状结构,任何人可以通过这个巨大的网络实现互联。在传统网络环境中,每台物理机会包含一个或多个网卡(NIC),一个主机要实现与其他主机的通信,要通过自身的网卡连接到外部的网络设备,如交换机上。图1所示:
图1在这种架构下,应用的隔离将通过部署在不同物理机实现,网络的隔离通过在交换机中划分VLAN实现。传统网络架构利用率不高,并且当要进行扩展时只能通过增加设备来实现,造成资源的浪费,因此,需要将网络进行虚拟化。
2.虚拟化网络架构
利用虚拟化技术对物理机的物理资源进行抽象,将一个物理网卡虚拟成多个虚拟网卡,通过虚拟机来隔离不同的应用。并且可以通过虚拟化层的管理对资源进行合理的利用并能动态扩容。架构如图2:
图23.Linux下的虚拟化形式
3.1TAP/TUN/VETH
3.1 TAP/TUN/VETH
-
TAP/TUN 是 Linux 内核实现的一对虚拟网络设备,TAP 工作在二层,TUN 工作在三层。Linux 内核通过 TAP/TUN 设备向绑定该设备的用户空间程序发送数据,反之,用户空间程序也可以像操作物理网络设备那样,向 TAP/TUN 设备发送数据。基于 TAP 驱动,即可实现虚拟机 vNIC 的功能,虚拟机的每个 vNIC 都与一个 TAP 设备相连,vNIC 之于 TAP 就如同 NIC 之于 eth。
-
当一个 TAP 设备被创建时,在 Linux 设备文件目录下会生成一个对应的字符设备文件,用户程序可以像打开一个普通文件一样对这个文件进行读写。比如,当对这个 TAP 文件执行 write 操作时,相当于 TAP 设备收到了数据,并请求内核接受它,内核收到数据后将根据网络配置进行后续处理,处理过程类似于普通物理网卡从外界收到数据。当用户程序执行 read 请求时,相当于向内核查询 TAP 设备是否有数据要发送,有的话则发送,从而完成 TAP 设备的数据发送。
-
TUN 则属于网络中三层的概念,数据收发过程和 TAP 是类似的,只不过它要指定一段 IPv4 地址或 IPv6 地址,并描述其相关的配置信息,其数据处理过程也是类似于普通物理网卡收到三层 IP 报文数据。
-
VETH 设备总是成对出现,一端连着内核协议栈,另一端连着另一个设备,一个设备收到内核发送的数据后,会发送到另一个设备上去,这种设备通常用于容器中两个 namespace 之间的通信。
3.2 Bridge
- Bridge 也是 Linux 内核实现的一个工作在二层的虚拟网络设备,但不同于 TAP/TUN 这种单端口的设备,Bridge 实现为多端口,本质上是一个虚拟交换机,具备和物理交换机类似的功能。Bridge 可以绑定其他 Linux 网络设备作为从设备,并将这些从设备虚拟化为端口,当一个从设备被绑定到 Bridge 上时,就相当于真实网络中的交换机端口上插入了一根连有终端的网线。如图3所示,Bridge 设备 br0 绑定了实际设备 eth0 和 虚拟设备设备 tap0/tap1,当这些从设备接收到数据时,会发送给 br0 ,br0 会根据 MAC 地址与端口的映射关系进行转发。
网友评论