分享

neutron系列:使用 Open vSwitch + VLAN 组网(3)

fc013 发表于 2015-12-6 18:08:58 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 15607
本帖最后由 eying 于 2016-1-13 16:51 编辑

问题导读:

1.VLAN是什么?
2.二层交换机最基本的功能有哪些?
3.Address Resolution Protocol (ARP) 原理是什么?





1. L2 基础知识1.1 VLAN 基础知识

1.1.1 VLAN 的含义
   LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接LAN 中的计算机。一般来说,当你将两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。同样地,你连接两个 Switch 的话,它们也在一个 LAN 中。一个 LAN 表示一个广播域,它的意思是,LAN 中的所有成员都会收到 LAN 中一个成员发出的广播包。可见,LAN 的边界在路由器或者类似的3层设备。

   VLAN 表示 Virutal LAN。一个带有 VLAN 功能的switch 能够同时处于多个 LAN 中。最简单地说,VLAN 是一种将一个交换机分成多个交换机的一种方法。比方说,你有两组机器,group A 和 B,你想配置成组 A 中的机器可以相互访问,B 中的机器也可以相互访问,但是A组中的机器不能访问B组中的机器。你可以使用两个交换机,两个组分别接到一个交换机。如果你只有一个交换机,你可以使用 VLAN 达到同样的效果。你在交换机上分配配置连接组A和B的机器的端口为 VLAN access ports。这个交换机就会只在同一个 VLAN 的端口之间转发包。

VLAN_figure2.jpg
(图1)

    IEEE 802.1Q 标准定义了 VLAN Header 的格式。它在普通以太网帧结构的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 数据,其中包括 12-bits 的 VLAN ID。VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。

20131211_1732431_image004_807825_30005_0.png
(图2)

    带 VLAN 的交换机的端口分为两类:

  • Access port:这些端口被打上了 VLAN Tag。离开交换机的 Access port 进入计算机的以太帧中没有 VLAN Tag,这意味着连接到 access ports 的机器不会觉察到 VLAN 的存在。离开计算机进入这些端口的数据帧被打上了 VLAN Tag。
  • Trunk port: 有多个交换机时,组A中的部分机器连接到 switch 1,另一部分机器连接到 switch 2。要使得这些机器能够相互访问,你需要连接两台交换机。 要避免使用一根电缆连接每个 VLAN 的两个端口,我们可以在每个交换机上配置一个 VLAN trunk port。Trunk port 发出和收到的数据包都带有 VLAN header,该 header 表明了该数据包属于那个 VLAN。因此,只需要分别连接两个交换机的一个 trunk port 就可以转发所有的数据包了。通常来讲,只使用 trunk port 连接两个交换机,而不是用来连接机器和交换机,因为机器不想看到它们收到的数据包带有 VLAN Header。

071133104716013.jpg

(图3)

1.1.2 VLAN 的类型
(1)基于端口的 VLAN (untagged VLAN - 端口属于一个VLAN,数据帧中没有VLAN tag)

    这种模式中,在交换机上创建若干个VLAN,在将若干端口放在每个VLAN 中。每个端口在某一时刻只能属于一个VLAN。一个 VLAN 可以包含所有端口,或者部分端口。每个端口有个PVID (port VLAN identifier)。这种模式下,一个端口上收到的 frame 是 untagged frame,因此它不包含任何有关 VLAN 的信息。VLAN 的关系只能从端口的 PVID 上看出来。交换机在转发 frame 时,只将它转发到相同 PVID 的端口。

697113-20151030184605466-1365729365.jpg

如上图所示,连接两个交换机的同一个 VLAN 中的两个计算机需要通信的话,需要在两个交换机之间连两根线:

  • 一根从 Switch A 端口4 到 Switch B 端口 4 (VLAN 1)
  • 一根从 Switch A 端口8 到 Switch B 端口 8 (VLAN 2)

(2)Tagged VLANs (数据帧中带有 VLAN tag)

这种模式下,frame 的VLAN 关系是它自己携带的信息中保存的,这种信息叫 a tag or tagged header。当交换机收到一个带 VLAN tag 的帧,它只将它转发给具有同样 VID 的端口。一个能够接收或者转发 tagged frame 的端口被称为 a tagged port。所有连接到这种端口的网络设备必须是 802.1Q 协议兼容的。这种设备必须能处理 tagged frame,以及添加 tag 到其转发的 frame。

697113-20151030184911982-1537246064.jpg

上图中,两个交换机上的端口8 支持 VLAN 1 和 2, 因此一根线就可以了实现跨交换机的同VLAN 内的计算机互相通信了。

在实际的VLAN 配置中的各种情况:

  • 交换机的所有端口,部分是 tagged port,部分被添加到 VLAN 中。
  • 一个 untagged port,不管它是一个基于端口的VLAN 的一个成员还是一个 tagged VLAN 中的一个成员,一个时刻只能在一个 VLAN 中。
  • 一个 tagged port,可以是多个 VLAN 的成员。
  • 一个 port,可以同时是一个 VLAN 的 untagged member,以及不同 VLAN 中的 tagged member。

697113-20151030191022591-1736673741.jpg


1.1.3 交换机端口类型
    以太网端口有三种链路类型:Access、Hybrid和Trunk。

  • Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口
  • Trunk类型的端口可以属于多个VLAN,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口
  • Hybrid类型的端口可以属于多个VLAN,可以接收和发送多个VLAN的报文,可以用于交换机之间连接,也可以用于连接用户的计算机。Hybrid端口和Trunk端口的不同之处在于Hybrid端口可以允许多个VLAN的报文发送时不打标签,而Trunk端口只允许缺省VLAN的报文发送时不打标签。

各种类型:

  • Access (接收) Tagged = PVID 不接收 注:部分高端产品可能接收。
  • Access (接收) Tagged =/ PVID 不接收 注:部分高端产品可能接收。
  • Access (接收) Untagged 接收 增加tag=PVID 从PC
  • Access (发送) Tagged = PVID 转发 删除tag
  • Access (发送) Tagged =/ PVID 不转发 不处理
  • Access (发送) Untagged 无此情况
  • Trunk (接收) Tagged = PVID 接收 不修改tag
  • Trunk (接收) Tagged =/ PVID 接收 不修改tag
  • Trunk (接收) Untagged 接收 增加tag=PVID
  • Trunk (发送) Tagged = PVID If Passing then 转发 删除tag
  • Trunk (发送) Tagged =/ PVID If Passing then 转发 不修改tag
  • Trunk (发送) Untagged 无此情况
  • Hybrid (接收) Tagged = PVID 接收 不修改tag 对端是trunk
  • Hybrid (接收) Tagged =/ PVID 接收 不修改tag 对端是trunk
  • Hybrid (接收) Untagged 接收 增加tag=PVID 类Trunk
  • Hybrid (发送) Tagged = PVID Tag 和 untag 中列出的vlan可以passing 看Tag项和untag项
  • Hybrid (发送) Tagged =/ PVID Tag 和 untag 中列出的vlan可以passing 看Tag项和untag项
  • Hybrid (发送) Untagged 无此情况

解释:

  • 收报文:Acess端口1、收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则直接丢弃(缺省)
  • 发报文:Acess端口: 1、将报文的VLAN信息剥离,直接发送出去
  • 收报文:trunk端口: 1、收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有判断该trunk端口是否允许该 VLAN的数据进入:如果可以则转发,否则丢弃
  • 发报文:trunk端口: 1、比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,如果不相等则直接发送
  • 收报文: hybrid端口: 1、收到一个报文 2、判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则判断该hybrid端口是否允许该VLAN的数据进入:如果可以则转发,否则丢弃
  • 发报文:hybrid端口:1、判断该VLAN在本端口的属性(disp interface 即可看到该端口对哪些VLAN是untag, 哪些VLAN是tag)2、如果是untag则剥离VLAN信息,再发送,如果是tag则直接发送

1.1.4 VLAN 的不足

  • VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。
  • VLAN 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。
  • VLAN 操作需手工介入较多,这对于管理成千上万台机器的管理员来说是难以接受的。

1.2   二层交换的基础知识


1.2.1 二层交换机最基本的功能
二层交换机最基本的功能包括:

  • MAC 地址学习:当交换机从它的某个端口收到数据帧时,它将端口的 ID 和帧的源 MAC 地址保存到它的内部MAC表中。这样,当将来它收到一个要转发到该 MAC 地址的帧时,它就知道直接从该端口转发出去了。
  • 数据帧转发:交换机在将从某个端口收到数据帧,再将其从某个端口转发出去之前,它会做一些逻辑判断:
    • 如果帧的目的 MAC 地址是广播或者多播地址的话,将其从交换机的所有端口(除了传入端口)上转发。
    • 如果帧的目的MAC地址在它的内部MAC表中能找到对应的输出端口的话(MAC 地址学习过程中保存的),将其从该端口上转发出去。
    • 对其它情况,将其从交换机的所有端口(除了传入端口)上转发。
  • 加 VLAN 标签/去 VLAN 标签:
    • 帧接收:从 trunk port 上收到的数据帧必须是加了标签的。从 access port 上收到的数据帧必须是没有加标签的,否则该帧将会被抛弃。
    • 帧处理:根据上述转发流程决定其发出的端口。
    • 帧发出:从 trunk port 发出的帧是加了标签的。从 access port 上发出的帧必须是没加标签的。

默认情况下,交换机的所有端口都处于VLAN 1 中,也就相当于没有配置 VLAN。该机制说明如下:

071303288146612.jpg
(图4)

  • PC A 发一个帧到交换机的 1 端口,其目的MAC地址为 PC B 的 MAC。
  • 交换机比较其目的 MAC 地址和它的内部 MAC Table,发现它不存在(此时表为空)。在决定泛洪之前,它把端口 1 和 PC A 的 MAC 地址存进它的 MAC Table。
  • 交换机将帧拷贝多份,分别从2和3端口发出。
  • PC B 收到该帧以后,发现其目的 MAC 地址和他自己的 MAC 地址相同。它发出一个回复帧进入端口3。
  • 交换机将 PC B 的 MAC地址和端口3 存在它的 MAC 表中。
  • 因为该帧的目的地址为PC A 的 MAC 地址它已经在 MAC 表中,交换机直接将它转发到端口1,达到PC A。

配置了 VLAN 的交换机的该机制类似,只不过:

(1)MAC 表格中每一行有不同的 VLAN ID。做比较的时候,拿传入帧的目的 MAC 地址和 VLAN ID 和此表中的行数据相比较。如果都相同,则选择其 Ports 作为转发出口端口。

071307451275506.jpg
(图5)

(2)如果没有吻合的表项,则将此帧从所有有同样 VLAN ID 的 Access ports 和 Trunk ports 转发出去。

1.2.2 Address Resolution Protocol (ARP) 原理
二层网络使用 MAC (media access control address)地址作为硬件的唯一标识。基于 TCP/IP 协议的软件使用 ARP 来将 IP 地址转化为 MAC 地址。
1. 目的 IP 地址在同一网段的话

IC196937.gif
(图6)

    该示例中,Host A 和 B 在同一个网段中。A 的 IP 地址是 10.0.0.99,B 的 IP 地址是 10.0.0.100。当 A 要和 B 通信时,A 需要知道 B 的 MAC 地址。该过程经过以下步骤:

(1)A 上的 IP 协议栈知道通过B 的 IP 地址可以直接到达 B。A 检查它的本地 ARP 缓存来看B 的 MAC 地址是否已经存在。
(2)如果A 没有发现B 的 MAC 地址,它发出一个 ARP 广播请求,来询问“10.0.0.100 的 MAC 地址是什么?”,该数据包:

[mw_shl_code=bash,true]SRC MAC: A 的 MAC
DST MAC:FF:FF:FF:FF:FF:FF
SRA IP: A 的 IP
DST IP: B 的 IP[/mw_shl_code]

(3)该网段中所有的电脑都将收到该包,并且会检查 DST IP 和自己的IP 是否相同。如果不同,则丢弃该包。Host B 发现其IP 地址和 DST IP 相同,它将 A 的 IP/MAP 地址加入到自己的ARP 缓存中。
(4)B 发出一个 ARP 回复消息

[mw_shl_code=bash,true]SRC MAC: B 的 MAC
DST MAC:A 的 MAC
SRA IP: B 的 IP
DST IP: A 的 IP[/mw_shl_code]

(5)交换机直接将该包交给 host A。A 收到后,将 B 的 MAC/IP 地址缓存到 ARP 缓存中。
(6)A 使用 B 的 MAC 作为目的 MAC 地址发出 IP 包。

2. 目的IP 地址不在同一个网段的话

IC196938.gif

(图7)


本例子中,A 的地址是 10.0.0.99, B 的地址是 192.168.0.99。Router 的 interface 1 和 A 在同一个网段,其IP 地址为10.0.0.1;interface 2 和 B 在同一个网段,其IP地址为 192.168.0.1。 A 使用下面的步骤来获取 Router 的 interface 1 的 MAC 地址。

(1)根据其路由表,A 上的 IP 协议知道需要通过它上面配置的 gateway 10.0.0.1 才能到达到 B。经过上面例子中的步骤,A 会得到 10.0.0.1 的 MAC 地址。
(2)当 A 收到 Router interface 1 的 MAC 地址后,A 发出了给B 的数据包:

[mw_shl_code=bash,true]SRC MAC: A 的 MAC
DST MAC:Router 的 interface 1 的 MAC 地址
SRA IP: A 的 IP
DST IP: B 的 IP[/mw_shl_code]

(3)路由器的 interface1 收到该数据包后,根据其路由表,首先经过同样的ARP 过程,路由器根据 B 的 IP 地址通过 ARP 获得其 MAC 地址,然后将包发给它。

[mw_shl_code=bash,true]SRC MAC: Router interface 2 的 MAC
DST MAC:B 的 MAC
SRA IP: A 的 IP
DST IP: B 的 IP[/mw_shl_code]


相关内容:


neutron系列:Neutron 所实现的虚拟化网络(1)


neutron系列:Neutron 所实现的虚拟化网络(2)

neutron系列:使用 Open vSwitch + VLAN 组网(3)

neutron系列:使用 Open vSwitch + VLAN 组网(4)

Neutron系列 : 使用Open vSwitch + GRE/VxLAN 组网 (5)

Neutron系列 : 使用Open vSwitch + GRE/VxLAN 组网(6)

Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)

Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(8)

Neutron系列 : Neutron 是如何向 Nova 虚机分配固定IP地址的(9)

Neutron系列 : Neutron 是如何向 Nova 虚机分配固定IP地址的(10)

Neutron 系列 (11): Neutron 是如何实现负载均衡器虚拟化的【基础篇】

Neutron 系列 (12): Neutron 是如何实现负载均衡器虚拟化的【提高篇】

Neutron 系列 (13): Neutron 是如何实现虚机防火墙的 【上】

Neutron 系列 (14): Neutron 是如何实现虚机防火墙的 【下】

Neutron 系列 (15): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的

Neutron 系列(16):虚拟专用网(VPN)虚拟化

Neutron 系列 (17): Neutron 分布式虚拟路由【上】

Neutron 系列 (18): Neutron 分布式虚拟路由【下】

Neutron系列(19):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)【上】

Neutron系列(20):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)【下】

Neutron系列(21):OpenStack 高可用和灾备方案 [OpenStack HA and DR]【上】

Neutron系列(22):OpenStack 高可用和灾备方案 [OpenStack HA and DR]【下】










已有(2)人评论

跳转到指定楼层
轩辕依梦Q 发表于 2015-12-7 10:25:59
mark一下,备用噢
回复

使用道具 举报

月如钩 发表于 2015-12-7 11:19:29
有点用 谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条