這裡簡要介紹osi網路模型,實際應用的網路模型,以及通過網路模型了解各層的負載均衡器如何工作。
osi網路模型有7層,從低到高分別為:
osi的物理層規範是有關傳輸介質的特性,這些規範通常也參考了其他組織制定的標準。連線頭、幀、幀的使用、電流、編碼及光調製等都屬於各種物理層規範中的內容。物理層常用多個規範完成對所有細節的定義。示例:rj45,802.3等。
它定義了在單個鏈路上如何傳輸資料。這些協議與被討論的各種介質有關。示例:atm,fddi等。
這層對端到端的包傳輸進行定義,它定義了能夠標識所有結點的邏輯位址,還定義了路由實現的方式和學習的方式。為了適應最大傳輸單元長度小於包長度的傳輸介質,網路層還定義了如何將乙個包分解成更小的包的分段方法。示例:ip,ipx等。
這層的功能包括是否選擇差錯恢復協議還是無差錯恢復協議,及在同一主機上對不同應用的資料流的輸入進行復用,還包括對收到的順序不對的資料報的重新排序功能。示例:tcp,udp,spx。
它定義了如何開始、控制和結束乙個會話,包括對多個雙向訊息的控制和管理,以便在只完成連續訊息的一部分時可以通知應用,從而使表示層看到的資料是連續的。在某些情況下,如果表示層收到了所有的資料,則用資料代表表示層。示例:rpc,sql等。
這一層的主要功能是定義資料格式及加密。例如,ftp允許你選擇以二進位制或ascii格式傳輸。如果選擇二進位制,那麼傳送方和接收方不改變檔案的內容。如果選擇ascii格式,傳送方將把文字從傳送方的字符集轉換成標準的ascii後傳送資料。在接收方將標準的ascii轉換成接收方計算機的字符集。示例:加密,ascii等。
與其它計算機進行通訊的乙個應用,它是對應應用程式的通訊服務的。例如,乙個沒有通訊功能的字處理程式就不能執行通訊的**,從事字處理工作的程式設計師也不關心osi的第7層。但是,如果新增了乙個傳輸檔案的選項,那麼字處理器的程式就需要實現osi的第7層。示例:telnet,http,ftp,nfs,smtp等。
在實際生產環境中,tcp/ip 模型將 osi 模型由七層簡化為四層,傳輸層和網路層被完整保留,物理層和資料鏈路層被合併為網路介面層,傳輸層以上被統一為應用層,可以認為tcp/ip 網路模型是對osi網路模型的實現,具體分別為:
這一層實現方式各異且繁雜,它是資料報從乙個裝置的網路層傳輸到另外乙個裝置的網路層的方法。這個過程能夠在網絡卡的軟體驅動程式中控制,也可以在韌體或者專用晶元中控制。這將完成如新增報頭準備傳送、通過物理媒介實際傳送這樣一些資料鏈路功能。另一端,鏈路層將完成資料幀接收、去除報頭並且將接收到的包傳到網路層。我們通常所說的資料幀,mac位址,wifi,交換機等概念都在這一層,這一層解決了互聯的兩個實體如何進行通訊,但是並沒有約定跨內網情況下的傳輸方式,也不保證資料可靠性,這些問題由上層來處理。
網路層將資料從源網路傳輸到目的網路,這個傳輸是跨內網的,中間會經過各種路由處理。這一層中最廣為所知的就是ip,該協議解決了網際網路問題,實現大規模、異構網路的互聯互通的問題,將各個小網路打通,實現了端到端的,無連線,不可靠的,盡力而為的資料報傳輸服務。我們所熟知的ip位址,路由器就工作在這一層。該層不保證資料可靠性,這些問題由上層來處理。可以粗暴的理解為:知道了對方的ip,就有把資料發到對方主機的能力,但是並沒有送達對應的程式程序,訊息可能會丟,這些問題由上層處理。
由於網路互連層已經提供了端到端的訊息送達能力,所以該層主要解決端到端可靠性和保證資料按照正確的順序到達這樣的問題。tcp就是該層乙個可靠的,面向連線的傳輸機制,它提供一種可靠的位元組流保證資料完整、無損並且按順序到達。相對於下層「盡力而為」的特點,tcp通過重傳等手段來確保資料的完整性。該層除了tcp外還有udp,是乙個無鏈結的資料報協議。它是乙個「盡力傳遞」(best effort)或者說「不可靠」協議——不是因為它特別不可靠,而是因為它不檢查資料報是否已經到達目的地,並且不保證它們按順序到達。埠號的概念在這一層,ip只提供主機級別的送達能力,程序級別的訊息送達是在傳輸層處理的。
在傳輸層已經解決了訊息可靠性問題後,應用層的實現根據業務又豐富了起來,出現了諸如http,ftp,ssh,rtsp,xmpp等各種因為具體業務而定義的網路協。這些協議均工作在tcp協議之上,也就是說這些協議不用再把精力花費到解決「丟包」這個事情上,而可以專注於解決自己的問題。
網路模型中,各層的工作並不是嚴格劃分的,也沒有嚴格上下依賴關係,存在比如arp,rarp,doh等等實質工作內容跨網路層的協議。
負載均衡器工作的方式就是資料**,按各種各樣人為設定的規則進行資料**;可能會修改報文,可能不會;負載均衡器不止出現在網路模型的其中一層,下面簡要介紹一下常用的負載均衡器的工作方式。
以虛擬mac位址的方式,外部對虛擬mac位址請求,負載均衡接收後分配後端實際的mac位址響應。
一般採用虛擬ip位址方式,外部對虛擬的ip位址請求,負載均衡接收後分配後端實際的ip位址響應(即乙個ip位址對乙個ip位址的主機級別的**,該層沒有埠號的概念)。除此之外,還有ip隧道模式,負載均衡器把接受到的ip包外再包裝一層ip包,然後路由器根據最外層的ip位址路由到目的地伺服器,目的地伺服器拆掉最外層的ip資料報,拿到裡面的ip資料報進行處理。
使用"虛擬ip+port"接收請求,再**到對應的機器。四層通過虛擬ip+埠接收請求,然後再分配到真實的伺服器。該層負載均衡的實際應用比較廣泛,比如f5,lvs,haproxy以及各大雲廠商均提供四層負載均衡能力。
四層負載均衡實際**的是ip報文,本身並不維護連線狀態。舉個例子:在接收到第乙個來自客戶端的syn請求時,按照自身規則選擇乙個後端伺服器,並對報文中目標ip位址和埠進行修改(改為後端伺服器ip和埠),直接**給該伺服器,然後自身將記錄這個對映關係,對於同乙個客戶端後續的ip包**至相同的後端伺服器,以避免連線混亂的情況。總的來說,四層負載均衡就是在傳輸層報文上做手腳,以各種方式根據規則**報文。因為報文本身無狀態,盡力送達,所以在**方案的實現上比較簡單,不用考慮複雜的連線狀態管理,但是對**效能要求相對較高。
根據虛擬的url或ip,主機名接收請求,再轉向相應的處理伺服器。七層通過虛擬的url或主機名接收請求,然後再分配到真實的伺服器。該層負載均衡的實際應用比較廣泛,比如haproxy,nginx以及各大雲廠商均提供七層負載均衡能力。
七層負載均衡並不**ip包,而是向客戶端和伺服器分別建立了一條tcp連線,分析應用層報文並根據規則進行**,所以會有「連線復用」的概念。舉個例子:http的負載均衡,對於每一條面向客戶端的tcp連線,並沒有一一對應一條面向伺服器的tcp連線,**http報文的時候會嘗試使用已有的面向伺服器的tcp連線。因為七層負載均衡會分析報文內容,所以效率不如四層負載均衡,但是七層負載均衡能根據應用層協議的內容進行更加複雜的**行為。
在選擇負載均衡器進行使用的時候,一定要關注負載均衡器的實現細節是否和我們的實際需求一致,到底在第幾層,實際進行的**行為是什麼。我們在實際業務中遇到過乙個問題:aws的傳統lb提供 tcp 和 http 的負載均衡,但是它的內部例項會進行切換,切換工作中會強制切斷tcp連線。我們的業務中使用了這個lb進行xmpp協議的負載均衡,每次lb內部進行切換的時候業務層都會報告連線異常。後來我們查明原因之後,將負載切換到了nlb就沒有再遇到連線異常問題。
網路與負載均衡
osi七層網路模型 tcp ip四層網路模型 tcp中的三次握手 客戶端傳送syn seq x 報文給伺服器端,並進入syn send狀態 伺服器收到syn報文,回應乙個syn seq y 和ack ack x 1 報文,進入syn send狀態 客戶端收到伺服器的syn報文,回應乙個ack ack...
多個專線做負載均衡 洛神雲網路SLB負載均衡新姿勢
通過此文 你可以了解阿里雲網路slb負載均衡產品進化史。你可以了解slb最新產品架構及應用場景。你還可以了解slb的技術新內涵。你可以免費獲取slb更多資料!slb負載均衡 進化史 網際網路業務初期發展階段業務特點 此時網際網路業務還處於拓新階段,網際網路企業不夠壯大,其網路業務集中在運營商或者大型...
Nginx負載均衡 OSI網路模型
在講到nginx負載均衡的時候,其實nginx是七層負載均衡,後續我們還會涉及到lvs,是四層負載均衡,七層和四層是什麼概念呢?這就必須提到網路模型。網路模型是計算機網路基礎的一部分內容,一般大學計算機系都會講到此知識點,並且會作為考點 其實在面試過程中有時候也會被問到。所以我們還是有必要來複習或學...