交换机的 直通转发 和 存储转发
(1)、直通交换bai方式(Cut-through)
采用直通交换方du式的以太网zhi交换机可以理解为在各dao端口间是纵横交叉的线路矩阵电话交换机。它在输入端口检测到一个数据包时,检查该包的包头,获取包的目的地址,启动内部的动态查找表转换成相应的输出端口,在输入与输出交叉处接通,把数据包直通到相应的端口,实现交换功能。由于它只检查数据包的包头(通常只检查14个字节),不需要存储,所以切入方式具有延迟小,交换速度快的优点。所谓延迟(Latency)是指数据包进入一个网络设备到离开该设备所花的时间。
它的缺点主要有三个方面:一是因为数据包内容并没有被以太网交换机保存下来,所以无法检查所传送的数据包是否有误,不能提供错误检测能力;第二,由于没有缓存,不能将具有不同速率的输入/输出端口直接接通,而且容易丢包。如果要连到高速网络上,如提供快速以太网(100BASE-T)、FDDI或ATM连接,就不能简单地将输入/输出端口“接通”,因为输入/输出端口间有速度上的差异,必须提供缓存;第三,当以太网交换机的端口增加时,交换矩阵变得越来越复杂,实现起来就越困难。
(2)、存储转发方式(Store-and-Forward)
存储转发(Store and Forward)是计算机网络领域使用得最为广泛的技术之一,以太网交换机的控制器先将输入端口到来的数据包缓存起来,先检查数据包是否正确,并过滤掉冲突包错误。确定包正确后,取出目的地址,通过查找表找到想要发送的输出端口地址,然后将该包发送出去。正因如此,存储转发方式在数据处理时延时大,这是它的不足,但是它可以对进入交换机的数据包进行错误检测,并且能支持不同速度的输入/输出端口间的交换,可有效地改善网络性能。它的另一优点就是这种交换方式支持不同速度端口间的转换,保持高速端口和低速端口间协同工作。实现的办法是将10Mbps低速包存储起来,再通过100Mbps速率转发到端口上。
(3)、碎片隔离式(Fragment Free)
这是介于直通式和存储转发式之间的一种解决方案。它在转发前先检查数据包的长度是否够64个字节(512 bit),如果小于64字节,说明是假包(或称残帧),则丢弃该包;如果大于64字节,则发送该包。该方式的数据处理速度比存储转发方式快,但比直通式慢,但由于能够避免残帧的转发,所以被广泛应用于低档交换机中。
使用这类交换技术的交换机一般是使用了一种特殊的缓存。这种缓存是一种先进先出的FIFO(First In First Out),比特从一端进入然后再以同样的顺序从另一端出来。当帧被接收时,它被保存在FIFO中。如果帧以小于512比特的长度结束,那么FIFO中的内容(残帧)就会被丢弃。因此,不存在普通直通转发交换机存在的残帧转发问题,是一个非常好的解决方案。数据包在转发之前将被缓存保存下来,从而确保碰撞碎片不通过网络传播,能够在很大程度上提高网络传输效率。
------------------------------------------------------------------------------
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