openstack之Neutron网络模式vlan,gre,vxlan详解

2019-05-0807:53:47计算机网络技术Comments4,623 views字数 5427阅读模式

一:基础知识文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

vlan基础知识文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

介绍文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

:首先说下lan,LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接LAN 中的计算机。(一个 LAN 表示一个广播域)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

vlan:(Virutal LAN) 将同一个LAN上的用户在逻辑上分成多个虚拟局域网,换句话说,一个带有 VLAN 功能的switch 能够同时处于多个 LAN 中,每个vlan中的主机连接交换机的端口是access口,从而保证了交换机只在同一个vlan中转发包文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1.2:IEEE 802.1Q 标准定义了 VLAN Header 的格式。它在普通以太网帧结构的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 数据,其中包括 12-bits 的 VLAN ID。VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

vlan数据帧格式介绍:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

      TPID(Tag Protocol Identifier,标签协议标识)值规定为0x8100。设备缺省采用协议规定的TPID值,交换机通过TPID来确定数据帧是否附加基于的VLAN信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

          TCI(Tag Control Information,标签控制信息)字段分为Pri、CFI和VLAN三部分。Pri表示报文优先级(也称1p优先级、COS或1q优先级),CFI(Canonical Format Indicator)标识MAC地址在不同传输介质中是否以标准格式进行封装,通常为0(标准格式)。Vlan ID标识该报文所属的VLAN编号,取值范围为 0~4095,一般0和4095保留(中兴设备Vid=0表示priority-tagged帧)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

带vlan的交换机端口划分:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

Access port:这些端口被打上了 VLAN Tag。离开交换机的 Access port 进入计算机的以太帧中没有 VLAN Tag,这意味着连接到 access ports 的机器不会觉察到 VLAN 的存在。离开计算机进入这些端口的数据帧被打上了 VLAN Tag。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

Trunk port: 两台或者多台交换机通过一个根线连接,线的两头都是trunk口,可以转发多个vlan信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

基于port的vlan(数据帧中不包含vlan tag,vlan信息从交换机的端口pvid上得知,交换机转发包也基于此)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

基于tagged vlan(数据帧中包含vlan tag,vlan信息从数据帧内包含的vlan信息,交换机需要有对该数据帧拆包/封包的能力,即连接到这种端口的网络设备必须是)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

的不足文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

VLAN 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

VLAN 操作需手工介入较多,这对于管理成千上万台机器的管理员来说是难以接受的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

以上上中在小公司,用在小规模的云平台服务完全是可以的,但是每一个小公司都有一颗做大的心嘛,所以还是不提倡的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

交换机基础知识文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1.交换机工作原理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接收接口发送出去(也就是广播)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

地址:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

mac地址表:在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

mac地址学习:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1)主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

2)交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

3)交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机2都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

总结:交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

原理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

主机A与主机B在同一网段文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

2)当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

3)当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

主机A与主机B不在同一网段文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

不在同一网段的话,就需要借助路由器了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即的网段)相匹配的的项,根据路由表中记录到网段的数据请发送给下一跳地址10..2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

5)此时HostB才会收到来自HostA发送的数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

二:openvswitch+vlan组网文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1.物理网络vlan配置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

管理网络,用于 OpenStack 节点之间的通信,假设 VLAN ID 范围为 50 - 99.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

数据网络,用于虚拟机之间的通讯。由于Vlan模式下,租户建立的网络都具有独立的 Vlan ID,故需要将连接虚机的服务器的交换机端口设置为 Trunk 模式,并且设置所允许的 VLAN ID 范围,比如 100~300。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

外部网络,用于连接外部网络。加上 VLAN ID 范围为 1000-1010。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

  • 如果该物理交换机接到一个物理路由器并做相应的配置,则数据网络可以使用这个物理路由器,而不需要使用 Neutron 的虚拟路由器。
  • 如果不使用物理的路由器,可以在网络节点上配置虚拟路由器。

配置生效的过程:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

配置就不详细说了,后续将会整理成一个完成的部署博客,下面简述下Neutron配置生效的过程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

当 Neutron L2 Agent (OVS Agent 或者 Linux Bridge agent)在计算和网络节点上启动时,它会根据各种配置在节点上创建各种 bridge。以 OVS Agent 为例,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

(1)创建 intergration brige(默认是 br-int);如果 enable_tunneling = true 的话,创建 tunnel bridge (默认是 br-tun)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

(2)根据 bridge_mappings,配置每一个 VLAN 和 Flat 网络使用的 physical network interface 对应的预先创建的 OVS bridge。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

(3)所有虚机的 VIF 都是连接到 integration bridge。同一个虚拟网络上的 VM VIF 共享一个本地 VLAN (local VLAN)。Local VLAN ID 被映射到虚拟网络对应的物理网络的 segmentation_id。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

(4)对于 GRE 类型的虚拟网络,使用 LSI (Logical Switch identifier)来区分隧道(tunnel)内的租户网络流量(tenant traffic)。这个隧道的两端都是每个物理服务器上的 tunneling bridge。使用 Patch port 来将 br-int 和 br-tun 连接起来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

(5)对于每一个 VLAN 或者 Flat 类型的网络,使用一个 veth 或者一个 patch port 对来连接 br-int 和物理网桥,以及增加 flow rules等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

(6)最后,Neutron L2 Agent 启动后会运行一个RPC循环任务来处理 端口添加、删除和修改。管理员可以通过配置项 polling_interval 指定该 RPC 循环任务的执行间隔,默认为2秒。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

代码的实现流程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

boot虚拟机的过程。nova依次会文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1调用neutron rest api申请一个或多个port,neutron会根据数据库中的配置进行分配文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

2计算机节点上,nova调用ovs-vsctl命令将虚拟机的VIF被plug到br-int上文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

3启动虚拟机文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

neutron l2 agent的循环任务每隔2秒会文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1)调用ovs-vsctl list-ports命令获取br-int上的port,在根据上次保存的历史记录,生成所有变更端口的列表(包括添加的,删除的,更新的)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

2)为每一个待处理端口,根据其ID从DB中取出详细信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

3)针对每一个增加或变更的port设置local vlan tag,调用命令ovs-ofctl mod-flows命令来设置br-tun或者物理的bridge的flow rules;并设置db中其状态为up文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

4)针对每一个被删除的port,设置db中其状态为down文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

4.Neutron的vlan模式的虚拟网络文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

一个计算节点上的网络示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

1) Neutron 使用 Open vSiwtch。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

2) 一台物理服务器,网卡 eth1 接入物理交换机,预先配置了网桥 br-eth1。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

3) 创建了两个 neutron VLAN network,分别使用 VLAN ID 101 和 102。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

4) 该服务器上运行三个虚机,vm1 和 vm2 分别有一个网卡接入 network 1;vm2 和 vm3 分别有一个网卡接入 network 2.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

neutron在该计算节点上做的事情:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

创建了OVS Integration bridge br-int。它的四个Access口中,两个打上了内部vlan Tag1,连接接入network1的两个网卡;另外两个端口打上的是vlan tag 2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

创建一对patch port连接br-int和br-eth1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

设置br-int中的flow rules。对从access ports进入的数据帧,加上相应的vlan tag,转发到patch port;从patch port进入的数据帧,将vlan id 101修改为1,102修改为2,再转发到相应的access ports文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

设置br-eth1中的flow rules。从patch port进入的数据帧,将内部vlan id 1修改为101,内部vlan id 2修改为102,再从eth1端口发出。对从eht1进入的数据帧做相反的处理文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

连接到同一个物理交换机上的两个计算节点的内部通信文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

openstack之Neutron网络模式vlan,gre,vxlan详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

两个物理节点,compute01上面有两个云主机,都是vlan1,compute02上面有两个云主机,vm3为vlan1,vm4位vlan2。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

.1:同一个物理节点上,同一个vlan之间的通信文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

例如:vm1:》vm2:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

相同物理服务器上的虚机, VM1 访问VM2,当数据包到达br-int的时候,先查询br-int的mac地址表,如果有记录,则直接找到VM2,如果没有记录的话,需要经过 br-int 进行广播,寻找,这个时候vm2收到mac地址,一看是我的,他就回给br-int,br-int就会把mac地址缓存起来,并回给vm1即可文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

.2:不同物理节点上,同一个vlan之间的通信文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

        例如:vm1:》vm3:10.0.0.4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

.3:同一个物理节点上,不同vlan之间的通信文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

例如:vm3:》vm4: 或者文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

.4:不同物理节点上,不同vlan之间的通信文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

例如:vm1:》vm 4:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11853.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/wangluo/11853.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定