家里路由器开了几个Wi-Fi,手机连一个,笔记本连另一个,打印机连第三个——它们明明在同一个物理网络里,却谁也碰不到谁的数据。这不是魔法,是网络虚拟化里的“隔离”在干活。
隔离不是靠墙,是靠规则
物理网线只有一根,交换机端口就那么几个,但一台服务器上能跑十几台虚拟机,每台都以为自己独占一块网卡、一个子网。靠的是虚拟交换机(比如Linux的bridge、Open vSwitch)和内核网络栈配合,在数据包进出时打标签、查策略、做转发。就像快递分拣中心:同一辆货车拉来一堆包裹,靠单号(VLAN ID、VXLAN VNI、Network Namespace)区分归属,再按地址(IP+端口)精准投递,绝不会把小王的外卖塞进老李的信箱。
常见隔离手段,真正在用的
VLAN最老牌:在以太网帧头加4字节Tag,标出属于哪个逻辑局域网。交换机看到Tag 10的包,只往配置了VLAN 10的端口转发。家庭光猫里常有“IPTV VLAN”和“上网 VLAN”分开设置,就是这个道理。
Network Namespace是Linux原生方案:每个命名空间有独立的网络设备、IP栈、路由表、iptables规则。Docker容器默认就运行在各自的netns里:
ip netns add web1
ip netns exec web1 ip addr add 192.168.100.2/24 dev eth0
ip netns exec web1 ping 192.168.100.1执行完,web1里ping得通,宿主机或其他netns里根本看不到这个IP。VXLAN解决跨机房问题:给原始IP包再套一层UDP包头,里面塞个24位VNI标识虚拟网络。A集群的VNI 5001和B集群的VNI 5001完全无关,哪怕IP段都是10.1.1.0/24,也不会混。
端口映射和隔离的关系
很多人问:“我用iptables做了端口映射(比如把宿主机8080转到容器80),这算不算隔离?”不算。它只是流量转发,没切断底层连接。真正隔离得靠上面那些机制。端口映射更像是“开门放行”,而隔离是“给每户装独立防盗门+指纹锁”。你可以在VLAN 10里做端口映射,也可以在VLAN 20里再做一套,彼此策略互不影响——这才是隔离带来的自由。
说白了,网络虚拟化里的隔离,不是让设备变多,而是让规则变细。一根网线,靠软件定义的边界,硬生生切出十几条互不串门的“数字小巷”。你改自己那条巷子的路由表,隔壁巷子连WiFi信号都不会抖一下。