先來理解一下osi七層模型
應(yīng)用層? ? ? ? ? ? ?應(yīng)用層是ISO七層模型的最高層,它直接與用戶和應(yīng)用程序交互,提供用戶與網(wǎng)絡(luò)的接口。它包括各種應(yīng)用協(xié)議,如HTTP、FTP、SMTP等,用于實(shí)現(xiàn)特定應(yīng)用的功能和通信
表示層? ? ? ? ? ? ?表示層負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換、加密和壓縮,以確保不同系統(tǒng)之間的數(shù)據(jù)格式兼容性,并提供數(shù)據(jù)安全和加密功能
會(huì)話層? ? ? ? ? ? ?會(huì)話層負(fù)責(zé)建立、管理和終止會(huì)話(Session)或連接。它提供了會(huì)話的同步、管理和恢復(fù)功能,以確保不同應(yīng)用程序之間的通信順利進(jìn)行
傳輸層? ? ? ? ? ? ?傳輸層負(fù)責(zé)端到端的數(shù)據(jù)傳輸和可靠性。它提供了傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等傳輸協(xié)議,用于實(shí)現(xiàn)可靠的數(shù)據(jù)傳輸、流量控制和錯(cuò)誤恢復(fù)
網(wǎng)絡(luò)層? ? ? ? ? ? ?網(wǎng)絡(luò)層負(fù)責(zé)在不同的網(wǎng)絡(luò)之間進(jìn)行路由和轉(zhuǎn)發(fā),以確保數(shù)據(jù)能夠正確地從源節(jié)點(diǎn)傳輸?shù)侥繕?biāo)節(jié)點(diǎn)。它處理邏輯地址(如IP地址),選擇最佳路徑,并進(jìn)行分組和路由選擇
數(shù)據(jù)鏈路層? ? ??數(shù)據(jù)鏈路層位于物理層之上,負(fù)責(zé)在直接相連的節(jié)點(diǎn)之間傳輸數(shù)據(jù)。它將比特流劃分為幀(Frame),并提供了錯(cuò)誤檢測、流控制和訪問控制等功能,以確保可靠的數(shù)據(jù)傳輸
物理層? ? ? ? ? ? ?物理層是ISO七層模型的最底層,負(fù)責(zé)在物理媒介上傳輸原始比特流。它定義了電壓、電纜規(guī)范、物理連接和傳輸速率等物理特性
在了解一下接收數(shù)據(jù)包的工作流程
在防火墻接收到數(shù)據(jù)包后,因?yàn)橛玫氖荄NAT端口映射功能,所以用的是四層轉(zhuǎn)發(fā),按照osi七層模型從下往上拆包到四層,根據(jù)DNAT規(guī)則轉(zhuǎn)發(fā)到后端的nginx上,nginx用的是HTTP七層代理,所以需要繼續(xù)從四層拆包到七層,在根據(jù)nginx的規(guī)則轉(zhuǎn)發(fā)到后端的服務(wù)
封包從上往下封裝,且只有外網(wǎng)傳輸是需要封裝安裝包的,內(nèi)網(wǎng)傳輸是不需要封裝安裝包的
數(shù)據(jù)包的拆包和封裝主要發(fā)生在網(wǎng)絡(luò)通信的邊界處,尤其是在數(shù)據(jù)包從一個(gè)網(wǎng)絡(luò)設(shè)備到另一個(gè)網(wǎng)絡(luò)設(shè)備的過程中。當(dāng)數(shù)據(jù)包跨越網(wǎng)絡(luò)邊界時(shí),它們需要按照相應(yīng)的協(xié)議規(guī)范進(jìn)行拆包和封裝,以適應(yīng)不同的網(wǎng)絡(luò)環(huán)境
在同一個(gè)內(nèi)網(wǎng)環(huán)境中,如果數(shù)據(jù)包只是在內(nèi)網(wǎng)中傳輸,沒有經(jīng)過網(wǎng)絡(luò)邊界,那么通常不需要進(jìn)行顯式的拆包和封裝操作。例如,在內(nèi)網(wǎng)中的數(shù)據(jù)包在經(jīng)過網(wǎng)絡(luò)交換機(jī)或路由器時(shí),會(huì)根據(jù)目標(biāo)設(shè)備的MAC地址或IP地址進(jìn)行直接轉(zhuǎn)發(fā),而無需進(jìn)行拆包和封裝
nginx七層代理
nginx的七層代理作用于應(yīng)用層,Nginx可以通過解析HTTP協(xié)議頭部信息來處理和轉(zhuǎn)發(fā)請求。它能夠檢查和修改HTTP請求和響應(yīng)的頭部,進(jìn)行URL重寫、反向代理、負(fù)載均衡、緩存、SSL終端等功能。通過這些功能,Nginx可以實(shí)現(xiàn)靈活的HTTP請求處理和流量分發(fā)
nginx使用七層代理,在接收到數(shù)據(jù)包后,需要將數(shù)據(jù)包按照osi七層模型從下往上拆包到七層,解析請求頭和請求體,提取請求方法、URL、頭部信息、有效負(fù)載數(shù)據(jù)等內(nèi)容,nginx根據(jù)配置的策略,通過七層協(xié)議直接轉(zhuǎn)發(fā)到后端的服務(wù)中,nginx的七層代理功能需要處理數(shù)據(jù)包中的數(shù)據(jù),效率遠(yuǎn)遠(yuǎn)比不上四層轉(zhuǎn)發(fā)的效率
nginx四層轉(zhuǎn)發(fā)
nginx的四層轉(zhuǎn)發(fā)作用于傳輸層,Nginx可以基于傳輸層協(xié)議(如TCP和UDP)進(jìn)行流量轉(zhuǎn)發(fā)。它可以接收客戶端的傳輸層請求,并將其轉(zhuǎn)發(fā)給后端服務(wù)器。這種四層轉(zhuǎn)發(fā)通常用于負(fù)載均衡和高可用性方案,將傳入的請求分發(fā)到多個(gè)后端服務(wù)器,以提高系統(tǒng)的性能和容錯(cuò)能力
nginx使用四層轉(zhuǎn)發(fā),在接收到數(shù)據(jù)包后,需要將數(shù)據(jù)包按照osi七層模型從下往上拆包到四層,提取出源IP地址、目標(biāo)IP地址、源端口號和目標(biāo)端口號等傳輸層信息,再根據(jù)配置的負(fù)載均衡算法和策略,轉(zhuǎn)發(fā)給相應(yīng)的目標(biāo)服務(wù)器,在此過程中nginx不需要處理數(shù)據(jù)包中的數(shù)據(jù),這使得Nginx在進(jìn)行高性能的負(fù)載均衡和代理轉(zhuǎn)發(fā)時(shí)能夠快速、有效地處理大量的請求
關(guān)于高并發(fā)架構(gòu)的講解
在一個(gè)數(shù)據(jù)量特別大的高并發(fā)架構(gòu)中,單純使用nginx的七層代理是不夠的,因?yàn)閚ginx的七層代理需要處理數(shù)據(jù),在數(shù)據(jù)量大的時(shí)候,nginx的資源消耗就會(huì)特別高,很容易就會(huì)出現(xiàn)資源不足的情況,在此情況下,我們需要使用nginx的高可用架構(gòu),keepalived+lvs+nginx的架構(gòu),就能很好的應(yīng)對高并發(fā)流量的情況,使用lvs的四層轉(zhuǎn)發(fā)到后面的多個(gè)nginx中實(shí)現(xiàn)負(fù)載均衡,主要是四層轉(zhuǎn)發(fā)不需要處理數(shù)據(jù)包中的數(shù)據(jù),只做單純的轉(zhuǎn)發(fā),不會(huì)出現(xiàn)主機(jī)資源不足的情況,所以可以處理大量的請求,通過四層轉(zhuǎn)發(fā)到多個(gè)nginx后,nginx再通過七層代理功能去將數(shù)據(jù)轉(zhuǎn)發(fā)到后端的服務(wù)中,具體的工作過程可以參考以上的解釋,而keepalived的作用是實(shí)現(xiàn)lvs的高可用,lvs也可以使用haproxy代替,主要還是看數(shù)據(jù)量的大小文章來源:http://www.zghlxwxcb.cn/news/detail-533581.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-533581.html
到了這里,關(guān)于nginx七層代理和四層轉(zhuǎn)發(fā)的理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!