在數據(ju)中心和(he)運(yun)營商(shang)網絡中,網絡設備每天都要處理成千上萬條數據(ju)流。你(ni)可(ke)能想象不到,一條普通的數據(ju)報文,在轉發之前可(ke)能會(hui)經(jing)歷一次“整(zheng)容手術”——報文(wen)的源(yuan)mac、目的mac、端口號(hao)甚至是整(zheng)個協議頭都可能被(bei)修改。這(zhe)一過程,在專業術語中被(bei)稱為“報文(wen)編輯”或“報文(wen)修改(Packet Modify)”。
本(ben)期我就從OVS Modify模(mo)塊(kuai)出發,帶大(da)家揭開網絡設備中(zhong)“精準改造”報文的技術細節。
一(yi)、為什么要修改報文?
在(zai)傳統網絡中(zhong),交換機或路由器(qi)通(tong)常(chang)只做轉發,很少修(xiu)改報(bao)文(wen)內容。但在(zai)現代網絡中(zhong),報(bao)文(wen)修(xiu)改已成為(wei)常(chang)態,原因包括:
1、網(wang)絡(luo)虛擬化:如(ru)VXLAN等(deng)技(ji)術,需要對報文進行封裝(zhuang)與解封裝(zhuang);
2、安全控制:如流量鏡像、轉換(NAT)等(deng);
3、網絡編程:基于流表的精細控制,可以實現動態轉發和策略下發;
4、協議互(hu)通(tong):數據中(zhong)心內(nei)部可能存在多種協議,需要動態適(shi)配。
Modify模塊它的職責就是根據控制面下發的動(dong)作(action),對報文進行(xing)各種“精準”修改。
二、什么是 OVS Modify 模塊?
OVS(Open vSwitch)是一種廣泛應(ying)用于數據(ju)中心(xin)的虛擬交(jiao)換系統(tong)。Modify模(mo)塊是OVS中的關(guan)鍵子模塊之一,負責根(gen)據流(liu)表匹(pi)配結果執行(xing)動作操(cao)作,對匹(pi)配到的報文進行(xing)修改。
根據報(bao)文的流(liu)向不同,Modify模(mo)塊分為兩個子通道:
Modify0(上行):處理來(lai)去(qu)MAC口(kou)、即(ji)“外部世界”的(de)報文;
Modify1(下行):處理(li)去(qu)主(zhu)機或SoC的(de)報文,可(ke)能會加(jia)入自定(ding)義(yi)頭部,用于上(shang)送到內核或(huo)其它處(chu)理模塊。
Modify模塊的(de)能(neng)力(li)非(fei)常豐富,包括但不(bu)限(xian)于(yu):
1、L2/L3/L4各層字(zi)段替換(如源MAC、目的IP、端口等);
Modify模塊可(ke)根據流(liu)表下發的動作信(xin)息,對報文在以太網層、網絡層和傳(chuan)輸層的關鍵字(zi)段進行定向修改:
L2層(ceng):支持修改源(yuan)MAC和目的MAC,便(bian)于(yu)實(shi)現MAC偽裝、虛(xu)擬(ni)化橋(qiao)接等(deng)功(gong)能;
L3層(ceng):可(ke)修改源IP、目的IP,支持IPv4/IPv6,可用(yong)于NAT(網絡轉換)、策(ce)略(lve)路由等場景(jing);
L4層:支(zhi)持替換UDP/TCP端口號,實現如端口重定向等高(gao)級網(wang)絡功能。
通過這些修改,網(wang)絡設備可以(yi)根(gen)據預(yu)定義策略(lve)靈活轉發報文,提高網(wang)絡的(de)智能化(hua)程度。
2、VLAN頭(tou)部插入或剝離(li);
為了(le)支持虛擬局域網(VLAN)隔離,Modify模塊可對以(yi)太網幀中的 VLAN 標簽進行(xing)操(cao)作:
插入 VLAN 標簽:適(shi)用于原始(shi)報文未攜帶 VLAN 信(xin)息,但需要加入某個虛擬(ni)網(wang)絡的(de)情(qing)況;
剝離 VLAN 標簽:適用于(yu)報文出站前將 VLAN 標簽去除,以(yi)適(shi)配外部非VLAN網絡;
修改 VLAN ID:在(zai)跨網絡域轉發(fa)時,修改VLAN ID 實現虛(xu)擬(ni)網絡的映(ying)射與(yu)隔離。
這些(xie)操(cao)作對于支持(chi)云計(ji)算環(huan)境中(zhong)的多租(zu)戶隔離(li)、靈活調度網絡資源具有重(zhong)要意(yi)義。
3、VXLAN封裝與解封裝;
Modify模塊支持(chi)對(dui) VXLAN(Virtual eXtensible LAN)隧道報文(wen)的(de)封裝與解封裝:
封(feng)裝 VXLAN:在原(yuan)始報文前添加(jia) UDP + VXLAN 頭部,實現(xian)跨三(san)層網絡的數據鏈路(lu)隔離;
解封(feng)裝 VXLAN:從接收到的報文中剝離隧道(dao)頭,提取(qu)出原(yuan)始以太網幀進(jin)行繼續(xu)處理。
VXLAN 支持構(gou)建大規模虛(xu)擬(ni)網絡(luo),是SDN環境中主流的隧(sui)道協議,Modify模塊(kuai)的(de)(de)封裝能力為其提供(gong)了(le)硬件層的(de)(de)加速與支持。
4、TTL 值減一或(huo)替(ti)換;
TTL(Time To Live,生存時間)是 IP 報(bao)文(wen)(wen)中的一個重要(yao)字(zi)段,用(yong)于防止報(bao)文(wen)(wen)在網絡中無限循環(huan)。Modify模(mo)塊支持:
TTL 減一(yi)操作:模(mo)擬傳統路由器(qi)的(de)逐(zhu)跳處(chu)理(li),保證網絡(luo)拓(tuo)撲環中報文不會陷(xian)入(ru)死循環;
TTL 值重(zhong)置/替換:如在隧(sui)道出口或策略控制(zhi)場景中,重(zhong)設 TTL 為特(te)定值,以適配安全策略或QoS需求。
該功能提升(sheng)了(le)報文(wen)處理的(de)精細(xi)化控制能力,便(bian)于部署更靈(ling)活的(de)網絡拓撲結構。
5、支(zhi)持自定義(yi)的(de)vnet頭部編輯;
針對特定業務場景,如 SoC內部通信或(huo)特定協(xie)議棧接(jie)入(ru),Modify模(mo)塊支持添加20字節的自(zi)定義vnet 頭部。該頭部可(ke)包含如下信息:
報文的上送(song)原因(yin)(如上送(song)CPU、轉SOC等);
虛擬網絡標識(VID);
隊列標識(QID);
報文分類信息等。
此能力(li)使得(de)報文(wen)在進入(ru)處理單元(如主(zhu)控或內核)前(qian)就攜帶豐富(fu)的(de)控制信息,提升了整體網絡系統的(de)處理效率與(yu)可(ke)擴展性。
6、 校驗和(he)(Checksum)重新計算等(deng)。
報文中關(guan)鍵協(xie)議層(如IP/UDP/TCP)字段(duan)在被修改后,其原(yuan)有(you)校驗和將(jiang)失效。Modify模塊支持自動觸發校驗(yan)和重(zhong)計(ji)算功能:
支持 IP header checksum 重算;
支持 TCP/UDP 層(ceng)的(de) L4 checksum 重算;
支持 L4 payload checksum 計算,可配合上層卸機制進行加速。
該(gai)功能(neng)保證了(le)報(bao)文在經過修改后仍能(neng)通過下游網(wang)絡設(she)備(bei)或協議棧的校驗機制,確保數據通信的正確性(xing)與可靠性(xing)。
綜(zong)上所述,Modify模塊并(bing)非(fei)簡單的(de)字段替換(huan)器,而(er)是一個(ge)功(gong)能(neng)廣(guang)、支持多(duo)協(xie)議、多(duo)層處理的(de)“報(bao)文(wen)加工廠”。通(tong)過靈(ling)活配置,它(ta)能(neng)應對(dui)現代網絡(luo)中幾(ji)乎所有與(yu)報(bao)文(wen)修改相關的(de)場(chang)景,在SDN、NFV、電信核心網等領(ling)域(yu)具有廣泛的應用前(qian)景(jing)。