交換機鏈路聚合負載的均衡演算法原理
阿新 • • 發佈:2019-01-05
HASH表介紹:
在交換機內部,每建立一個聚合組時,底層同時建立對應該聚合組的一個hash表,該表存在於交換晶片上,hash表內容如下(簡化):左列index為晶片的硬性支援,現在一般是256,512,1024,更高的未見過。index數量越高,負載分擔越均衡。這兒以3個成員為例:index | interface |
0 | eth0_0 |
1 | eth0_1 |
2 | eth0_2 |
3 | eth0_0 |
4 | eth0_1 |
5 | eth0_2 |
. | . |
. | . |
. | . |
1022 | eth0_0 |
1023 | eth0_1 |
HASH表維護:
交換機裡有專門的執行緒,實時檢測聚合組有效成員,一旦成員狀態發生變化,立即重新整理hash表項。順便談談重新整理HASH表這個技術。工程師up/down成員口,底層就必須實時的重新整理成員(這兒比較考驗廠商技術),重新整理速度越慢,成員狀態變動時丟包越多。技術最強的如cisco,可以做到up/down成員口時,不丟包。而我公司最初會丟一秒鐘的包(研發設計思路問題)。後來優化後才達到up/down成員埠,有0.0幾秒的丟包,無法做到不丟包。up/down分析:當工程師在命令列up/down聚合組成員時,底層表項會有那麼一丁點兒的響應時間重新整理表項,這丁點兒時間,已經down掉的介面還存在hash表裡,而報文是一直都有的,正好被hash到這個無效的出埠的報文都會被丟棄!)交換機負載均衡轉發原理:
雖然底層有了一張HASH表,那麼到底是怎麼利用這張表的呢?1)工程師設定埠成員與HASH演算法,如SIP、DIP、SIP+DIP、SIP+DIP+SP+DP等。2)交換機根據成員生成HASH表,根據演算法提取報文中相應內容。3)使用特定HASH值的計算方法,把提取的內容計算出一個10bits的值。4)找到底層HASH表項中該值對應的出埠。5)把報文從這個出埠轉發出去。HASH值的計算方法:
xor是異或運算,即兩個值不相同,則異或結果為真;反之,為假。不同為1,相同為0。1、SIP(源IP)1)SIP xor 0 得到一個32bit的值.
2)然後作高16bits和低16bits的xor.
3)再用16bits的15-12bits與11-8bitsxor,將得到的4bits替換到11-8bits,得到12bits右移2位得到10bits的hash值
注:10bits的值必然是0-1023裡的一個數,該index對應的interface是多少,就從該介面轉發出去。(相同的IP必然是相同的hash值)
2、DIP(目的IP)
同SIP
3、SIP+DIP(源IP+目的IP)
1)DIP xor SIP得到一個32bits的值。
2)然後作高16bits和低16bits的xor。
3)再用16bits的15-12bits與11-8bitsxor,將得到的4bits替換到11-8bits,得到12bits右移2位得到10bits的hash值。
4、SIP+DIP+SP+DP(源地址 + 目的地址 + 源埠 + 目的埠)
1)SIP xor DIP得到32bit的值value12)hashtemp1的低16bits xor SP 得到32bit的hashtemp23)hashtemp2 的低 16bit xor DP 得到 32bit 的hashtemp34)然後作高16bits和低16bits的xor5)再用16bits的15~12bits和11~8bits xor,將得到的4bits替換到11~8bits,得到12bits右移2位得到10bits的hash值