让我们聊聊交换机

时间飞逝,从业已经3年有余,前几日有位同仁问我为什么他的程序吞吐为什么上不去,当他跟我阐述了他们的IDC结构和部署情况后,发现并不是这位同仁的错,都是XXX的错。很多研发的同仁对交换机没有一个明确的认知。今天我们就聊聊交换机的一些东西。

首先是pps是什么?这难道不是传说中的xxx流媒体软件?当然不是,在这里pps的意思是Packet Per Second,每秒钟传输的数据包的数。那好了,这东西是怎么算出来,又有什么用呢?我先说下怎么计算,假定我们是1个10Mbps的网络端口,那么我们就有以下的算式了,10M/[(64+12+8)*8]=14.881Kpps 其中64代表以太网最小包,12代表以太网祯间隙,第一个8代表以太网帧头大小,第二个8代表1 byte=8 bit。到此我们知道怎么计算了,那么这个东西又有什么用呢,这就告诉我们,在这条线路上,我们最大的转发速度就是这些,10Mpbs的网卡接口最大转发速度每秒钟不能超过15K,同时这是我们计算交换机背板带宽和交换机包转发率的一个重要参数。

那么什么是背板带宽?背板带宽是交换机接口处理器或接口卡和数据总线间所能吞吐的最大数据量。背板带宽标志了交换机总的数据交换能力。那么交换机的包转发率又代表什么呢?包转发率代表交换机转发数据包能力的大小。我们可以通过,所有类型端口pps*该类型端口数量之和的2倍这个方式计算出,例如 1个千兆+4个百兆的端口的交换机,需要 (1.488Mpps + 4 * 0.1488Mpps) * 2 = 4.1664Mpps的转发速率,达到全双工无阻塞也是交换机最理想的状态,当我们达到(1.488Mpps + 4 * 0.1488Mpps)  = 2.0832Mbps的时候,我们则可认为这个交换机在所有端口在线速工作时候达到了无阻塞状态。那么背板带宽怎么算呢?所有类型端口传输*该类型端口数量之和的2倍这个方式计算出,例如一个1个千兆+4个百兆的端口的交换机,需要 (1Gbps+ 4 * 0.1Gbps) * 2 = 2.8Gbps,当我们的背板带宽达到这些,我们才可以认为在全双工模式下背板的带宽是充足的。当背板带宽大于交换机的包转发速率* [(64+12+8)*8],我们就可认为背板带宽满足交换需求,但是不代表满足全双工无阻塞交换。

我们在来看看交换方式是什么,交换方式代表一个以太网包通过端口A转发到端口B时,交换机内部是如何处理的。常见的交换方式有,直通式,存储转发式,碎片隔离式。直通式,顾名思义,就是从端口A直接转发到端口B,除了读取下以太网帧的头直接找出目的端口B是谁,直接将包发给端口B。存储转发式,交换机先将输入端口到来的数据包缓存起来,先检查数据包是否正确,并过滤掉冲突包错误,确定包正确后,取出目的地址,通过查找表找到想要发送的输出端口地址,然后将该包发送出去。碎片隔离式则是介于直通式和存储转发式之间的一种解决方案,在这个模式下如果发现一个以太网帧小于64字节,则会被丢弃,从而确保碰撞碎片不通过网络传播,能够在很大程度上提高网络传输效率。

好了那么这些交换方式有什么差异呢?直通式,传输时延非常小,但是当出现千兆端口向百兆端口转发的时候,由于速率不匹配容易出现丢包现象,同时由于只读取了目标地址而不进行包完整性和正确性检测,很容易出现碰撞碎片在网络上传播。存储转发的方式解决了直通方式的问题,但是带来的问题是增加了时延。碎片隔离式,避免了长时延和碰撞碎片在网络上传播,但是缺少存储的过程,依然无法解决高速端口向低速端口转发丢包的情况。

到此为止,我们讲了交换机中3个比较重要的参数,那么和我们开发有什么关系呢。当然有很大的关系了,根据rfc894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说我们可以得出,一个完整的以太网传输为12字节帧间隙 + 8字节帧头 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS。因此我们就可以计算出来

端口速率/(20+平均ip包大小+12+8)= xpps,其中这个x就代表,我们1秒钟可以发出多少个数据包。如果我们的应用在1秒钟发送超出这个数量的包,就会产生丢包重传的可能性,如果我们的交换机的包交换率无法达到x * 端口数的时候,就会出现我们的系统完全满跑的时候,瓶颈出现在了交换机上,网络时延变大。总结一句话,不要认为所有的千兆交换机都是一样的,在轻负载的时候也许没问题,当你系统满载的时候,就会出现瓶颈吞吐反而一落千丈和你的估算值相差甚远的情况。







你可能感兴趣的:(网络编程,交换机,以太网,背板带宽,包转发率)