深入淺出多網絡卡繫結技術

2021-06-17 17:05:28 字數 1346 閱讀 7234

在儲存系統中為了提高後端裝置的吞吐量,往往需要採用多網絡卡

繫結技術。例如,後端儲存最大能夠提供300mb/s的吞吐量,因此需要採用3塊1gps的網絡卡

併發傳輸才可以達到峰值效能。那麼,從研發的角度來看如何實現多網絡卡繫結呢?這裡對提高吞吐量用途的多網絡卡繫結技術進行深入分析。

多網絡卡繫結一方面能夠提高網路吞吐量,另一方面也可以增強網路高可用。這裡對高可用應用的多網絡卡繫結技術不做討論。從軟體的角度來看,多網絡卡繫結實際上只需要提供乙個額外的bond驅動程式

即可,通過該虛擬網絡卡驅動程式

可以將實際多塊網絡卡遮蔽,對tcp/ip協議層而言只存在乙個bond網絡卡。在bond驅動程式中實現網路流量的負載平衡(load balance),將乙個網路請求重定位到不同的網絡卡(nic)上,以此來提高總體網路的效能。多網絡卡繫結的軟體層次架構如下圖所示:

考慮一下,為了繫結多塊網絡卡,其技術難點在於什麼地方?網路交換機

是通過實體地址進行埠路由的,對於不支援ieee802.3ab協議的普通交換機

而言,其只能連線不同實體地址的網絡卡,否則交換機將會無法正常工作。每個網路介面卡具備乙個ip位址,而每個ip位址又通過arp協議和乙個mac位址繫結在一起。由此分析,在沒有交換機的配合下,我們很難實現想象中完美的多網絡卡繫結通訊模型:

如果arp協議能夠支援將乙個ip位址對映到多個mac位址,那麼在bond驅動層我們完全可以實現上圖所示的多網絡卡繫結通訊模型。在實際ip網路中,為了達到上述繫結效果,需要交換機的802.3ab協議支援,通過交換機實現round robin

方式的網絡卡繫結,純軟體方法無法做到。基於802.3ab協議的多網絡卡繫結如下圖所示:

在802.3ab的支援下,server端所有網絡卡的mac位址全部配置

成乙個,例如mac-a,然後在交換機端將這些埠聚合起來。交換機在接收到資料報文之後會輪詢這些埠將資料報文傳送給bond驅動,bond驅動想傳送資料的時候同樣通過輪詢方法將資料報文交給不同網絡卡進行傳輸。這種方法可以對client端進行透明,從整體架構上來說比較簡單,唯一缺點是需要交換機的支援。個人認為對於儲存系統而言,這種方案是目前網絡卡繫結的最佳方式。

除了交換機支援的解決方案之外,當然我們也可以採用純軟體的方法,只不過這種繫結在有些應用中有所侷限。一種比較簡單的繫結思想是只對transmit進行繫結(linux bond5 mode)。該繫結模型如下圖所示:

在儲存應用中,需要考慮雙向資料傳輸的吞吐量,上述解決方案存在資料接收瓶頸。那麼如何才能使得server進行高效的雙向資料傳輸呢?其關鍵問題在於需要讓client知道不同網絡卡的mac位址,上述解決方案中,所有的client只知道乙個mac位址。為了達到雙向傳輸的效果,bond驅動程式需要擷取arp報文和資料報文,並且修改mac位址。這種網絡卡繫結的資料傳輸模型(linux bond6 mode)如下圖所示:

深入淺出多網絡卡繫結技術

在儲存系統中為了提高後端裝置的吞吐量,往往需要採用多網絡卡繫結技術。例如,後端儲存最大能夠提供300mb s的吞吐量,因此需要採用3塊1gps的網絡卡併發傳輸才可以達到峰值效能。那麼,從研發的角度來看如何實現多網絡卡繫結呢?這裡對提高吞吐量用途的多網絡卡繫結技術進行深入分析。多網絡卡繫結一方面能夠提...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...