/ 中存储网

从二层转发层面对比下openflow和传统交换机

2015-01-04 14:37:00 来源:存储论坛

二层转发和Vlan陷阱

通常来说,物理层的一串比特位到数据链路层后,会被组成帧,并做检验和校验——只有校验和通过的帧才被转发。转发的概念对于交换机来讲就是基于MAC地址的转发,最初的二层转发设备是仅仅基于MAC地址的,用于局域网(LAN),后来由于广播泛滥和通信安全性的考虑,采用vlan对不同的通信域进行隔离。Vlan(虚拟局网,Virtual Local Area Network)是不是网络上第一个网络虚拟化的技术我不清楚,但是是我接触到的第一个网络虚拟化技术。

MAC地址就是每个网络设备上的物理地址,

Vlan技术是通过对原来的报文在MAC地址头后加入4byte的数据来识别和标志vlan,具体如下:

说明: 从二层转发层面对比下openflow和传统交换机

其中TYPE ID(简称TPID)例子中是0×8100,其实这个不是必须的,稍微高级点的交换芯片都支持配置,这个功能称为Q-IN-Q;因为处于二层隧道或者vlan id不够用的用途,可以给一个报文打上两个vlan tag,并且两个vlan tag的TPID可以不同,也可以相同。而对于报文能灵活删添或修改vlan tag的功能称之为灵活Q-IN-Q。

后面的3bit user priority用于一般称之为COS值,用于二层QOS功能,再后面的1bit就是前面文章说的CFI(Canonical Format Indicator),为0表示该帧格式为用于802.3或EthII封装,常用于以太网类网络和令牌环类网络之间,如果在以太网端口接收的帧具有CFI,那么设置为1,表示该帧不进行转发

自从vlan技术出现后,二层转发在交换机中便不再是仅仅基于MAC地址的学习和转发,而是基于mac vlan的学习和转发,下面结合BCM和MVL等芯片厂商的处理过程介绍下大致流程如下:

说明: 从二层转发层面对比下openflow和传统交换机

其实转发的过程比较简单,需要说明的是以下几点:

1. 对于SMAC=DMAC的攻击报文高级的交换芯片可配置直接丢弃;

2. Vlan tag的识别和获取过程很复杂,后续详细介绍;

3. SMAC Vid的查找通常可以的,但是某些芯片内部一个没有tag的报文怎么处理?这个不同芯片处理方式不同,即使是同一个厂商的,有的是丢弃,有的是广播,有的是可配;

4. DMAC 为0x0180c2开头的报文主要用于一些二层协议报文,包括流控,LLDP,LACP等;

5. 交换机芯片通常进行报文单播和广播,默认不开启组播功能,但是从数学角度讲,单播和广播都可以看做是组播的两个边界值;这和物理学的很多定理类似,理论学习时推广到通常的公式很难,但是实际上经常发生的情形却是理论上极为简单的几种特殊情况;另外,如果DMAC VID 查找不到相应的表项,默认动作是广播到除源端口外的所有端口,通常交换芯片也可以配置为丢弃、上CPU等动作。

6. 二层组播的协议主要有IGMP等,原理有很多地方可以参考,现在主要有三个版本,二层组播和三层组播的MAC和IP对应关系为:

说明: 从二层转发层面对比下openflow和传统交换机

7. 二层里报文没有防止成环的字段,这就导致一旦链路有环,将会发生极其灾难的事故,随之提出STP协议来解决这个问题,但是STP协议随着网络规模的扩大,到100台网络设备的规模的时候,一旦网络拓扑发生变化,其响应适应网络变化的能力就会被体现的体无完肤;虽然后来提出了RSTP、MSTP等改进,但是依然跑脱不了对链路带宽的浪费等缺陷,直至提出了复杂的trill协议;所以三层报文IP头部设计的时候就考虑了TTL这个防环的字段;

8. 每个端口都有自己的MTU,当CPU通过端口发包时,在协议栈是可以对报文分片的,这个时候分片的依据是该vlan内的所有端口的最小MTU值;

9. 为了实现不同vlan的端口能相互通信,引入了端口的trunk属性的概念,可以实现一个端口属于多个vlan,从而实现多个vlan间的通信;这个概念是将端口分为三类:Access,trunk,hybrid;交换机所有端口默认是access口,此口出入只转发vlan id和端口 native vlan相同的报文;trunk口时能出入转发所有vlan id的报文,这里的所有是指交换机上已经创建的vlan,但是出去的时候如果vlan id和native id相同则删掉TAG将报文转出去,否则带tag转发出去;hybrid则是可以任意单独配置端口所允许进入的各个vlan ID报文,以及转出报文是否带TAG;这个功能从数学上来讲和组播类似,可以将access和trunk看成hybrid的两个边界值;

10. 所有端口默认所属的vlan 是vlan1,交换机支持对端口的所属vlan进行更改;同样的对于二层QoS字段,对于没有tag的报文打tag的时候赋予什么样的COS值也是可以通过命令行来配置;

11.高级的交换芯片为了实现VLAN内部用户的隔离,提出了私有vlan的概念,即PVALN,并将端口设置为不同的属性,交换机端口有三种类型:Isolated port,Community port, Promiscuous port;它们分别对应不同的VLAN类型:Isolated port属于Isolated PVLAN,Community port属于Community PVLAN,而代表一个Private VLAN整体的是Primary VLAN,前面两类VLAN需要和它绑定在一起,同时它还包括Promiscuous port。在Isolated PVLAN中,Isolated port只能和Promiscuous port通信,彼此不能交换流量;在Community PVLAN中,Community port不仅可以和Promiscuous port通信,而且彼此也可以交换流量。

12.同Q-IN-Q一样,MAC地址也有MAC-IN-MAC的用途,又称PBB-TE,技术标准是IEEE802.1Qay,主要用于运营商骨干网,关闭组播后用来解决运营商骨干链路维护MAC表过大、对用户流量进行二次封装和隔离、并能防止成环和负载不均衡的情况出现;

13.MAC学习到硬件中需要通过中断的方式通知到CPU,这样软件中便可以有硬件MAC表的副本,便于显示和查询,以及通过ARP的概念将MAC和IP进行关联,决定路由是否下发硬件;

14.MAC都有一个老化的过程,即一段时间内即么有SMAC为这个MAC的报文也没有DMAC为这个MAC的报文,那么这个地址会在硬件表项中被删除(+微信关注网络世界),并通知上层软件;老化时间默认300秒,这个值是可以配置的,且根据芯片支持程度而不同,一般支持范围为60~1800秒;

Vlan tag的识别和获取是一个复杂的过程,因为涉及很多功能。下面是一个简单的流程图:

说明: 从二层转发层面对比下openflow和传统交换机

上面的流程中需要注意:

1. BCM和MVL的芯片处理流程少有不同,对各种vlan功能的支持程度也不太一样;

2. 灵活Q-IN-Q是通常基于TCAM来实现,匹配内层或外层的VID,设置动作是删除、添加或修改tag字段;

3. 二层表项的查找大部分表项是hash方式,少部分是tcam表项;

4. MAC表项的学习可以基于硬件,也可以是软学习;硬件学习成熟的芯片是可以完全线速的,某些通过并购来研发自己芯片的厂商在这方面支持度则略显不足;软学习可以更灵活和安全,因为每次的学习都要经过CPU的控制,但是速率要变慢的多;

5. MAC表项的大小不同芯片也不一样;

6. 当一个端口收到一个报文的SMAC VID已经有表项存在其他端口时,这个时候交换芯片需要根据配置判断是否将这个地址学习到新端口上,称之为MAC地址飘逸;这个是否飘逸的判断也是基于一些寄存器的设置来做的;

对于二层转发,Openflow标准中所有的表项均可以来做,匹配内容为DMAC 外层tag中的vlan ID,设置的动作为指定出端口;但是对于基于SMAC VID 的学习来说倒是不必支持的。例如一台openflow交换机连接了十几台服务器,服务器需要通过二层转发进行通信,那么所有服务器的第一个报文需要上controller,然后controller可以把报文中的SMAC VID 解析出来下发一条DMAC为该报文SMAC VID的表项,设置动作是所有该类型的报文均转发到该端口。

Openflow标准中对于vlan tag的动作和灵活Q-IN-Q是基本类似的,也支持对MAC-IN-MAC头部的处理:

说明: 从二层转发层面对比下openflow和传统交换机

对于灵活Q-IN-Q功能中对vlan tag的修改openflow规则可以用setfield动作来执行,并且openflow中还有strip vlan的动作来支持对vlan tag的删除动作。

用传统商业芯片来实现openflow来实现二层功能可以明显看出openflow支持的动作更多些,实现也更灵活 ;但是反过来,如果用传统的商业芯片去实现openflow的标准,可以很肯定的说,是无法完全支持最新的openflow标准的,具体的支持程度需要看各个厂家所用芯片和开发的力度。Openflow标准1.0版本就提出了对外VLAN tag处理和Q-IN-Q的支持,到1。2则丰富了对报文内外TAG的处理支持。Openflow的组播和广播是用类型为ALL的group的概念来实现的。

随着网络规模的扩大和网络虚拟化的发展,VLAN的个数成为了限制,大二层的出现,可以说是vlan有多大,虚拟机就能迁移多远;为了解决VLAN个数不足提出了大量技术,除了原来的Q-IN-Q等,为解决云计算中等相关的需求还提出了包括VXLAN、NVGRE等新兴技术,这些在后面再提及。可以说VLAN技术的出现解决了大量实际应用中的问题,并和其他网络技术有着千丝万缕的关联,但是在云计算的今天为了解决VLAN个数不足的问题需要引入大量新技术来解决,这些不仅对网络设备提出了更高的要求,而且从新技术来看都采用了封装,这也会导致数据传输效率的降低,也可能随之带来网络安全方面的问题。