内容摘录自极客时间课程《趣谈网络协议》,如有侵权,请及时联系删除。
目录
云中网络的隔离
Underlay网络:底层的物理网络设备组成的网络。
Overlay网络:用于虚拟机和云中的这些技术组成的网络,这是一种基于物理网络的虚拟化网络实现。
GRE(Generic Routing Encapsulation)
GRE是一种IP-over-IP的隧道技术。它将IP包封装在 GRE 包里,外面加上IP头,在隧道的一端封装数据包,并在通路上进行传输,到另外一端的时候解封装。你可以认为 Tunnel 是一个虚拟的、点对点的连接。
在GRE头中,前32位是必填的,后面是可选的。在前 4 位标识位里面,有标识后面到底有没有可选项?这里面有个很重要的 key 字段,是一个 32 位的字段,里面存放的往往就是用于区分用户的 Tunnel ID。
(二进制数据结构图)
NVGRE是专门用于网络虚拟化的GRE包头格式,网络ID号为24位,数量也够用了。
GRE还需要有一个地方来封装和解封装GRE的包,这个地方往往是路由器或者有路由功能的Linux机器。
使用 GRE 隧道,传输的过程就像下面这张图。这里面有两个网段、两个路由器,中间要通过 GRE 隧道进行通信。当隧道建立之后,会多出两个 Tunnel 端口,用于封包、解封包。
GRE的不足
- 需要建立点对点隧道,随设备数量增加而成指数增长;
- 不支持组播,只能进行广播;
- 设备兼容性差,有很多防火墙和三层网络设备无法解析 GRE;
VXLAN(Virtual extensible local area network)
和三层外面再套三层的 GRE 不同,VXLAN 是从二层外面套了一个 VXLAN 的头,这里面包含的 VXLAN ID 为 24 位。在 VXLAN 头外面还封装了 UDP、IP,以及外层的 MAC 头。
VXLAN 作为扩展性协议,也需要一个地方对 VXLAN 的包进行封装和解封装,实现这个功能的点称为 VTEP(VXLAN Tunnel Endpoint)。
VTEP 相当于虚拟机网络的管家。每台物理机上都可以有一个 VTEP。每个虚拟机启动的时候,都需要向这个 VTEP 管家注册,每个 VTEP 都知道自己上面注册了多少个虚拟机。当虚拟机要跨 VTEP 进行通信的时候,需要通过 VTEP 代理进行,由 VTEP 进行包的封装和解封装。
和 GRE 端到端的隧道不同,VXLAN 不是点对点的,而是支持通过组播来定位目标机器,而非是一端发出,另一端接收。
通过VTEP进行跨VXLAN的包转发示意图: