大佬聊的四層代理和七層代理,都在聊什么?
日常與大佬溝通或看文章,時(shí)不時(shí)總會(huì)遇到兩個(gè)概念“四層代理負(fù)載均衡”和“七層代理負(fù)載均衡”,那么,所謂的四層代理和七層代理分別指的是什么?又在什么場(chǎng)景下用到呢?這篇文章就帶大家聊聊這方面的知識(shí)點(diǎn)。
OSI七層模型
要聊幾層代理,需要先看一下網(wǎng)絡(luò)分層,在之前的文章中也提到,標(biāo)準(zhǔn)的七層網(wǎng)絡(luò)分層,也就是OSI七層模型。TCP/IP五層模型和TCP/IP四層模型是從OSI七層優(yōu)化而來(lái)。
這里所談的四層代理和七層代理,便是基于OSI七層模型來(lái)劃分的。
OSI七層模型從下往上看,第四層為傳輸層、第七層為應(yīng)用層。再來(lái)看看每層對(duì)應(yīng)的常見(jiàn)協(xié)議:
OSI及協(xié)議四層對(duì)應(yīng)的是TCP/UDP協(xié)議,也就常說(shuō)的IP+端口。七層已經(jīng)是非常具體的應(yīng)用層協(xié)議了。因此,所謂四層就是基于IP+端口的負(fù)載均衡;七層就是基于URL等應(yīng)用層信息的負(fù)載均衡;
同理,還有基于MAC地址的二層負(fù)載均衡和基于IP地址的三層負(fù)載均衡。二層負(fù)載均衡通過(guò)一個(gè)虛擬MAC地址接收請(qǐng)求,然后再分配到真實(shí)的MAC地址;三層負(fù)載均衡通過(guò)一個(gè)虛擬IP地址接收請(qǐng)求,然后再分配到真實(shí)的IP地址。
四層代理
四層代理主要工作于OSI模型中的傳輸層,傳輸層主要處理消息的傳遞,而不管消息的內(nèi)容。TCP就是常見(jiàn)的四層協(xié)議。
**四層負(fù)載均衡只針對(duì)由上游服務(wù)發(fā)送和接收的網(wǎng)絡(luò)包,而并不檢查包內(nèi)的具體內(nèi)容是什么。**四層負(fù)載均衡可以通過(guò)檢查T(mén)CP流中的前幾個(gè)包,從而決定是否限制路由。
因此,四層負(fù)載均衡的核心就是IP+端口層面的負(fù)載均衡,不涉及具體的報(bào)文內(nèi)容。
七層代理
七層代理主要工作于OSI模型的應(yīng)用層,應(yīng)用層主要用來(lái)處理消息內(nèi)容的。比如,HTTP便是常見(jiàn)的七層協(xié)議。
七層負(fù)載均衡服務(wù)器起到了反向代理的作用,Client端要先與七層負(fù)載均衡設(shè)備三次握手建立TCP連接,把要訪問(wèn)的報(bào)文信息發(fā)送給七層負(fù)載均衡。
七層負(fù)載均衡器基于消息中內(nèi)容( 比如URL或者cookie中的信息 )來(lái)做出負(fù)載均衡的決定。之后,七層負(fù)載均衡器建立一個(gè)新的TCP連接來(lái)選擇上游服務(wù)并向這個(gè)服務(wù)發(fā)出請(qǐng)求。
使用七層負(fù)載均衡的設(shè)備經(jīng)常被用于反向代理。
兩者區(qū)別
先通過(guò)一張圖來(lái)看看四層代理和七層代理的區(qū)別:
四層代理與七層代理上圖中最直觀的區(qū)別是四層代理只進(jìn)行了一次TCP請(qǐng)求,而七層代理進(jìn)行了兩次TCP請(qǐng)求。
四層代理:四層代理拆解報(bào)文至傳輸層,根據(jù)請(qǐng)求的服務(wù)器IP+端口號(hào)進(jìn)行轉(zhuǎn)發(fā);四層代理是由后端服務(wù)器進(jìn)行處理,包括報(bào)文的封裝都是后端服務(wù)器進(jìn)行封裝;四層代理相當(dāng)于是一個(gè)路由器。
七層代理:七層代理拆解報(bào)文至應(yīng)用層,分析用戶(hù)請(qǐng)求的資源,然后負(fù)載均衡器會(huì)代替用戶(hù)請(qǐng)求后端服務(wù)器的資源;后端服務(wù)器把資源返回給負(fù)載均衡器,負(fù)載均衡器對(duì)資源再次進(jìn)行封裝,然后返還給客戶(hù)端;在此過(guò)程中,需要建立兩次TCP連接,一次是客戶(hù)端,一次是后端的服務(wù)器。
七層負(fù)載均衡的CPU密集程度比基于包的四層負(fù)載均衡更高。七層負(fù)載均衡能夠讓均衡器做更小粒度的負(fù)載均衡決定,并且會(huì)根據(jù)消息的內(nèi)容( 比如壓縮和加密 )利用最優(yōu)化方式做出改變。它運(yùn)用緩存的方式來(lái)卸載上游服務(wù)較慢的連接,并顯著地提高了性能。
負(fù)載均衡器
負(fù)載均衡器通常稱(chēng)為四層交換機(jī)或七層交換機(jī)。四層交換機(jī)主要分析IP層及TCP/UDP層,實(shí)現(xiàn)四層流量負(fù)載均衡。七層交換機(jī)除了支持四層負(fù)載均衡以外,還有分析應(yīng)用層的信息,如HTTP協(xié)議URI或Cookie信息。
負(fù)載均衡分為L(zhǎng)4 switch(四層交換),即在OSI第4層工作,也就是TCP層。四層負(fù)載均衡器(如:LVS,F(xiàn)5)不關(guān)心應(yīng)用協(xié)議(如HTTP/FTP/MySQL等)。
L7 switch(七層交換),OSI的最高層,應(yīng)用層。七層負(fù)載均衡器(如:HAProxy,MySQL Proxy)能理解應(yīng)用協(xié)議。
Nginx、LVS、HAProxy是目前使用最廣泛的三種負(fù)載均衡軟件。
應(yīng)用場(chǎng)景
七層負(fù)載均衡器可以是使整個(gè)網(wǎng)絡(luò)更智能化,比如可以通過(guò)七層代理將圖片類(lèi)、靜態(tài)文件類(lèi)(JS、CSS)請(qǐng)求轉(zhuǎn)發(fā)到特定的服務(wù)器,利用緩存技術(shù)達(dá)到更好的性能。
從技術(shù)原理上,可以對(duì)客戶(hù)端的請(qǐng)求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大地提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。例如Nginx或者Apache上部署的功能可以前移到負(fù)載均衡設(shè)備上,例如客戶(hù)請(qǐng)求中的Header重寫(xiě),服務(wù)器響應(yīng)中的關(guān)鍵字過(guò)濾或者內(nèi)容插入等功能。
針對(duì)SYN Flood攻擊,四層模型下攻擊請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到后端服務(wù)器上,而七層模式下則可在負(fù)載均衡器上進(jìn)行攔截,不影響后臺(tái)服務(wù)器正常運(yùn)營(yíng)。針對(duì)SQL注入等情況,也可以通過(guò)在七層代理設(shè)置策略進(jìn)行特定報(bào)文的過(guò)濾,從應(yīng)用層面進(jìn)一步提高系統(tǒng)整體安全。
總之,七層負(fù)載均衡,主要著重于應(yīng)用HTTP協(xié)議,所以其應(yīng)用范圍主要是眾多的網(wǎng)站或者內(nèi)部信息平臺(tái)等基于B/S開(kāi)發(fā)的系統(tǒng)。四層負(fù)載均衡則對(duì)應(yīng)其他TCP應(yīng)用,例如基于C/S開(kāi)發(fā)的ERP等系統(tǒng)。
雖然四層代理性能比七層高很多,但目前像Nginx這類(lèi)負(fù)載均衡器已經(jīng)可以滿(mǎn)足大多數(shù)場(chǎng)景的需求,應(yīng)用最多的也是像Nginx這類(lèi)七層負(fù)載均衡器。
小結(jié)
看似簡(jiǎn)單的四層代理和七層代理,其實(shí)涉及到很多基礎(chǔ)的知識(shí)點(diǎn),比如網(wǎng)絡(luò)分層、網(wǎng)絡(luò)通信協(xié)議、負(fù)載均衡器等,更進(jìn)一步像微服務(wù)架構(gòu),Service Mesh架構(gòu)以及前端系統(tǒng)性能優(yōu)化等方面都涉及該知識(shí)點(diǎn)。
通過(guò)這篇文章,你學(xué)到嗎?更多實(shí)戰(zhàn)知識(shí)點(diǎn),持續(xù)關(guān)注吧。
往期推薦
Mysql的復(fù)合索引,生效了嗎?來(lái)篇總結(jié)文章
MySQL 性能優(yōu)化的 9 種姿勢(shì),面試再也不怕了!
HttpClient使用不當(dāng),服務(wù)掛了!是時(shí)候系統(tǒng)學(xué)習(xí)一下了
如果你覺(jué)得這篇文章不錯(cuò),那么,下篇通常會(huì)更好。添加微信好友,可備注“加群”(微信號(hào):zhuan2quan)。
一篇文章就看透技術(shù)本質(zhì)的人,? 和花一輩子都看不清的人,
? 注定是截然不同的搬磚生涯。
