第 1 章 网络概述

1.1. 网络如何工作

Networking(网络)这个术语被用来代表在一个计算机和另外一个计算机间进行的信息传递。在一个最基本的层面上,它是通过在分别安装了网卡(NIC)的两个机器间的网线上实现的。

注意

在 OSI 网络模型中,它是第 1 层。

如果您需要把多于两个的计算机进行连接,则需要添加一个交换机。企业级的交换机都会带有多个以太网端口用来连接额外的机器。现在,您就有了一个“局域网”(Local Area Network,简称 LAN)。

交换机位于 OSI 模型的第 2 层,它会比第 1 层更智能一些:每个 NIC 都有一个与硬件关联的唯一 MAC 地址,连接到同一个交换机的设备可以通过 MAC 地址相互进行通讯。交换机会管理一个记录了哪些 MAC 地址连接到哪个端口的信息列表。当一个设备需要和另外一个设备进行通讯时,交换机就可以根据这个列表中的信息正确处理网络数据,并调整用来记录 MAC 地址到端口的映射信息的 FIB(Forwarding Information Base)中的数据。

1.2. 连接两个 LAN

当您有两个分别运行于两个相互独立的交换机上的 LAN,并需要在它们之间共享信息时,您有两个选择可以实现这个功能:

  • 选择一:使用“主干网线(trunk cable)”把两个交换机连接在一起。您需要把网线的两端分别插入到两个交换机的各一个端口中,然后把这些端口配置为主干端口(trunk port)。通过这些配置,您实际上把这两个交换机配置为一个大的逻辑交换机,连接到这两个交换机上的所有设备就可以相互进行通讯。这个方案会带来扩展性问题,当所连接的交换机数量太多时,相应的工作负载会成为一个问题。
  • 选择二:使用网线把所有交换机连接到一个路由器设备,从而可以使路由器知道每个交换机的配置。连接到交换机的一端会被分配一个 IP 地址,它被称为默认网关。默认网关定义了,当所发送数据的目的地没有位于同一个 LAN 时,它需要先被发送到的地址。当数据被发送到这个默认网关所定义的地址上后,路由器会处理以后需要发送的地址。因为路由器知道哪些网络位于哪些端口的信息,它可以把数据发送到正确的目的地。路由功能位于 OSI 模型的第 3 层,IP 地址和子网也都在这一层上实现。
注意

互联网本身就是通过这个概念进行工作的。不同机构的独立网络通过交换机和路由器连接到一起,通过相关的默认网关,网络数据就可以被发送到正确的地址。

1.2.1. VLAN

使用 VLAN 可以对连接到同一个网络交换机上的计算机进行分离。换句话说,您可以通过配置端口来把交换机上的网络进行逻辑分割,从而形成多个“迷你” LAN,达到通过分隔网络数据实现数据安全的目的。例如,您的交换机共有 24 个端口,您可以把端口 1-6 配置为属于 VLAN200,把端口 7-18 配置为属于 VLAN201。连接到 VLAN200 中的计算机将和连接到 VLAN201 中的计算机完全分离,它们将无法直接进行通讯。如果您需要这两个网络中的计算机进行相互通讯,则需要通过一个路由器(这和使用两个独立的物理交换机的情况一样)。在这种情况下,防火墙就可以被用来监控 VLAN 间的网络通讯。

1.2.2. 防火墙

防火墙和 IP 路由操作位于同一个 OSI 层中,但在管理基于 TCP/UDP 端口号的网络数据时它也可以在第 4 层工作。防火墙通常会和路由器处于相同的网段中来处理所有网络间的通讯。防火墙代表了一组预定义的规则,这些规则指定了哪些网络流量可以进入网络,以及哪些网络流量不能进入网络。这些规则可以高度“颗粒化”,例如:

"VLAN200 中的服务器只可以和 VLAN201 中的计算机进行通讯,并且只能在周四下午进行,并且只允许单向传输加密的网络数据(HTTPS)"。

为了保证这些规则的有效性,一些防火墙还会在第 5 层到第 7 层中执行深度包检测(Deep Packet Inspection,简称 DPI)。网络黑客通常会使用网络数据伪装的手法来对系统的安全性进行破坏,而 DPI 会检查数据包中的实际内容来确定它们的真实性,从而降低网络安全被破坏的可能性。

1.3. OpenStack 中的网络

以上概念在 OpenStack 中完全适用,只是在 OpenStack 中被称为软件定义的网络(SDN)。虚拟交换机(使用 Open vSwitch)和虚拟路由器(l3-agent)提供了在实例间进行通讯的功能,并可以为实例提供与外部网络进行通讯的能力。Open vSwitch 网桥会为实例分配虚拟端口,并可以使入站和出站的网络数据分散到相关的物理网络中。

1.4. 高级 OpenStack 网络概念

1.4.1. 第 3 层高可用性

OpenStack Networking 在一个中央化的网络节点(一个专门用于运行虚拟网络组件的物理服务器)上运行虚拟路由器。这些虚拟路由器被用来处理发送到虚拟机或从虚拟机发出的网络数据,因此它们是保证整个环境的网络正常运行的重要元素。因为物理机可能会出现故障(这种情况是不可避免的),所以当网络节点出现故障时,您的虚拟机将无法正常工作。

OpenStack Networking 使用第 3 层高可用性功能来帮助减少以上问题的出现。它通过实现业界标准的 VRRP 协议来保护虚拟路由器和浮动 IP 地址。在启用了第 3 层高可用性功能后,租户的虚拟路由器会被随机地在多个网络节点上进行分配,其中的一个路由器被指定为“活跃的”路由器,其它路由器作为“备份”路由器。当运行活跃路由器的网络节点出现故障时,备份路由器会作为活跃路由器使用。

注意

这里的"第 3 层"代表了 OSI 模型中的第 3 层,因此它会保护 OSI 模型第 3 层中提供的网络功能,包括路由和 IP 地址。

如需了解更多相关信息,请参阅"配置第 3 层高可用性"一章。

1.4.2. HAproxy

作为高可用性(HA)解决方案的一部分,HAProxy 是一个用来在所有可用控制器间分配连接的内建负载均衡程序(与 LBaaS 不同)。因为 HAProxy 是基于分配给每个服务的 UDP/TCP 端口号的,所以它需要在第 4 层中工作。VRRP 会决定连接要被初始发送到哪个 HAProxy 实例,然后 HAProxy 会把连接分配到后端的服务器。这种配置可以被认为是高可用性的负载均衡服务,这与以下介绍的 LBaaS 有所不同。

1.4.3. 负载均衡既服务(LBaaS)

负载均衡即服务(Load Balancing-as-a-Service,简称 LBaaS)使 OpenStack Networking 可以在相关的实例中平均分配入站的网络流量。这保证了入站的网络流量所带来的工作负载以可预测的方式在多个实例中共享,从而达到有效使用系统资源的目的。入站的网络流量以下面的方法之一进行分配:

  • 轮转(Round robin) - 在多个实例间均匀轮转分配请求。
  • 源 IP(Source IP) - 从同一个源 IP 地址发送的请求会被分配到同一个实例。
  • 最少连接数量(Least connections) - 把请求分配到有最少活跃连接数量的实例。

如需了解更多相关信息,请参阅"配置负载均衡既服务(LBaaS)"

1.4.4. IPv6

OpenStack Networking 支持在租户网络中使用 IPv6,这意味着您可以为虚拟机动态地分配 IPv6 地址。OpenStack Networking 也可以集成物理路由器上的 SLAAC,从而使虚拟机可以从您已有的 DHCP 系统中获得 IPv6 地址。

如需了解更多相关信息,请参阅"在租户网络中使用 IPv6" 一章。

1.4.5. CIDR 格式

IP 地址通常首先会在子网的地址段中进行分配。例如,子网掩码为 255.555.255.0 的 IP 地址段 192.168.100.0 - 192.168.100.255 可以提供 254 个 IP 地址(第一个和最后一个地址会被保留)。

这些子网可以使用多种形式代表:

  • 常规形式:子网地址的传统表示方法是使用网络地址和子网掩码。例如:

    • 网络地址:192.168.100.0
    • 子网掩码:255.255.255.0
  • CIDR 格式:这种格式把子网掩码缩短为使用实际的位数进行代表。例如,192.168.100.0/24。其中的 /24 代表了 255.255.255.0(这个子网掩码的二进制形式共有 24 位 1)。在 ifcfg-xxx 脚本中可以使用 CIDR 格式来替代 NETMASK 值:
#NETMASK=255.255.255.0
PREFIX=24