食用说明:在找《趣谈网络协议》的学习笔记时候,感觉大家可能都是在看刘超老师的pdf文稿,按照新人小白喜欢记录的特性,来记录一下自己的学习笔记(会记录一些大佬的评论),从24讲开始,前面的会慢慢更新,尽量保持一天一讲的更新频率(本人非科班生,对于网络协议有理解不到位的和错误的,希望大佬多多指点,拜谢大佬们)
第24讲 云中网络:自己拿地成本高,购买公寓更灵活
一、 从物理机到虚拟机
为什么要从物理机到虚拟机
传统数据中心直接维持物理机存在问题 :
- 采购不灵活:需要自己采购、上架、插网线、安装操作系统,周期长,而且一旦采购了不能退货
- 运维不灵活:需要扩容CPU、内存、硬盘,都需要要去机房手动去配置,麻烦
- 规格不灵活:采购的机器往往规格和需要的配置不匹配,而且很多应用混合部署在上面,端口容易冲突,容易互相影响
- 复用不灵活:当机器转接客户的时候,需要重装操作系统
为了解决这些问题,云计算利用虚拟化技术,在强大的物理机内部“切出”多台虚拟机(就像买卖/租赁公寓)。虚拟机按需分配CPU、内存和网络,即开即用,随用随删。
- qemu-kvm:emu是Emulator(模拟器)的意思,Linux环境下主流的开源硬件虚拟化技术。它就像一个“高级模拟器(骗子)”,通过软件层面向虚拟机汇报“你有独立的CPU、内存、网卡”,但实际上所有资源都是按比例向底层的物理机申请的。
二、 虚拟网卡的原理
虚拟网卡原理
- 首先虚拟机需要有一张网卡,对于qemu-kvm来说,是通过Linux上的TUN/TAP技术实现的
- 虚拟机是在物理机跑着的软件, 虚拟机打开称为TUN/TAP的Char Dev(字符设备文件),之后就能在物理机上看到一张虚拟网卡
- 网络包就往虚拟机里面发
- 网络包 —> 虚拟机—> 网络包转换成文件流 —> 写入字符设备 —> TUN/TAP字符设备驱动接收写入的文件流 —> 交给TUN/TAP的虚拟网卡驱动 —> 驱动将文件流转换成网络包 —> TCP/IP协议栈 — > 最终从虚拟TAP网卡中发出来,成为标准网络包
- TUN/TAP 设备:Linux内核实现的一种纯软件的网络设备。其中 TAP 工作在二层(数据链路层,有MAC地址),相当于模拟了一张普通的网卡。
- 字符设备文件 (Char Dev) :Linux哲学是“一切皆文件”。虚拟网卡在操作系统里被具象化为一个字符设备文件。虚拟机发数据,本质上就是在向这个文件写入字节流。
三、 虚拟网卡连接到云中
为了让虚拟机能正常工作,云网络必须解决四大需求:共享(共用物理网卡)、互通(互相能通信)、隔离(租户间互不干扰)、灵活(随意增删改)。
1. 共享与互通问题
多个虚拟机怎么互通并上网?需要引入“虚拟交换机”来连接它们。主要有三种连通方式:
-
Host-only(仅主机) :所有虚拟机连在同一个虚拟交换机上,彼此互通,但完全与外界物理网络断开(类似大学宿舍的纯内网打局域网游戏)。
-
桥接模式 (Bridge) :将虚拟机的网卡和物理机的真实网卡,一起“插”在虚拟交换机上。物理机和虚拟机被拉平到了同一个物理网段。
- 缺点:如果虚拟机太多,会引发全网的广播风暴。
-
NAT 模式 (网络地址转换) :虚拟机连在虚拟交换机上,形成一个独立的内网(有自己的DHCP分配IP)。物理机充当“家用路由器”,把虚拟机的内网IP转换成物理机的公网IP去访问外网。
局域网连接
可以通过 Linux 命令 brctl 创建虚拟的网桥brctl addbr br0, 创建出来以后,将两个虚拟机的虚拟网卡,都连接到虚拟网桥brctl addif br0 tap0上,这样将两个虚拟机配置相同的子网网段,两台虚拟机就能够相互通信了。
外网连接
-
桥接(Bridge)
-
桥接模式下,虚拟机和笔记本电脑的都在同一IP网段下
-
在数据中心中,采取类似的技术,都是Linux系统,每台机器都创建网桥和br0,虚拟机的网卡都连接到br0上,物理网卡也连接到br0上,所有的br0都通过物理网卡来连接到物理交换机上
-
网络打平, 虚拟机和物理网络会有同样的IP网段
-
广播问题,需要通过VLAN(数据链路层)进行划分,
-
-
另外一种方式为NAT(网络层),在这种情况下,登录到虚拟机里面查看IP地址,会发现虚拟机的网络是虚拟机的,物理机的网络是物理机的,两个不相同。虚拟机要想访问物理机的时候,需要将地址NAT成为物理机的地址。
-
还会在你的笔记本电脑里内置一个DHCP服务器,为笔记本电脑上的虚拟机动态分配IP地址。因为虚拟机的网络自成体系,需要进行IP管理。为什么桥接方式不需要呢?因为桥接将网络打平了,虚拟机的IP地址应该由物理网络的DHCP服务器分配。
-
数据中心中也是类似的方式,
虚拟机是你的电脑,路由器和DHCP Server相当于家用路由器或者寝室长的电脑,物理网卡相当于你们宿舍的外网网口,用于访问互联网。所有电脑都通过内网网口连接到一个网桥br0上,虚拟机要想访问互联网,需要通过br0连到路由器上,然后通过路由器将请求NAT成为物理网络的地址,转发到物理网络
-
如果是你自己登录到物理机上做个简单配置,你可以简化一下。
例如将虚拟机所在网络的网关的地址直接配置到br0上,不用DHCP Server,手动配置每台虚拟机的IP地址,通过命令iptables -t nat -A POSTROUTING -o ethX -j MASQUERADE,直接在物理网卡ethX上进行NAT,所有从这个网卡出去的包都NAT成这个网卡的地址。通过设置net.ipv4.ip_forward = 1,开启物理机的转发功能,直接做路由器,而不用单独的路由器,这样虚拟机就能直接上网了。
-
-
虚拟网桥 (br0) :通过Linux命令(如 brctl)创建出来的虚拟交换机。把虚拟机的TAP网卡挂载到 br0 上,它们就在物理上连通了。
2. 隔离问题
如果一台机器上的两个虚拟机不属于同一个用户,怎么办呢?
brctl创建的网桥也是支持VLAN功能的,可以设置两个虚拟机的tag,这样在这个虚拟网桥上,两个虚拟机是不互通的。
如何跨物理机互通,并且实现VLAN的隔离呢?
brctl创建的网桥上面的tag是没办法在网桥之外的范围内起作用的,因此我们需要寻找其他的方式。
有一个命令vconfig,可以基于物理网卡eth0创建带VLAN的虚拟网卡,所有从这个虚拟网卡出去的包,都带这个VLAN,如果这样,跨物理机的互通和隔离就可以通过这个网卡来实现。
- 首先为每个用户分配不同的VLAN,例如有一个用户VLAN 10,一个用户VLAN 20。在一台物理机上,基于物理网卡,为每个用户用vconfig创建一个带VLAN的网卡。不同的用户使用不同的虚拟网桥,带VLAN的虚拟网卡也连接到虚拟网桥上。
- 不同的用户由于网桥不通,不能相互通信,一旦出了网桥,由于VLAN不同,也不会将包转发到另一个网桥上。
- 出了物理机,也是带着VLAN ID的。只要物理交换机也是支持VLAN的,到达另一台物理机的时候,VLAN ID依然在,它只会将包转发给相同VLAN的网卡和网桥,所以跨物理机,不同的VLAN也不会相互通信。
使用brctl创建出来的网桥功能是简单的,基于VLAN的虚拟网卡也能实现简单的隔离。但是这都不是大规模云平台能够满足的,一个是VLAN的隔离,数目太少。VLAN ID只有4096个, 另外一点是这个配置不够灵活。
- vconfig 命令:Linux中用来配置 VLAN 的命令,可以基于物理网卡虚拟出带有特定 VLAN Tag 的子网卡。
四、 小结
本节课核心脉络梳理:
- 云计算网络的核心基石是虚拟化,其网卡通信原理是借助 TUN/TAP 字符设备实现虚拟机内外数据的中转。
- 云网络必须关注共享、隔离、互通、灵活四大痛点。
- 互通主要有桥接和 NAT 两种流派,安全隔离最基础的实现方案是打 VLAN 标签。
五、 思考题深度解析
-
思考题 1:在数据中心里面,有一款著名的开源软件 OpenStack,这一节讲的网络连通方式对应 OpenStack 中的哪些模型呢?
【深度解析】
OpenStack 是搭建私有云的霸主,它的网络模型(Nova-network / Neutron)与我们课上讲的底层原理高度对应:
- Flat 模式:对应课上讲的桥接模式 (Bridge) 。虚拟机直接和物理机处于同一网段,由物理网络的真实 DHCP 服务器分配 IP。
- Flat DHCP 模式:依然是桥接的思想,但是由 OpenStack 自己在虚拟网桥(br0)上起一个 dnsmasq 进程(充当 DHCP 服务器)来给虚拟机分配 IP。
- VLAN 模式:对应课上讲的桥接模式 + VLAN 隔离。利用 vconfig 划分不同的 VLAN 来实现多租户隔离。
- (扩展) VPC (虚拟私有云) :对应课上讲的 NAT 模式组合。每个租户可以在自己独立的网络里折腾,最后通过 OpenStack 上的虚拟路由器(vRouter,本质是用 iptables 做的 NAT 转发)连通外部网络(Floating IP 机制)。
-
思考题 2:本节提到的网络配置方式比较不灵活,你知道什么更加灵活的方式吗?
【深度解析】
课文末尾提到,传统的 VLAN 只有 4096 个 ID 限制(远远不够大型云平台用),并且使用 brctl 和物理交换机绑定太死板。更灵活的方式是:
- SDN (软件定义网络) 与 Open vSwitch (OVS) :淘汰掉简单的 br0 网桥,改用 OVS(一款强大的企业级虚拟交换机)。OVS 支持复杂的流表(Flow Table),可以通过控制器写代码来“编程”决定网络包该怎么走,指哪打哪,极其灵活。
- 大二层网络技术 (如 VXLAN / GRE) :为了突破 4096 的限制,云厂商演进出了 VXLAN 技术。它把虚拟机的二层网络包,伪装封装成物理机的 UDP(三层)数据包发送出去,到了目标机器再解包。这使得云平台支持多达 1600 万个租户的网络隔离,且虚拟机可以在整个数据中心自由迁移,IP地址不变。这也就是专栏后续章节即将拉开的帷幕。