计算机网络包括各种电缆(以太网、光纤、同轴电缆)连接到路由器和以太网交换机等设备,这些设备将数据包引导到它们需要去的地方。Wi-Fi和蜂窝数据网络的兴起已经用无线信号取代了其中一些线缆,但即使是无线电波也属于物理领域,它们连接回基站或Wi-Fi接入点。
在七层 OSI 网络参考模型中,所有这些网络设备、处理和通信都占据最低的三层:
在虚拟网络中,所有这些活动都在软件中进行。
虚拟网络可能完全存在于单个物理计算机(服务器)中。或者,它们可能构成在物理网络上运行的抽象层,其配置和拓扑可能与虚拟网络的配置和拓扑大不相同。
构建虚拟网络是一项复杂的任务,但好处是巨大的:只需更改文件即可重新配置网络,而不需要费力地爬行管道。
若要了解虚拟网络的工作原理,让我们从一个相关且更熟悉的概念开始:虚拟机。我们大多数人都熟悉虚拟机,这使得在一台物理机器上运行多个应用程序实例成为可能。
这些虚拟机并不真正知道它们是虚拟的,它们通常与底层硬件进行的所有系统调用和其他通信都被称为虚拟机监控程序的软件层拦截。虚拟机监控程序处理来自同一台计算机上运行的多个 VM 的请求,以最有效地利用底层硬件资源。
虚拟机可以跨硬件平台转换指令,例如,一个虚拟机可以在x86机器上运行,即使它是为ARM处理器设计的。管理程序能够返回VM期望从硬件接收的结果。
虚拟网络基于相同的原理,软件配置为模拟具有管理员所需特定地形的网络。与虚拟机一样,虚拟网络之所以能够发挥它的魔力,是因为与它通信的操作系统和应用程序不知道(或不关心)它们是在与真实以太网交换机还是虚拟交换机(vSwitch)通信。
它们只是发送头部标记有特定网络路由信息的数据包,并期望收到类似的数据包。因为这种通信是标准化的,所以很容易构建软件来模拟物理网卡、以太网交换机或路由器的行为,实际上像Open vSwitch这样的工具既可以在管理程序上运行,也可以作为物理网络硬件的控制堆栈运行。
一旦管理程序拥有了这些数据包,它就必须弄清楚如何将它们路由到目的地,就像物理网络硬件一样。区别在于,管理程序必须将有关软件定义的虚拟网络(我们的计算机“认为”它连接到的网络)的信息转换为有关实际底层物理环境的信息。
计算机可能认为它正在向同一局域网上的另一台计算机发送数据包,但实际上两台计算机可能位于不同的国家/地区,或者是在同一台服务器上运行的两个虚拟机。
系统管理程序通常通过将数据包封装在另一个数据包中来解决这个问题,而另一个数据包的头中具有不同的路由信息,然后将该数据包交给物理网络基础设施。一旦数据包到达目的地,外部数据包就会被剥离,接收数据包的系统将认为数据包是通过虚拟网络到达的,而不是它所经过的实际物理网络。
毫无疑问,实现一个虚拟网络需要相当多的工作和创造力。为什么要这么麻烦?对不同类型的虚拟网络的描述将使您了解虚拟网络在实际场景中的作用。
内部和外部虚拟网络之间有一个重要的区别。内部虚拟网络用于连接运行在同一台服务器上的多个虚拟机。在这种情况下,管理程序不需要封装网络数据包并通过真实网络发送它们;它只是找出它们用于哪个VM并交付它们。
使用为计算机到计算机通信开发的协议作为运行在同一物理硬件上的两个进程进行通信的手段,这似乎很奇怪。但是请记住,虚拟化的好处之一是您可以在同一台服务器上运行多个开箱即用的操作系统,它们是完全独立且自包含的进程。
为此目的使用标准的网络数据包和协议,以及它们相关的安全基础设施,意味着这些虚拟机可以在不进行修改的情况下运行并相互通信。
另一方面,外部虚拟网络涉及单独的物理计算机(或虚拟机和物理计算机的混合)。在此场景中,计算机通过传统的物理网络设备(包括通过开放internet的连接)连接,但是网络管理员将创建与底层物理拓扑不同的虚拟网络拓扑。
虚拟网络包含以下三种技术类型,可以是内部网络,也可以是外部网络:
当在同一硬件上运行多个虚拟机时,虚拟网络是绝对必要的——这是云计算中的常见场景。同时,在现有的物理网络上创建vlan和vxlan,允许管理员快速重组网络以满足他们的需求。在基础设施即代码的时代,通常是自动的。这很难通过手动重建物理网络来实现。
虚拟网络的优点包括:
这些好处都有助于提高IT生产力和降低管理成本,这是虚拟网络存在的一个重要原因。