marvell芯片中的LACP中的trunk负载均衡是如何实现的

44 篇文章 18 订阅
2 篇文章 0 订阅

LACP:链路聚合控制协议
简单来说就是通过将多个端口合并成一条。报文通过时可以从这些端口来传输,那么传输的速率就是这些端口的总合,前提是这些端口的速率,自适应等配置是一样的。
那么它是怎么运作的呢?大家可以参考我的交换机笔记的5.10的翻译。
LACP是管理帧,管理帧的地址格式是01-80-C2-00-00-0X(X代表0-F共16个),而LACP的目的地址是0x01, 0x80, 0xC2, 0x00, 0x00, 0x02。
从端口来的报文是通过目的地址和源地址的低3位的异或来确定的,也可以使用哈希来确定。两者的区别稍后分析。那么可以认为它以上述的方法来区分报文,而报文在传输的时候只能通过一个端口比如来了5个报文,其中有2个目的地址和源地址相同,另外3个中其中一个的目的地址与源地址异或后与它相同,剩下的2个通过计算与其他的不同。那么报文可以分成3类,那么我将一些端口设置成聚合那么这些端口是如何被确定的呢?
首先看个图:
中继掩码图
上图的表格是在芯片内部预设的。前面讲到是通过低3位的组合来确定一个值的那么它的范围是2^3即8个即0-7。它的值代表选择哪一个TrunkMask,共8个每个掩码表的值是不一样的。那么它是如何运作的呢?
由上可知报文只能从一个端口出去,比如我设置端口3和端口4为聚合那么报文是如何确定从哪个端口出去的呢?是3还是4呢?
如果我设置的是端口3和4。那么中继的映射TrunkMap(映射)的值为00001100,而如果DA和SA的低3位异或之后的值是3,它选用TrunkMask[3]这个掩码即11101111,将它与TrunkMap相与得出00001000即只有3端口为1那么该DA和SA低3位异或的报文从第3口出去。而另有一个报文的DA和SA与之相同那么它同样从3口出去,而如果另有一报文来的时候其DA与SA的低3位异或后的结果为2,它的掩码01110111与00001100相与则为00010000即为从4口出。如果某个端口的低3位异或后是3呢?那么它会与第一种情况一样,那么会导致3号掩码使用的次数更多,这会导致有的端口发送的报文更多,微观来讲它是不均衡的。
所以会将DA和SA进行哈希处理,只有DA和SA完全相同的报文才会使用同一个掩码表其他的报文,即使使用同一掩码表也是哈希碰撞的结果,因为只有8位所以机率很大,但是它的随机性比没有用哈希的大得多,从宏观上讲所有的端口传输的数据数量是差距不大的。而不进行哈希处理的作用一般是用于检测和调试的。
那么有的同学会问了,我设置的是端口1234聚合它的映射是00001111与随便一个掩码相与就有好几个端口了吗?这不是与只能从一个端口出去矛盾吗?
那么我建议参考一下我的交换机笔记5.10中的说法,其实质就是通过软件编程的方法通过判断端口是否唯一来设置端口的映射,从而保证数据只从一个端口传输出去。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值