讀書筆記-網(wǎng)絡(luò)技術(shù)的基礎(chǔ)知識(上)(面向不懂技術(shù)的產(chǎn)品狗)

網(wǎng)絡(luò)基礎(chǔ)之協(xié)議棧

在計算機網(wǎng)絡(luò)里,數(shù)據(jù)傳輸?shù)牧鞒檀笾驴煞譃橐韵聨撞剑?/p>

1、應(yīng)用程序原始數(shù)據(jù)被拆解并編碼,轉(zhuǎn)化成電信號或光信號;

2、電信號或光信號通過物理介質(zhì)傳輸;

3、傳輸完成后電信號或光信號還原成應(yīng)用程序數(shù)據(jù)被接收;

整個流程,都是通過計算機網(wǎng)絡(luò)協(xié)議棧完成的。

而現(xiàn)在的互聯(lián)網(wǎng)采用就是基于OSI七層模型的TCP/IP協(xié)議棧,主要包括五層,即應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層,如下圖所示;其中數(shù)據(jù)鏈路層又可以分為兩個子層,即LLC(邏輯鏈路控制層)和MAC(介質(zhì)訪問控制層)。

應(yīng)用層:為應(yīng)用程序提供數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)接口,常見的是HTTP、Telnet、FTP等協(xié)議都工作在這一層;

傳輸層:傳輸層提供端到端的連接,例如讓A主機上的程序小紅找到B主機上的應(yīng)用程序小明。TCP和UDP都工作在這一層,端口號的定義也在這一層;

網(wǎng)絡(luò)層:用于尋址,它能讓互聯(lián)網(wǎng)的兩臺主機在互聯(lián)網(wǎng)的茫?!睓C海“中找到彼此;

數(shù)據(jù)鏈路層網(wǎng)卡就工作這一層,負責(zé)將數(shù)據(jù)信號轉(zhuǎn)化成光信號或者電信號,供物理層傳輸;

物理層:物理層是信號傳輸?shù)奈锢硗ǖ?,網(wǎng)線和配套的接口都屬于物理層。

應(yīng)用程序數(shù)據(jù),經(jīng)過這五層協(xié)議自上往下逐層分解,最終變成可供物理介質(zhì)可傳輸?shù)男盘枺?dāng)達到目的地主機后,再自下而上還原成應(yīng)用程序數(shù)據(jù)。

image

那么,為什么不能把應(yīng)用程序數(shù)據(jù)直接轉(zhuǎn)化成物理信號,其實是因為網(wǎng)絡(luò)棧分層后使得一些特殊功能的網(wǎng)絡(luò)設(shè)備可以只實現(xiàn)協(xié)議棧的子集,我想言下之意應(yīng)該是說,讓所有的設(shè)備功能都可以解耦單獨完成自己的工作就可以了。如路由器,只要實現(xiàn)網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層的功能就可以了。這樣就保證了每一層都可以單獨設(shè)計,只要保證上下兩層的接口保持一致就可以了。

互聯(lián)網(wǎng)是如何提供服務(wù)的

互聯(lián)網(wǎng)上的主流應(yīng)用,如瀏覽器、在線視頻、社交游戲等類型很多,但其本質(zhì)都是下載。作者舉例說,我們想象用戶將一根水管插到水桶里,水經(jīng)過水管流出,我們可以用來做飯(聽歌)、洗手(看視頻)、洗菜(瀏覽網(wǎng)頁),這些水(資源)被下載到本地后,應(yīng)用程序就會按照開發(fā)者的設(shè)計,將數(shù)據(jù)進行存儲,和使用。所以,在C++、Java等大量編程語言中,流叫做stream,被用來形容一個地方從另外一個地方不間斷地獲取數(shù)據(jù)。

用戶打開網(wǎng)站時,瀏覽器會根據(jù)網(wǎng)址與服務(wù)器建立連接,從而建立流。網(wǎng)頁的數(shù)據(jù)通過這個管道不斷地流向用戶的瀏覽器,瀏覽器得到這些數(shù)據(jù)后,立即進行解析、排版、繪制,經(jīng)過整個渲染過程,用戶看到了呈現(xiàn)在瀏覽器窗口內(nèi)的網(wǎng)頁。

IP地址

IP地址相當(dāng)于接入互聯(lián)網(wǎng)的所有主機對應(yīng)的門牌號,這個門牌號在互聯(lián)網(wǎng)上是獨一無二的,否則發(fā)送給指定主機的數(shù)據(jù)就會走錯門。

我們可以用通過系統(tǒng)屬性或網(wǎng)站提供的服務(wù)頁面查詢本機的IP地址,嘗試如下圖。

image
image

每一臺連接到網(wǎng)絡(luò)的中的網(wǎng)卡,都有一個IP地址,用來在網(wǎng)絡(luò)中收發(fā)信息。在IP地址庫中,有三類地址被定義為”私有地址“,如下表所示:

image

私有地址,就是指這些地址只允許被用在私有網(wǎng)絡(luò)中,不能作為互聯(lián)網(wǎng)接入地址使用,如果某臺PC接入家庭網(wǎng)絡(luò)或者公司的局域網(wǎng),他的IP肯定會落到上表中的地址段中。但如果私有網(wǎng)絡(luò)中的設(shè)備,要訪問互聯(lián)網(wǎng)上的內(nèi)容,就需要用到NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù)。

NAT轉(zhuǎn)換技術(shù),主要有三中實現(xiàn)方式:

1、靜態(tài)轉(zhuǎn)換(Static NAT)

內(nèi)網(wǎng)地址與外網(wǎng)地址是一一對應(yīng)關(guān)系,如果內(nèi)網(wǎng)中有10臺主機需要訪問外部網(wǎng)絡(luò),就需要有10個外網(wǎng)IP地址做映射,而且這10個內(nèi)網(wǎng)IP和10個外網(wǎng)IP是固定的映射關(guān)系。如果需要內(nèi)部網(wǎng)絡(luò)的一臺主機作為外網(wǎng)的服務(wù)器,就需要用到靜態(tài)轉(zhuǎn)換。

2、動態(tài)轉(zhuǎn)換(Dynamic NAT)

動態(tài)轉(zhuǎn)換與靜態(tài)轉(zhuǎn)換類似,但內(nèi)網(wǎng)IP與外網(wǎng)IP不是一一對應(yīng)關(guān)系,一般ISP會使用這種方式為接入用戶提供訪問外網(wǎng)的能力。

3、端口多路復(fù)用(Overload)

這種方式,就是一個外網(wǎng)的IP可以被內(nèi)網(wǎng)多個IP同步共享,與前兩個方式的區(qū)別在于講端口作為一個映射的維度,家用路由器一般都是通過端口多路復(fù)用來實現(xiàn)NAT的。

那么為什么同一臺設(shè)備有兩個不同的IP地址呢,其實網(wǎng)絡(luò)上查詢的IP是經(jīng)過NAT轉(zhuǎn)化之后的了,詳細流程參見下圖:

image

PING和網(wǎng)關(guān)

PING(Packet Internet Groper)是網(wǎng)絡(luò)診斷工具,意為互聯(lián)網(wǎng)包探測器。PING是TCP/IP協(xié)議簇中的一部分,其原理是向目標(biāo)IP地址發(fā)送一個數(shù)據(jù)包,如果對方返回一個同樣大小的數(shù)據(jù)包,則證明聯(lián)通,并且整個過程能測試時延。

網(wǎng)關(guān),就是兩個網(wǎng)絡(luò)之間的門,在物理上網(wǎng)關(guān)是一個網(wǎng)絡(luò)設(shè)備,擁有IP地址,在家庭網(wǎng)絡(luò)里通常就是路由器的IP地址。網(wǎng)關(guān)具有轉(zhuǎn)接和過濾的功能。

端口

端口是終端留給外部的接口,是不同設(shè)備之間通信的橋梁,物理設(shè)備是通過物理端口實現(xiàn)溝通的,比如網(wǎng)口、USB等都是物理端口或接口。計算機內(nèi)部有很多數(shù)據(jù)服務(wù)都是要通過一個物理端口與其他設(shè)備產(chǎn)生聯(lián)系的,外部的數(shù)據(jù)包也是需要通過物理端口反饋回來的,但是計算機內(nèi)部各種各種的服務(wù)數(shù)以萬計,每個服務(wù)怎么知道回來的數(shù)據(jù)包是自己需要的,這樣便有了”虛擬端口“,一個服務(wù)想和外界聯(lián)系就要綁定一個端口號,同時制定目標(biāo)服務(wù)的端口號,這個端口便是虛擬端口,這樣便把相應(yīng)的服務(wù)數(shù)據(jù)包放在對應(yīng)服務(wù)生命端口的緩沖區(qū)中,等待服務(wù)取走自己的數(shù)據(jù)包。

另外,還有一個概念,就是服務(wù)進程拿了一部分?jǐn)?shù)據(jù)后開始處理,但是還沒有處理完又有新的數(shù)據(jù)來了,當(dāng)緩沖區(qū)數(shù)據(jù)過多,可能就會造成數(shù)據(jù)溢出丟失。解決辦法就是在進程中設(shè)計了一個特殊的監(jiān)聽線程負責(zé)監(jiān)聽綁定的端口,如果有數(shù)據(jù)過來,監(jiān)聽線程就會把這個數(shù)據(jù)從緩沖區(qū)取走,讓其他的線程處理。作者給的例子非常顯淺易懂,比如把公司比作是一個進程,前臺比作一個監(jiān)控線程,而其他的人則可比做處理數(shù)據(jù)包的其他線程,當(dāng)快遞源源不斷的寄到公司的時候,監(jiān)控線程是可以隨時通知其他線程來拿走數(shù)據(jù)包進行處理的,而不用等到一個完成才能叫下一個線程。

TCP和UDP

TCP(Transmission Control Protocol)即傳輸控制協(xié)議,IP(Internet Protocol)即因特網(wǎng)互聯(lián)協(xié)議。TCP/IP是一個協(xié)議簇,也就是許多協(xié)議的集合,包含了很多不同的協(xié)議,并定義好了整個互聯(lián)網(wǎng)連接和協(xié)商的最基礎(chǔ)原則。

TCP和UDP處于整個網(wǎng)絡(luò)協(xié)議棧的應(yīng)用層,是兩個不同的通信協(xié)議,其作用都是傳輸數(shù)據(jù),常見的網(wǎng)絡(luò)數(shù)據(jù)都是基于這兩種協(xié)議進行傳輸?shù)摹?/p>

TCP是應(yīng)答式通信方式,UDP是只管發(fā)送而不管是否接收成功的通信方式。TCP的數(shù)據(jù)傳輸需要一個邏輯上的私有通道,當(dāng)連接兩端成功后,所有的數(shù)據(jù)都在這條通道上傳輸,發(fā)送方也會收到數(shù)據(jù)被成功接收的回執(zhí)。另外,為保證這條通道的正確建立,客戶端和服務(wù)端需要進行”三次握手<傳輸兩端需要三次確認,才能開始通信>“,保證了數(shù)據(jù)的可靠性,但是降低的效率。

TCP保證可靠性的手段:順序編號、確認機制和超時重傳。

UDP則比較簡單粗暴,不管對方的狀態(tài),直接發(fā)送數(shù)據(jù)不需要建立通道,所以保障的數(shù)據(jù)傳輸?shù)男?,但是丟失了可靠性。

但是每種場景應(yīng)用哪一種傳輸協(xié)議,應(yīng)結(jié)合實際情況考慮,不能一概而論。

反向代理

一般意義上的代理,都是指客戶端向外界發(fā)送請求時,并不直接與目標(biāo)服務(wù)器連接,而是將所有的請求交給一個代理服務(wù)器,他負責(zé)對外連接外界的目標(biāo)服務(wù)器。同時,外界從服務(wù)器返回的數(shù)據(jù)也是先經(jīng)過代理服務(wù)器返回客戶端。在外界看來,所有的客戶端都隱藏在代理服務(wù)器后面,起到了保護客戶端的作用。

反向代理,則恰好相反,是針對服務(wù)器的一種代理技術(shù),可以接受客戶端的請求,然后把他們分發(fā)給被代理的后端服務(wù)器上,等這些服務(wù)器處理完請求后,再將結(jié)果轉(zhuǎn)發(fā)給客戶端,他是將服務(wù)器都隱藏在身后,對客戶端來說也許只有一臺服務(wù)器,但是反代理服務(wù)器也許服務(wù)了成千上外臺的后端服務(wù)器。

那么,反向代理服務(wù)器的意義則是實現(xiàn)了負載均衡,因為會有很多臺服務(wù)器提供服務(wù),但是每一臺服務(wù)器的負荷可能不一樣,如果請求被發(fā)送到負荷較高的服務(wù)器,他的處理時間可能較長,但是客戶端不知道那臺服務(wù)器比較清閑,而反向代理服務(wù)器知道每臺服務(wù)器的負載量,會將請求轉(zhuǎn)發(fā)到相對空閑的服務(wù)器。

同時,反向代理服務(wù)器還可以減輕后端服務(wù)器的壓力,比如一些靜態(tài)資源或者緩存數(shù)據(jù),可以直接放在反向代理服務(wù)器上,不用將這些請求放到后端服務(wù)器,這樣就可以直接服務(wù)前臺應(yīng)用了。反向代理服務(wù)器還能為后端服務(wù)器阻擋一些網(wǎng)絡(luò)攻擊,提升后臺服務(wù)器的安全性,反向代理服務(wù)器對于后端服務(wù)器而言,如同產(chǎn)品經(jīng)理和研發(fā)同學(xué),能過濾掉不必要的需求,減輕工程師的對接壓力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容