在二层交换机上有三种转发方式:

1.直通转发(cut-through switching )

2.存储转发(Store-and-Forward switching)

3.无碎片转发(segment-free switching)

由于第三种方法主要是第一种“直通转发”的变形,所以只着重介绍第一二种方法。



无论式直通转发还是存储转发都是一种二层的转发方式,而且它们的转发策略都是基于 目的MAC(DMAC)的,在这一点上这两种转发方式没有区别。

它们之间的最大区别在于,它们何时去处理转发,也就是交换机怎样去处理数据包的接收进程和转发进程的关系。下面具体来看

存储转发(Store-and-Forward switching):

存储转发是一种传统的转发方式,是最早使用的一种转发方法。








(图一)  

如图一所示,这是一个数据帧的结构图,首先需要说的一点是:数据进入交换机是从图中的左向右进入的,也就是先从”Preamble"这个起始字段进入,不要理解反了,虽然这个问题很bc,不过我发现确实有人存在这个问题。

下面我来描述一下存储转发的过程:首先交换机启动接收进程,开始收取帧,从"Preamble"字段开始,一直到最后的CRC,当这个完整的帧收取完成之后,交换机开始启动转发进程,根据接收帧所示的DMAC,也就是目标MAC地址来决定转发策略,如果在MAC地址表中存在那么转发到相对应的端口,如果不存在则泛洪到所有端口。

这样的一个转发过程就带来了一些关于存储转发的特征:

1.错误检验功能

这里先来介绍一下CRC,对于CRC的具体定义我们可以不管,我们只需知道CRC的作用是对前面的数据进行校验,防止出错。

由于存储转发 只有当收取了整个帧之后才开始转发进程,所以当收取到CRC字段的时候,可以进行错误的校验,交换机把已经收到的数据进行CRC计算,把计算出来的值同接收到的CRC字段的值进行比较,如果两者相同则说明数据没有被破坏,如果不同则说明已经破坏。

2.自动缓存。这个不用多说,主要体现了存储转发的存储功能。

3.策略功能。换句话说也就是ACL访问控制列表的功能,访问控制列表主要是通过策略来对数据进行控制,ACL所涉及的控制层面从OSI的第二层到第七层都有,既然存储转发把整个帧都存储下来了,那么可以想像如果交换机拥有了处理多层数据的能力就可以执行ACL了,毕竟ACL所参照的目标在接收的帧中都已经存在了。



以上是存储转发的一些特点,可以看到存储转发所能提供的特点还是很具有诱惑力的,也很完善,但是存储转发有一个致命的弱点就是速度问题。转发帧的时候先存储,然后进行处理之后才能放到转发队列中,这样繁琐的过程会影响响应速度,也就造成了高延迟的现象。



为了解决 存储转发 的时间问题,开发出了直通转发 方法。下面我们继续来看:

能开发出直通转发是需要理论基础的,在前文我已经说过了,二层交换机的转发是二层转发,也就是说交换机转发的策略是基于二层的,是基于MAC地址的,更具体的说是基于目标MAC(DMAC)的。这样如果想要加快转发速度我们根本就没有必要等一个完整的帧收取之后再转发,理论上最快只需要等收到目标MAC之后就可以开启转发进程。






  

这就是直通转发的基本原理,同时也给它带来了一些特点:

1.失去了错误检查的能力

由于直通转发过程根本就没有接收到完整的数据包就进行转发了,所以无法进行CRC校验,也就无法进行错误检查,这个工作只能落在HOST上了。

2.加快了转发速度,减少了延迟。对比两种交换原理,不难看出在速度上是有很大提高的。

3.ACL?

上文说了,存储转发可以启用ACL,那么在直通转发可以吗?

这个也是可以的。我们要把握这一条:直通转发是灵活的,这才是直通转发的精髓,直通转发最少要检测到DMAC之后才可以开启转发进程,但是也可以多等一段时间,多收取一些数据(IP层,传输层)再开始转发,它是十分灵活的。如果我们要启用ACL或者是QoS就可以在直通转发的策略上进行设置。

举例来说,如果交换机从F0/1接收数据,在这个接口上启用了基于IP的ACL,这样直通转发就会当接收到IP包头之后才基于ACL启动转发进程,决定是否转发。当然,如果启动了基于UDP的ACL,这样直通转发就会等到接收到UDP头的时候才启动转发进程,决定是否转发。

如果在接口上没有设置ACL,直通转发进程也一般会读取IP包头之后才启动转发进程。

4.EtherType Field

其实在上面的一段中是有一个问题的,不知道大家发现没有,那就是如果在f0/1上发送的不是基于IP的包,那么直通进程怎么判别呢?是收到MAC之后就转发还是多收取一部分数据再转发?为了解决这个问题就需要EtherType Field,在图一中可以发现这个区域是帧头的最后一个,里面记录了高层(第三层)是什么类型,直通转发读取到这一层之后就可以判别了。拿上面的例子来说,如果接收的第三层包不是基于IP的,那么也就不收到IP ACL的限制了。



还有一种转发方式叫做“无碎片转发”这种转发方式其实是和直通转发一样的,只是比直通转发收取了更多的信息之后再进行转发,无碎片转发就是收取64字节才开始转发的,减少了转发出错的几率。



另外我还是再简单的讲一下为什么要把64字节做一个“坎”:在一个正确设计的网络中,冲突的发现会在源发送64个字节之前发现,当出现冲突之后源会停止继续发送但是这一段小于64字节的不完整以太帧已经被发送出去了,但是它是没有意义的,所以检查64字节以前就可以把这些“碎片”帧DROP掉。这也是“无碎片转发”名字的由来。



其实在直通转发中还有许多特性,但是这所有特性都是一种基于策略的,比如ChannelPort的负载均衡可能根据SMAC,DMAC或者DIP, SIP,甚至是UDP,TCP来决定的,把这些数据经过散列计算之后出现的数值来进行不同端口的发送,而要实现这一功能需要的就是SMAC,DMAC, SIP,DIP,UDP,TCP这些信息,而直通转发只要多等一段时间收集信息之后就可以了,本质上跟上文举出的特点是一样的。



不过,由于现在网络速度的加快和内部CPU处理速度的增强,直通转发和无碎片转发的速度优势已经不那么明显了,它们不能检验错误的弱点逐渐明显。



另:如果在两个不同的媒体介质上传播数据,必须使用存储转发方式。



参考资料:Cisco Documents NO.C11-465436-00 04/08

《Cisco Press LAN Switching》 Clark.2002

作者:lqik1988