Neutron学习笔记1--基本概念

Neutron学习笔记

基本概念

1.涉及的Linux网络技术

  • bridge:网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备,Linux中传统实现的网桥类似于一个hub设备,而ovs管理的网桥一般类似交换机。
  • br-int:bridge-intergration,综合网桥,常用于表示实现主要内部网络功能的网桥。
  • br-ex:bridge-external,外部网桥,通常表示负责跟外部网络通信的网桥。
  • GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的GRE,即original pkt/GRE/IP/Ethernet
  • VETH:虚拟Ethernet接口,通常以pair的方式出现,一端发出的数据包,会被另一端接收,可以形成两个网桥之间的通道。
  • qvb:neutron veth,Linux Bridge-side
  • qvo:neutron veth,OVS-side
  • TAP设备:模拟一个二层的网络设备,可以接受和发送二层数据包。
  • TUN设备:模拟一个三层的网络设备,可以接收和发送三层数据包。
  • iptables:Linux上常见的实现安全策略的防火墙软件。
  • Vlan:虚拟局域网,同一个物理局域网下用标签来实现隔离,可用标号为1-4094.
  • VXLAN:一套利用UDP协议作为底层传输协议的Overlay实现。一般认为作为VLAN技术的延伸或替代者。
  • namespace:用来实现隔离的一套机制,不同namespace中的资源之间彼此不可见。

1.1 tap

tap从功能定位上来讲,位于数据链路层,数据链路层的主要协议有:

  1. 点对点协议(point-to-point Protocol)
  2. 以太网(Ethernet)
  3. 高级数据链路协议(High-Level Link Protocol)
  4. 帧中继(Frame Relay)
  5. 异步传输模式(Asynchronous Rransfer Mode)

但在这些以太网协议中tap只与以太网(Ethernet)协议对应。因此,tap有时也被称为“虚拟以太网设备”

1.2 tun

tun是一个网络层(IP)的点对点设备,它启用了IP层隧道功能。

Linux一共支持5中三层隧道(tunnel)如下表:

隧道 简述
ipip IP in IP,在IPV4报文的基础上再封装一个IPV4报文头,属于IPV4 in IPV4
GRE 通用路由封装,定义了在任意一种网络层协议上封装任意一个其他网络层协议的协议,数据IPV4/IPV6 over ipv4
sit 和ipip类似,只不过是一个IPV4的报文头封装IPV6的报文,属于IPV6 overIPV4
isatap 站内自动隧道寻址协议,一般用于IPV4网络中的IPV6/IPV4节点间的通信
vti 全称是Virtual Tunnel Interface,为IPsec隧道提供了一个可路由的接口类型

1.3 iptables

iptables与上面tap/tun等不同,它并不是一个网络设备,通过iptables可以实现防火墙、NAT等功能。虽然实现防火墙和NAT功能是通过iptables相关命令实现的,但是真正实现这些功能的是运行在内核空间的netfilter模块。他们之间的关系可以如下图所示。

Neutron学习笔记1--基本概念_第1张图片
iptables与Netfilter

iptables中内置了五张表:nat、filter、mangle、raw和security。

1.3.1 NAT

NAT(网络地址转换),就是从一个IP地址转换为另一个IP地址。分为:静态NAT、动态NAT和端口多路复用三种方案。

静态NAT

静态NAT两个特征:

  1. 私有IP地址和公有IP地址的转换规则是静态指定的。
  2. 私有IP地址和公有IP地址的1:1的,即一个私有IP地址对应一个公有IP地址。
动态NAT

一般公有地址比私有IP地址少时,用动态NAT方案。动态NAT,就是私有IP地址和公有IP地址不是固定的转换关系,而是在ip转换过程中动态分配。但要求同时在线的私有IP地址要少于公有IP地址。动态NAT的三个特征:

  1. 私有IP地址和公有IP地址的转换规则不是静态指定,而是变化的。
  2. 两者之间的转换规则不是静态指定,而是动态匹配。
  3. 私有IP地址要小于公有IP地址的数量。
端口多路复用

当公有IP地址只有一个,而私有IP地址有多个时,不同的私有IP地址通过端口号进行区分,这里的端口号指TCP/UDP端口。端口多路复用特征:

  1. 私有IP地址大于共有IP地址的数量。
  2. 以公有IP地址的IP+端口号来区分私有IP地址。
SNAT(源地址转换)

内部地址要访问公网上的服务时,内部地址会主动发起连接,有路由器或者防火墙上的网关对内部地址做地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换为SNAT,主要用于内部共享IP访问外部。

DNAT(目的地址转换)

当内部网络要提供对外服务时,外部地址发起主动连接,有路由器或防火墙的网关接收这个连接,然后将连接转换到内部,此过程由带有公网IP的网关替代内部服务来接收外部的连接。然后在内部做地址转换。此转换称为DNAT。主要用于内部服务对外发布。

图示如下:

Neutron学习笔记1--基本概念_第2张图片
NAT转换
NAT处理作用时刻点
流描述 处理时刻点 NAT类型 NAT说明
1 流从外部到达Linux用户空间(私有IP) PREROUTING DNAT 将目的IP从公有IP转换到私有IP
2 流从Linux用户空间到达外部 POSTROUTING SNAT 将源IP从私有IP转换为公有IP
3 流从Linux内核空间到达外部 OUTPUT DNAT
1.3.2 Firewall

iptables中的Firewall属于网络防火墙,通过制定基于TCP/IP协议的规则来实现其防火墙功能。这些功能有:

  1. in-interface(入网络接口名):数据包从哪个接口进入;
  2. out-interface(出网络接口名):数据包从哪个网络接口输出;
  3. protocol(协议类型):数据包的协议,如TCP、UDP、ICMP等;
  4. source(源地址):数据包的源IP地址(或子网);
  5. destination(目的地址(或子网)):数据包的目的IP地址(或子网);
  6. sport(源端口号):数据包的源端口号;
  7. dport(目的端口号):数据包的目的端口号。
处理时刻点
  • INPUT
  • FORWARD
  • OUTPUT
1.3.3 mangle

mangle表主要用于修改数据包的TOS(服务类型),TTL(生存时间),以及数据包设置Mark标记,以实现QOS(服务质量)调整以及策略路由等应用。

处理时刻点
  • RPEROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTROUTING

1.4 namespace

namespace是Linux虚拟网络中的一个重要概念,其主要目的就是将Linux的许多全局资源进行资源隔离。Linux可以在一个host中创建多个namespace,使那些原本的Linux全局资源变为namespace范围内的全局资源。并且各个namespace之间资源互不可见、相互透明。

namespace隔离的资源

资源 含义
uts_ns UTS为Unix Timesharing System的简称,包含内存名称、版本、底层体系结构等信息
ipc_ns 所有与进程间通信(IPC)有关的信息
mnt_ns 当前装载的文件系统
pid_ns 有关进程id的信息
user_ns 资源配额的信息
net_ns 网络信息

示意图:

Neutron学习笔记1--基本概念_第3张图片
namespace

每个namespace提供了一份独立的网络协议栈,一个设备只能位于一个namespace中,不同namespace中的设备可以通过veth pair进行桥接。

1.5 veth pair

veth pair不是一个设备,而是一对设备,以连接两个虚拟以太网端口。操作veth pair要和namespace配合使用,如图所示。

Neutron学习笔记1--基本概念_第4张图片
veth pair

2.Neutron管理的实体:

  • 网络:隔离的L2域,可以是虚拟、逻辑或交换。
  • 子网:隔离的L3域,IP地址块,其中每个机器有一个IP,同一个子网的主机彼此L3可见。
  • 端口:网络上虚拟、逻辑或交换端口。所有这些实体都是虚拟的,拥有自动生成的唯一标识ID,支持CRUD(crud是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete) ),并在数据库中跟踪记录状态。

2.1 网络

隔离的L2广播域,一般是创建它的用户所有。用户可以拥有多个网络。网络是最基础的,子网和端口都需要关联到网络上。

网络上可以有多个子网。同一个网络上的主机一般可以通过交换机或路由器连通起来。

2.2子网

隔离的L3域,子网代表了一组分配了IP的虚拟机。每个子网必须有一个CIDR和关联到一个网络。IP可以从CIDR或者用户指定池中选取。

子网可能会有一个网关、一组DNS和主机路由。不同子网之间L3是互相不可见的,必须通过一个三层网关(路由器)经过L3上进行通信

2.3端口

可以进出流量的接口,往往绑定上若干MAC地址和IP地址,以进行寻址。一般为虚拟交换机上的虚拟接口。

虚拟机挂载网卡到端口上,通过端口访问网络。当端口有IP时,意味它属于某个子网。

3.抽象系统架构

无论哪种具体的网络虚拟化实现,一个简化和抽象后的系统架构可以表述为下图:

Neutron学习笔记1--基本概念_第5张图片
抽象系统架构

在启用 DVR 特性(J 版本以后支持)之前,所有流量(东西向、南北向)都需要经过网络节点的转发;DVR 特性则允许东西向流量和带有 Floating IP 的南北向流量不经过网络节点的转发,直接从计算节点的外部网络出去。

参考:
1.深入理解 Neutron -- OpenStack 网络实现
2.深入理解OpenStack Neutron

你可能感兴趣的:(Neutron学习笔记1--基本概念)