推《網(wǎng)絡(luò)是怎樣連接的》

????用了一個(gè)多周時(shí)間看完了《網(wǎng)絡(luò)是怎樣連接的》,感覺寫的非常好,推薦一下并來寫寫書評,準(zhǔn)備有時(shí)間把戶根勤先生的《計(jì)算機(jī)是怎樣跑起來的》和《程序是怎樣跑起來的》也讀讀。
????這本書以一個(gè)探索之旅開始,用比較易懂的語言講述了從在瀏覽器中輸入網(wǎng)址開始,一路追蹤到顯示出網(wǎng)頁內(nèi)容為止的整個(gè)過程,覆蓋了網(wǎng)絡(luò)的全貌。用書中的觀點(diǎn),如果只是講解TCP/IP、以太網(wǎng)這些單獨(dú)的技術(shù),讀者無法理解網(wǎng)絡(luò)技術(shù)背后的本質(zhì)意義;而如果無法理解其本質(zhì)意義,就只能停留在死記硬背的程度,無法做到實(shí)際應(yīng)用。所以該書重點(diǎn)介紹了實(shí)際的網(wǎng)絡(luò)設(shè)備和軟件是如何工作的。
????接下來我來回顧總結(jié)一下這個(gè)過程。
????首先從用戶在瀏覽器中輸入網(wǎng)址(URL)開始,例如當(dāng)我們輸入http://www.baidu.com,然后按下回車鍵后,瀏覽器就會按照一定的規(guī)則去分析這個(gè)網(wǎng)址的含義,然后根據(jù)其含義生成請求消息,但是瀏覽器并不會親自負(fù)責(zé)將數(shù)據(jù)傳送給web服務(wù)器,而是會委托操作系統(tǒng)中的網(wǎng)絡(luò)控制軟件將消息發(fā)送給服務(wù)器。具體來說,瀏覽器解析用戶輸入的網(wǎng)址的含義,將生成的HTTP消息轉(zhuǎn)交給Socket庫,Socket庫將收到的HTTP消息作為數(shù)據(jù)轉(zhuǎn)交給協(xié)議棧。
????到達(dá)協(xié)議棧后,協(xié)議棧會對從瀏覽器接收到的消息打包,然后加上目的地址等控制信息。接著協(xié)議棧將打包好的包交給網(wǎng)卡(負(fù)責(zé)以太網(wǎng)或無線網(wǎng)絡(luò)通信的硬件)然后網(wǎng)卡會將包轉(zhuǎn)換為電信號并通過網(wǎng)線發(fā)送出去,這樣這個(gè)包就進(jìn)入到了網(wǎng)絡(luò)之中。協(xié)議棧中又有TCP(需要連接)、UDP(不需要連接)、IP(傳送網(wǎng)路包、確定路由)。具體來說TCP按照網(wǎng)絡(luò)包的長度對數(shù)據(jù)進(jìn)行拆分,在每個(gè)包前面加上TCP頭部并轉(zhuǎn)交給IP,IP在TCP包前面加上IP頭部,然后查詢MAC地址,并加上MAC頭部,然后將包轉(zhuǎn)交給網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)收到IP發(fā)來的包,將其轉(zhuǎn)交給網(wǎng)卡并發(fā)出發(fā)送指令,網(wǎng)卡檢查以太網(wǎng)的可發(fā)送狀態(tài),將包轉(zhuǎn)換成電信號通過雙絞線發(fā)送出去。當(dāng)然,協(xié)議棧還有其他的功能:當(dāng)發(fā)生通信錯(cuò)誤時(shí)重新發(fā)送包,或者調(diào)節(jié)數(shù)據(jù)發(fā)送的速率。
????假設(shè)客戶端計(jì)算機(jī)是連接到家庭或公司的局域網(wǎng)中,然后再通過ADSL和光纖到戶(FTTH)等寬帶線路接入互聯(lián)網(wǎng)。在此場景下,網(wǎng)卡發(fā)送的包會經(jīng)過交換機(jī)等設(shè)備,到達(dá)用來接入互聯(lián)網(wǎng)的路由器。路由器的后面就是互聯(lián)網(wǎng),網(wǎng)絡(luò)運(yùn)營商會負(fù)責(zé)將包送到目的地。具體來說,信號通過雙絞線到達(dá)集線器,集線器將信號廣播到所有端口,這樣信號便到達(dá)交換機(jī),交換機(jī)根據(jù)收到的包的接收方MAC地址查詢自身的地址表找到輸出端口,并將包轉(zhuǎn)發(fā)到輸出端口。
????互聯(lián)網(wǎng)的入口線路稱為接入網(wǎng),數(shù)據(jù)從用來入互聯(lián)網(wǎng)的路由器出發(fā),進(jìn)入到互聯(lián)網(wǎng)的內(nèi)部。在互聯(lián)網(wǎng)的骨干網(wǎng)中,存在很多運(yùn)營商和大量的路由器,進(jìn)入互聯(lián)網(wǎng)的網(wǎng)絡(luò)包就在其中經(jīng)過若干路由器的大接力,最終被發(fā)送到目標(biāo)web服務(wù)器。具體來說,互聯(lián)網(wǎng)接入路由器根據(jù)收到的包的接收方IP地址查詢自身的路由表找到輸出端口,并將包轉(zhuǎn)發(fā)到輸出端口。經(jīng)過互聯(lián)網(wǎng)接入路由后,輸出到互聯(lián)網(wǎng)中的包帶有了PPPoE頭部和PPP頭部,然后ADSL Modem將收到的包拆分成ATM信元并將其轉(zhuǎn)換成電信號后通過電話線發(fā)送出去,ADSL Modem發(fā)送出去的信號經(jīng)過電線桿上的電話線到達(dá)電話局的DSLAM(局端多路Modem),DSLAM將收到的電信號還原成ATM信元并發(fā)送給BAS(寬帶接入服務(wù)器),BAS將ATM信元還原成網(wǎng)絡(luò)包并加上L2TP頭部,根據(jù)接收方IP地址進(jìn)行轉(zhuǎn)發(fā),網(wǎng)絡(luò)包通過隧道到達(dá)位于隧道出口的隧道路由器,L2TP頭部和PPP頭部均被丟棄,通過互聯(lián)網(wǎng)流向web服務(wù)器。
????通過了骨干網(wǎng)后,網(wǎng)絡(luò)包最終到達(dá)了web服務(wù)器所在的局域網(wǎng)中,接下來它要接受防火墻的檢查,通過防火墻的檢查后,網(wǎng)絡(luò)包可能還會遇到緩存服務(wù)器和負(fù)載均衡器,如果用戶請求的頁面已經(jīng)緩存在服務(wù)器上,則代替服務(wù)器向用戶返回頁面數(shù)據(jù)。如果請求的頁面沒有被緩存,緩存服務(wù)器會將請求轉(zhuǎn)發(fā)給web服務(wù)器。經(jīng)過這些機(jī)制后,網(wǎng)絡(luò)包才會到達(dá)web服務(wù)器。
????當(dāng)網(wǎng)絡(luò)包到達(dá)web服務(wù)器后,數(shù)據(jù)會被解包并還原為原始的請求消息,然后交給web服務(wù)器程序。web服務(wù)器收到包后,網(wǎng)卡和網(wǎng)卡驅(qū)動(dòng)會接收這個(gè)包并轉(zhuǎn)交給協(xié)議棧,協(xié)議棧依次檢查IP頭部和TCP頭部,如果沒有問題則取出HTTP消息的數(shù)據(jù)塊并進(jìn)行組裝。HTTP消息被恢復(fù)成原始形態(tài),然后通過Socket庫轉(zhuǎn)交給web服務(wù)器,web服務(wù)器分析HTTP消息的內(nèi)容,并根據(jù)請求內(nèi)容將讀取的數(shù)據(jù)返回給客戶端。響應(yīng)消息回到客戶端的過程就和之前的過程相反了。
????當(dāng)響應(yīng)消息到達(dá)客戶端之后,瀏覽器會從中讀取的網(wǎng)頁的數(shù)據(jù)并在屏幕上顯示出來。到此,訪問web服務(wù)器的一系列操作就全部完成了。整本書就是這樣原原本本的把這個(gè)過程呈現(xiàn)出來,講解的過程不乏形象的比喻,整本書也沒有太晦澀難懂的語言,是一本非常不錯(cuò)的講解網(wǎng)絡(luò)基礎(chǔ)知識的書,也值得二刷,強(qiáng)烈安利給大家。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容