常见虚拟网卡
lo
lo 网卡是 Linux 中默认就会存在的一张虚拟网卡。它的默认 IP 为 127.0.0.1。
lo 网卡用于本地网络访问,数据包无需离开本机网络。lo 网卡的默认 MTU 为 65535,使用 lo 网卡进行传输数据速度会比用物理网卡传输快的多。不同进程间可通过 lo 网卡进行跨进程通信。
tap/tun
tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备。
用户态进程可通过读写 tap/tun 字符设备文件来读取系统网络栈发往 tap/tun 网卡的数据包和写入数据包到系统网络栈。
tap 和 tun 网卡具有以下区别:
- tun 网卡对应的字符设备文件为:
/dev/net/tun
,tun 网卡提供了对 IP 层的解包封包能力; - tap 网卡对应的字符设备文件为:
/dev/tap0
,提供了对数据链路层的解包封包能力,可以将 tap 设备看作去除了物理层的以太网网卡。
tap/tun 网卡由于其工作机制,常被用来作为 VPN 等隧道通信。
veth-pair
veth-pair 就是一对的虚拟设备接口,和 tap/tun 设备不同的是,它都是成对出现的。一端连着协议栈,一端彼此相连着。
发往 veth0 的数据包会被直接拷贝到 veth1 网卡。因为其点对点特性,因此 veth 网卡常用于虚拟化网络间的通信,如容器和虚拟机等。
bridge
同 tap/tun、veth-pair 一样,Bridge 也是一种虚拟网络设备,所以具备虚拟网络设备的所有特性,比如可以配置 IP、MAC 等。
除此之外,对于普通的网络设备,只有两端,数据从一端进,从另一端出。但是 Bridge 设备具有多个端口,数据可以从多个端口进,从多个端口出。因此 Bridge 还是一个交换机,具有交换机所有的功能。
可以将多个网卡连接到 bridge 网卡,从而实现交换机的能力。给 bridge 网卡配置上 NAT 规则,还可以让 bridge 由交换机转变为路由器。
bond
bond 同样也是一个虚拟网卡,bond 网卡能够将多个物理网卡组合为逻辑上的一个虚拟网卡,拥有单个 IP 和 MAC。
bond 网卡具有七种模式,常用的模式为平衡负载模式和冗余模式:
- 平衡负载模式能够从多张网卡接收数据和,和将数据包根据负载均衡策略发往多个物理网卡;
- 冗余模式能够在在单张网卡出现故障时自动切换到另外一张网卡去。