1. 程式人生 > >交換機鏈路聚合負載的均衡演算法原理

交換機鏈路聚合負載的均衡演算法原理

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值