知识卡片
MACVLAN打破网卡与MAC地址一对一关系实现轻量隔离
内容
两个VLAN之间二层隔离、不能直接通信,要跨VLAN通信只能靠单臂路由——路由 和交换机之间的TRUNK链路允许任何VLAN ID的数据包通过,但这要求路由器 同时持有每个VLAN网段的IP地址,VLAN一多(最多4096个)就不现实,802.1Q 规范因此定义了”子接口”:允许在同一张物理网卡上,为不同VLAN绑定不同IP 地址。MACVLAN借用了这个思路并更进一步:不仅允许一张网卡设多个IP,还 允许设多个MAC地址——原本MAC地址和网卡接口是严格一对一的”身份证”关系, MACVLAN在物理设备之上、网络栈之下生成多个虚拟设备,每个都有独立MAC 地址(本质是在内核里注册一个响应特定MAC地址数据包的回调函数);物理 网卡收到包后先按目标MAC判断转交给哪个虚拟设备处理,这时从交换机视角 看,这个端口后面就像另接了一台交换机。同一物理网卡虚拟出的多个MACVLAN 副本网卡天然处于同一VLAN,可直接二层通信,不必绕外部网络。和 [[Linux-Bridge靠一条特殊转发规则同时充当交换机与三层网关入口]]相比, MACVLAN目标相同(都是用网卡模拟交换机),但内部实现轻量得多——因为 MAC地址是静态分配的,不需要Linux Bridge那样考虑MAC学习、STP这类复杂 算法,通信路径只比走物理网卡多一次判断,性能优势明显。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第12章"容器间网络"12.1.3节
"虚拟化网络设备"(源文件:_epub-src对应OEBPS/Text/chapter147.xhtml)
- 结论依据:原文说明单臂路由依赖的子接口概念如何启发MACVLAN、MACVLAN
如何在一张物理网卡上生成带独立MAC地址的多个虚拟设备,并对比它比
Linux Bridge实现更轻量(无须MAC学习和STP)、性能更优,直接支撑本卡片
结论。
- 原始内容:MACVLAN借用了VLAN子接口的思路,并且在这个基础上进一步
优化,不仅允许为同一个网卡设置多个IP地址,还允许在同一张网卡上设置
多个MAC地址……MACVLAN在内部实现上要比Linux Bridge轻量得多。