幾天有人在微信群里詢問bond相關的一些問題,在上家公司使用過bond功能,但當時是基于vpp 16.9版本。最近看了一下21.10版本的發現差異很大,bond node節點跳轉方式完全不同了。本文基于21.10搭建環境,通過cli來配置和驗證bond功能。
下面內容來自華為配置文檔介紹以太網鏈路聚合的定義及目的。
1、定義
以太網鏈路聚合Eth-Trunk簡稱鏈路聚合,它通過將多條以太網物理鏈路捆綁在一起成為一條邏輯鏈路,從而實現增加鏈路帶寬的目的。同時,這些捆綁在一起的鏈路通過相互間的動態備份,可以有效地提高鏈路的可靠性。
2、目的
隨著網絡規模不斷擴大,用戶對骨干鏈路的帶寬和可靠性提出越來越高的要求。在傳統技術中,常用更換高速率的設備的方式來增加帶寬,但這種方案需要付出高額的費用,而且不夠靈活。
采用鏈路聚合技術可以在不進行硬件升級的條件下,通過將多個物理接口捆綁為一個邏輯接口,達到增加鏈路帶寬的目的。在實現增大帶寬目的的同時,鏈路聚合采用備份鏈路的機制,可以有效的提高設備之間鏈路的可靠性。
鏈路聚合技術主要有以下三個優勢:
1、增加帶寬:鏈路聚合接口的最大帶寬可以達到各成員接口帶寬之和。
2、提高可靠性:當某條活動鏈路出現故障時,流量可以切換到其他可用的成員鏈路上,從而提高鏈路聚合接口的可靠性。
3、負載分擔:在一個鏈路聚合組內,可以實現在各成員活動鏈路上的負載分擔。
vpp bonding特性支持以下可選項目
1、mode:active-backup。此模式使用主備策略(熱備)。在所有bond的物理網卡中,同一時刻只有一張網卡被激活,當且僅當活動網卡失效時才會激活其他的網卡。這種模式下做bond的兩張或多張網卡的MAC地址和Bond虛擬網卡的MAC地址相同,而Bond的MAC地址是Bond創建啟動后活動網卡(Active Slave)的MAC地址。這種模式要求主備網卡能快速的切換,即當主網卡出現故障后能迅速地切換至備用網卡。
2、mode:lacp:動態鏈接聚合。動態LACP匯聚是一種系統自動創建/刪除的匯聚,不允許用戶增加或刪除動態LACP匯聚中的成員端口。只有速率和雙工屬性相同、連接到同一個設備、有相同基本配置的端口才能被動態匯聚在一起。即使只有一個端口也可以創建動態匯聚,此時為單端口匯聚。動態匯聚中,端口的LACP協議處于使能狀態。
- load-balance l2 | l23 | l34。#支持分擔模式。
- numa-only:只有lacp模式下支持numa-only配置。
3、mode xor 平衡策略
表示XOR Hash負載分擔,Hash模式支持如下:load-balance l2 | l23 | l34。#支持分擔模式。
4、mode round-robin:此模式使用輪詢策略,即順序的在每一個被bond的網卡上發送數據包,這種模式提供負載均衡和容錯能力。Bond0可以保證bond虛擬網卡和被bond的兩張或多張物理網卡擁有相同的MAC地址,其中bond虛擬網卡的MAC地址是其中一張物理網卡的MAC地址,而bond虛擬網卡的MAC地址是根據bond自己實現的一個算法來選擇的。
5、mode broadcast
使用廣播策略,數據包會被廣播至所有Slave網卡進行傳送。
利用wmware虛擬機搭建bond測試環境,每個虛擬機上存在5個虛擬網卡,其中2個綁定內核(1個用于ssh登錄,1個用于和vpp接口連接測試),其余給vpp綁定。具體如下圖:
1、虛擬機1配置
#創建bond接口并設置為up
create bond mode xor load-balance l34 hw-addr 11:22:33:44:55:66 id 2
set interface state BondEthernet2 up
#設置wan1和wan2up,并加入bond2接口。
set interface state GigabitEthernet13/0/0 up
set interface state GigabitEthernet1b/0/0 up
bond add BondEthernet2 GigabitEthernet13/0/0
bond add BondEthernet2 GigabitEthernet1b/0/0
#配置bond接口ip地址
set interface ip address BondEthernet2 192.168.100.1/24
#設置到learningvpp2的路由
ip route add 200.1.2.0/24 via 192.168.100.2
#設置與內核ens161連接接口并設置ip地址。
set interface state GigabitEthernetb/0/0 up
set interface ip address GigabitEthernetb/0/0 200.1.1.1/24
#設置內核ens161接口ip及配置到learning vpp2路由。
ifconfig ens161 up
ifconfig ens161 200.1.1.2/24
ip route add 200.1.2.0/24 via 200.1.1.1 dev ens161
2、虛擬機2配置
create bond mode xor load-balance l34 hw-addr 11:22:33:44:55:77 id 2
set interface state GigabitEthernet13/0/0 up
set interface state GigabitEthernet1b/0/0 up
set interface state BondEthernet2 up
bond add BondEthernet2 GigabitEthernet13/0/0
bond add BondEthernet2 GigabitEthernet1b/0/0
set interface ip address BondEthernet2 192.168.100.2/24
ip route add 200.1.1.0/24 via 192.168.100.1
set interface state GigabitEthernetb/0/0 up
set interface ip address GigabitEthernetb/0/0 200.1.2.1/24
ifconfig ens33 up
ifconfig ens33 200.1.2.2/24
ip route add 200.1.1.0/24 via 200.1.2.1 dev ens33
上面我們創建bond接口是設置模式xor,(balance-xor) XOR policy(平衡策略),lb設置l34(使用ip層+四層hash分擔因子)。分別使用ping 202.1.2.1和202.1.2.2來測試分擔情況,使用trace來查看流程。
trace節點后發現當前版本BondEthernet2-output后面未顯示后面處理邏輯了。查看了一個trace代碼BondEthernet2-tx 是作為trace 起點來處理的。當手動設置BondEthernet2-tx時發現報錯了。導致意思就是當前node不支持設置trace。node節點flags未置位。
learning_vpp1# trace add BondEthernet2-tx 10
trace add: node 'BondEthernet2-tx' doesn't support per-node tracing. There may be another way to initiate trace on this node.
#但是發現bond process node 置位了trace,此地一堆問號??
VLIB_REGISTER_NODE (bond_process_node)={
.function=bond_process,
.flags=VLIB_NODE_FLAG_TRACE_SUPPORTED,
.type=VLIB_NODE_TYPE_PROCESS,
.name="bond-process",
};
bond process node節點置位支持設置trace,但是bond porcess只是用來發送免費arp,此flags貌似也沒有什么用途吧。
疑問:為什么不直接BondEthernet2-tx增加trace相關處理代碼,代碼中偏偏作為trace起點??
通過gdb來設置BondEthernet2-tx flags標識位來支持trace,可以支持trace設置。
#709是BondEthernet2-tx node索引。
set var vlib_global_main.vlib_mains[0]->node_main.nodes[709]->flags=2 + 1 << 8
1、在learning vpp1上基于內核ping200.1.2.1 在learning vpp2上設置trace流程如下,報文從bond接口GigabitEthernet13/0/0回應。
00:13:21:048851: dpdk-input
GigabitEthernet1b/0/0 rx queue 0
IP4: 11:22:33:44:55:66 -> 11:22:33:44:55:77
ICMP: 200.1.1.2 -> 200.1.2.1
tos 0x00, ttl 63, length 84, checksum 0xf909 dscp CS0 ecn NON_ECN
fragment id 0xaf99, flags DONT_FRAGMENT
ICMP echo_request checksum 0x2aea id 21077
00:13:21:048934: bond-input
src 11:22:33:44:55:66, dst 11:22:33:44:55:77, GigabitEthernet1b/0/0 -> BondEthernet2
00:13:21:048976: ethernet-input
IP4: 11:22:33:44:55:66 -> 11:22:33:44:55:77
00:13:21:049009: ip4-input
00:13:21:049037: ip4-lookup
00:13:21:049066: ip4-local
00:13:21:049091: ip4-icmp-input
00:13:21:049118: ip4-icmp-echo-request
00:13:21:049150: ip4-load-balance
fib 0 dpo-idx 13 flow hash: 0x00000000
ICMP: 200.1.2.1 -> 200.1.1.2
tos 0x00, ttl 64, length 84, checksum 0x1026 dscp CS0 ecn NON_ECN
fragment id 0x977d, flags DONT_FRAGMENT
ICMP echo_reply checksum 0x32ea id 21077
fib 0 dpo-idx 2 flow hash: 0x00000000
ICMP: 200.1.2.1 -> 200.1.1.2
tos 0x00, ttl 64, length 84, checksum 0x1026 dscp CS0 ecn NON_ECN
fragment id 0x977d, flags DONT_FRAGMENT
ICMP echo_reply checksum 0x32ea id 21077
00:13:21:049197: ip4-rewrite
tx_sw_if_index 4 dpo-idx 2 : ipv4 via 192.168.100.1 BondEthernet2: mtu:9000 next:3 flags:[]
00:13:21:049221: BondEthernet2-output
Packet 5
00:13:21:049248: BondEthernet2-tx
src 11:22:33:44:55:77, dst 11:22:33:44:55:66, BondEthernet2 -> GigabitEthernet13/0/0
2、在learning vpp1上基于內核ping200.1.2.2,在learning vpp2設置trace流程,只顯示從內核回應的reply報文,上從bond接口GigabitEthernet1b/0/0回應。
00:13:17:374058: dpdk-input
GigabitEthernetb/0/0 rx queue 0
00:13:17:374103: ethernet-input
00:13:17:374142: ip4-input
ICMP: 200.1.2.2 -> 200.1.1.2
tos 0x00, ttl 64, length 84, checksum 0x19cf dscp CS0 ecn NON_ECN
fragment id 0xcdd3
ICMP echo_reply checksum 0xbfb id 21076
00:13:17:374169: ip4-lookup
00:13:17:374195: ip4-load-balance
00:13:17:374246: BondEthernet2-output
ICMP echo_reply checksum 0xbfb id 21076
Packet 3
00:13:17:374271: BondEthernet2-tx
src 11:22:33:44:55:77, dst 11:22:33:44:55:66, BondEthernet2 -> GigabitEthernet1b/0/0
上面1,2可以看到報文在bond下兩個接口進行了分擔處理。這種驗證也比較勉強,只有2個流。理論上應該設置多條流來驗證。環境因素就不進行驗證了。
通過上面場景1的trace流程來梳理bond的處理邏輯如下所示:
1、華為eth-trunk配置手冊https://support.huawei.com/enterprise/zh/doc/EDOC1000178154/c1b2412c
2、H3c鏈路聚合配置手冊http://www.h3c.com/cn/d_201108/723437_30005_0.htm
3、LInux系統bond模式介紹:https://www.cnblogs.com/yanling-coder/p/11867123.html
T之家 7 月 11 日消息,微軟公司在 7 月補丁星期二發布的 Windows 10、Windows 11 系統累積更新中,修復了追蹤編號為 CVE-2024-38112 的零日漏洞。
該零日漏洞由 Check Point Research 的安全專家李海飛(Haifei Li,音譯)于 2023 年 1 月發現,是一個高度嚴重的 MHTML 欺騙問題,有證據表明有黑客在過去 18 個月里,利用該漏洞發起惡意攻擊,可以繞過 Windows 10、Windows 11 系統的安全功能。
該專家發現網絡攻擊者通過分發 Windows Internet 快捷方式文件(.url),以欺騙 PDF 等看起來合法的文件,用戶一旦點開這些文件,就會下載并啟動 HTA 以安裝密碼竊取惡意軟件。
Internet 快捷方式文件只是一個文本文件,其中包含各種配置設置,如顯示什么圖標、雙擊時打開什么鏈接等信息。保存為 .url 文件并雙擊后,Windows 將在默認網絡瀏覽器中打開配置的 URL。
不過攻擊者發現可以通過在 URL 指令中使用 mhtml: URI 處理程序,來強制 Internet Explorer 打開指定的 URL,如下圖所示:
IT之家注:MHTML 是一種 "聚合 HTML 文檔的 MIME 封裝" 文件,是 Internet Explorer 中引入的一種技術,可將包括圖像在內的整個網頁封裝成一個單一的檔案。
攻擊者使用 mhtml: URI 啟動 URL 后,Windows 會自動在 Internet Explorer 中啟動 URL,而不是默認瀏覽器。
漏洞研究人員 Will Dormann 稱,在 Internet Explorer 中打開網頁會給攻擊者帶來額外的好處,下載惡意文件時安全警告較少。
盡管微軟早在兩年前就宣布停止支持該瀏覽器,并以 Edge 代替其所有實用功能,但這款過時的瀏覽器仍可被惡意調用和利用。
互聯網高速發展的今天,我們通過瀏覽器可以看到各種各樣的網站,包含了各式不同的領域還有內容,通過點擊網站上的標簽和欄目我們就能夠很方便地看到網站上顯示的各種數據,而這些都是建立在HTML這種標記語言的基礎上做到的。
HTML的英文全稱為Hyper Text Markup Language,中文稱作超文本標記語言,是一種專門用來建立網站的標識語言。其中包括了許多標簽將分散的網絡數據連接到一起,聚合同一之后形成了我們現在所看到的網頁。
看到這里是不是有許多朋友想要知道這個HTML語言該怎么去學習呢?是需要找老師統一學,還是去圖書館找專業書籍自己學好呢?不用擔心,因為今天要給大家推薦的就是一個專門為大家提供各種編程語言教程的學習網站。
這個網站名叫 runoob,直接在瀏覽器上搜索即可找到。
圖片來自RUNOOB網頁截圖
在首頁可以看到該欄目的第二個就是關于HTML的學習教程,點擊左邊的方框可以調整你的課程進度,在第一章節的教程中很清晰地講解了什么是HTML,以及告訴了你一些關于網站建立的小知識。
下方的提示框會給你提供一些對HTML零基礎新手的科普,關于這種標記語言應該如何進行保存,如何查看文件后輟名,如何打開代碼文件等等,還會提供一些專用工具供你學習使用。同時網站會給你簡單介紹一些網頁編程語言的區別,還有各種用途上的區分,非常地詳細。
圖片來自RUNOOB網頁截圖
在第三章節的編輯器一欄里,會提供給你一些HTML的專用編輯器,例如VS Code,還有sublime text 等實用工具,在后面會教你如何將這些HTML必備編輯器下載并安裝,然后在瀏覽器上面運行。
通過插件還有語言編程的格式我們就能夠學會如何制作第一步的標題了,剛開始的一步比較簡單,相信大家很快就能學會如何在網頁上顯示自己打入的文字了。之后進一步的學習就是關于如何調整文字段落,還有各種標識的使用。
圖片來自RUNOOB網頁截圖
在如何進行文字排版編輯的方面,教程中也講述得很詳細,包括一些用戶們常犯的錯誤,還有一些網頁的實例,甚至是這個教學網站上的排版示范都會進行一一講解。
更深入的章節會對如何進行圖像排列,傳輸等方面進行細講,教程中把大部分網站會使用到的技巧還有排版方式都分成了許多個小片段,方便大家能夠對每個方面針對性地學習。這些內容并不多,幾乎每一個片段都是用很直白的語言進行講解,方便所有人都能夠看懂,并且在下方都會有更詳細的術語解析,還有一些比較難懂的點會舉例解釋。
圖片來自RUNOOB網頁截圖
經過十幾章節的教學之后,基本上能夠掌握HTML語言的基本用法,還有一些簡單的操作了,這個時候如果想要進階學習的話還可以在網站上查找其他的進階語言用法,例如CSS, JavaScript等等復雜一些的語言,相應的你也會學到更多如何運營網頁的方法。
當然如果想要自己建立一個網站的話,還需要更多資源還有設備,例如高速的網絡連接保持網頁的穩定性,以及穩定的服務器,用來保證自己的網頁24小時都能保持流暢可用。不過這些都是在學會了如何建立網頁之后才考慮的事了。
現在網上也有許多編程教學,在網上自學一門知識一門語言變得非常方便,但是僅僅是擁有資源還是不夠的。學習如何建立自己的網站還需要大量的努力以及知識的積累,通過不斷的練習還有實踐才能自如地使用,只有基礎扎實,建立出來的網站才能夠長久。但還需要大家能夠行動起來,只有去學習去實踐才能夠真正學會東西,希望這個教學網站推薦能夠幫到更多人!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。