22張圖詳解瀏覽器請(qǐng)求數(shù)據(jù)包如何到達(dá)Web服務(wù)器(搞懂網(wǎng)絡(luò)可以畢業(yè)了)

來(lái)自公眾號(hào):一口Linux
作者土豆居士

瀏覽器的請(qǐng)求數(shù)據(jù)包如何到達(dá)Web服務(wù)器拱层?

很多讀者對(duì)于其中的完整流程不是特別的了解鬓长,下面一口君通過(guò)這22張圖胞此,詳細(xì)的講解我們點(diǎn)擊瀏覽器的網(wǎng)址之后,數(shù)據(jù)包是如何經(jīng)過(guò)重重險(xiǎn)阻到達(dá)web server的跨琳。

1. LAN網(wǎng)絡(luò)中的用戶要訪問(wèn)位于遠(yuǎn)程網(wǎng)絡(luò)中的服務(wù)器存儲(chǔ)的網(wǎng)頁(yè)哪痰。用戶首先激活網(wǎng)頁(yè)上的鏈接遂赠。

如果該域名對(duì)應(yīng)的IP地址本地已經(jīng)緩存,就直接訪問(wèn)該地址的80端口或者8080端口晌杰;如果沒(méi)有緩存跷睦,那么瀏覽器會(huì)發(fā)出DNS請(qǐng)求給DNS服務(wù)器,獲得該域名對(duì)應(yīng)的IP地址肋演。

獲得地址后抑诸,瀏覽器會(huì)通過(guò)socket首先向服務(wù)器發(fā)送三次握手,建立起TCP連接爹殊。

image

2. 瀏覽器發(fā)出HTTP Get請(qǐng)求蜕乡。應(yīng)用層添加第7層報(bào)頭,用于標(biāo)識(shí)應(yīng)用程序和數(shù)據(jù)類型梗夸。

數(shù)據(jù)區(qū)需要按照HTTP協(xié)議填充對(duì)應(yīng)數(shù)據(jù)异希,格式參考RFC2616。

image

3. 傳輸層標(biāo)識(shí)上層服務(wù)是萬(wàn)維網(wǎng)(WWW)客戶端。然后称簿,傳輸層將此服務(wù)與TCP協(xié)議相關(guān)聯(lián)并分配端口號(hào)。它使用隨機(jī)選擇的與此所建回話相關(guān)聯(lián)的源端口(12345)惰帽,目的端口(80)與www服務(wù)相關(guān)聯(lián)憨降。

進(jìn)行網(wǎng)絡(luò)通信的進(jìn)程必須綁定一個(gè)端口號(hào),該端口號(hào)用于區(qū)分網(wǎng)絡(luò)通信的進(jìn)程该酗。一個(gè)端口號(hào)只能被1個(gè)進(jìn)程綁定授药。

通常web服務(wù)器的端口號(hào)為80,8080。

image

4. TCP還發(fā)送確認(rèn)號(hào)呜魄,告知www服務(wù)器期待接收的下一TCP數(shù)據(jù)短的序列號(hào)悔叽,序列號(hào)將指示此數(shù)據(jù)段在一系列相關(guān)數(shù)據(jù)段中所處的位置。此外還會(huì)根據(jù)建立會(huì)話的需要適當(dāng)設(shè)置標(biāo)志爵嗅。

該序列號(hào)非常有用娇澎,TCP要保證數(shù)據(jù)正確到達(dá)對(duì)方,并且對(duì)方要能夠讓數(shù)據(jù)有序重組睹晒,重組的依據(jù)就是這個(gè)序列號(hào)趟庄。

image

5. 網(wǎng)絡(luò)層構(gòu)建IP數(shù)據(jù)包,以便標(biāo)識(shí)源主機(jī)和目的主機(jī)伪很。就目的地址而言戚啥,客戶端主機(jī)使用主機(jī)表中緩存的www服務(wù)器主機(jī)名關(guān)聯(lián)的IP地址。而原地址則使用本機(jī)的IPv4地址锉试。網(wǎng)絡(luò)層還標(biāo)識(shí)出此數(shù)據(jù)包中封裝的上層協(xié)議為TCP數(shù)據(jù)段猫十。

image

6.數(shù)據(jù)鏈路層參照地址解析協(xié)議(ARP)緩存來(lái)確定與路由器B接口關(guān)聯(lián)的MAC地址,該接口被制定為默認(rèn)網(wǎng)關(guān)呆盖。然后拖云,它使用此地址構(gòu)建以太網(wǎng)II幀,通過(guò)本地介質(zhì)傳輸IPv4數(shù)據(jù)包絮短。該幀中使用筆記本電腦的MAC地址作為源MAC地址江兢,使用路由器B的Fa0/0接口的MAC地址作為目的MAC地址。

image

7. 該幀的類型字段中還使用值0800指示IPv4上層協(xié)議丁频。該幀以前導(dǎo)碼和幀首(SOF)指示符開(kāi)始杉允,以幀尾幀校驗(yàn)序列中用于產(chǎn)錯(cuò)校驗(yàn)的循環(huán)冗余校驗(yàn)(CRC)結(jié)束。然后席里,它使用CSMA/CD來(lái)控制將幀放置到介質(zhì)上的過(guò)程叔磷。

image

8. 物理層開(kāi)始將幀逐位編碼到介質(zhì)中。路由器A和服務(wù)器之間的網(wǎng)段是10Base-T網(wǎng)段奖磁;因此改基,對(duì)此比特編碼時(shí)使用的是曼徹斯特差分編碼。路由器B會(huì)緩沖收到的比特咖为。

10BASE-T是雙絞線以太網(wǎng)秕狰。

image

9. 路由器檢查前導(dǎo)碼和SOF中的比特位稠腊,查找表示幀開(kāi)始位置的連續(xù)兩個(gè)1的比特位。然后鸣哀,路由器B開(kāi)始緩存這些比特架忌,作為重建幀的一部分。收到整個(gè)幀之后我衬,路由器B生成幀的CRC叹放。然后將此與幀結(jié)束位置的FCS進(jìn)行對(duì)比,確定接收的幀完整無(wú)缺挠羔。當(dāng)確認(rèn)該幀未損壞時(shí)井仰,再比對(duì)幀中的目的MAC地址和接口(Fa0/0)的MAC地址。如果二者相符破加,則刪除幀頭并將數(shù)據(jù)包向上傳送到網(wǎng)絡(luò)層俱恶。

image

10. 網(wǎng)絡(luò)層將數(shù)據(jù)包的目的IPv4地址與路由表中的路由進(jìn)行比對(duì)。找到與下一跳出接口S0/0/0相關(guān)聯(lián)的符合項(xiàng)拌喉。然后將路由器B中的數(shù)據(jù)包傳送到S0/0/0接口的電路速那。

路由器值會(huì)查看數(shù)據(jù)包的IP層信息,并根據(jù)目的IP地址來(lái)查找路由表尿背,路由器是搭建網(wǎng)路最重要的一個(gè)設(shè)備端仰,用來(lái)連接不同的網(wǎng)絡(luò)。

網(wǎng)絡(luò)搭建好之后田藐,每個(gè)路由器中都要提前建立好到各個(gè)網(wǎng)段的路由荔烧。通常路由條目由動(dòng)態(tài)路由協(xié)議RIP、OSPF來(lái)動(dòng)態(tài)創(chuàng)建汽久。

image

11.路由器B創(chuàng)建PPP幀鹤竭,通過(guò)WAN傳輸數(shù)據(jù)包。PPP報(bào)頭中添加了01111110二進(jìn)制標(biāo)志景醇,表示幀的開(kāi)始位置臀稚。然后添加地址字段1111111,表示廣播(意思是“發(fā)送到所有站點(diǎn)”)。由于PPP是點(diǎn)對(duì)點(diǎn)協(xié)議三痰,用作兩個(gè)節(jié)點(diǎn)之間的直接鏈路吧寺,所以此字段沒(méi)有實(shí)際意義。

路由器的所有接口地址都不能處于同一網(wǎng)段散劫,一般一個(gè)出接口連接一個(gè)獨(dú)立的網(wǎng)段稚机。

路由器和路由器之間兩個(gè)網(wǎng)口傳輸數(shù)據(jù)一般用PPP協(xié)議。

image

12. 此外還包括值為0021(十六進(jìn)制)的協(xié)議字段获搏,表示封裝的是IPv4數(shù)據(jù)包赖条。幀尾以幀校驗(yàn)序列中用于差錯(cuò)校驗(yàn)的循環(huán)冗余校驗(yàn)結(jié)束。值為01111110的二進(jìn)制標(biāo)志表示PPP幀的結(jié)束位置。

image

13. 由于兩臺(tái)路由器之間已經(jīng)建立了電路和PPP會(huì)話纬乍,因此物理層開(kāi)始將幀逐位編碼到介質(zhì)中碱茁。接收路由器(路由器A)會(huì)緩沖收到的比特。比特的表示類型和編碼類型取決于使用的WAN技術(shù)的類型仿贬。

image

14. 路由器A檢查標(biāo)志中的比特早芭,確定幀的開(kāi)始位置。然后诅蝶,路由器A開(kāi)始緩存這些比特,作為重建幀的一部分募壕。按照幀尾中的標(biāo)志所示收到整個(gè)幀之后调炬,路由器A生成幀的CRC。然后將此與幀結(jié)束位置的FCS進(jìn)行比對(duì)舱馅,確定接收的幀完整無(wú)缺缰泡。當(dāng)確認(rèn)該幀未損壞時(shí),則刪除幀頭并將數(shù)據(jù)包向上傳送到路由器A的網(wǎng)絡(luò)層代嗤。

image

15. 網(wǎng)絡(luò)層將數(shù)據(jù)包的目的IPv4地址與路由表中的路由進(jìn)行比對(duì)棘钞。找到直接連接到接口Fa0/0的匹配項(xiàng)。然后干毅,將路由器A中的數(shù)據(jù)包傳送到Fa0/0接口的電路宜猜。

image

16. 數(shù)據(jù)鏈路層參照路由器A的ARP緩存來(lái)確定Web服務(wù)器接口關(guān)聯(lián)的MAC地址。然后硝逢,它使用此MAC地址構(gòu)建以太網(wǎng)Ⅱ幀姨拥,通過(guò)本地介質(zhì)將IPv4數(shù)據(jù)包傳輸?shù)椒?wù)器。該幀中使用路由器A的fa0/0接口的MAC地址作為源MAC地址渠鸽,使用服務(wù)器的MAC地址作為目的MAC地址叫乌。該幀的類型字段中還使用值0800指示IPv4上層協(xié)議。該幀以前導(dǎo)碼和幀首(SOF)指示符開(kāi)始徽缚,以幀尾幀校驗(yàn)序列中用于差錯(cuò)校驗(yàn)的循環(huán)貳余校驗(yàn)結(jié)束憨奸。然后,它使用CSMA/CD來(lái)控制將幀放置到介質(zhì)上的過(guò)程凿试。

CSMA/CD即載波偵聽(tīng)多路訪問(wèn)/沖突檢測(cè)排宰,是廣播型信道中采用一種隨機(jī)訪問(wèn)技術(shù)的競(jìng)爭(zhēng)型訪問(wèn)方法,具有多目標(biāo)地址的特點(diǎn)红省。

image

17. 物理層開(kāi)始將幀逐位編碼到介質(zhì)中额各。路由器A和服務(wù)器之間的網(wǎng)段是100Base-T網(wǎng)段;因此吧恃,對(duì)比特編碼時(shí)使用的是4B/5B編碼虾啦。服務(wù)器會(huì)緩沖收到的比特。

image

18. Web服務(wù)器檢前導(dǎo)碼和SOF中的比特位,查找表示幀開(kāi)始位置的連續(xù)兩個(gè)1的比特位傲醉。然后蝇闭,服務(wù)器開(kāi)始緩存這些比特,作為重建幀的一部分硬毕。收到整個(gè)幀之后呻引,服務(wù)器生成幀的CRC。然后將此與幀結(jié)束位置的FCS進(jìn)行比對(duì)吐咳,確定接收的幀完整無(wú)缺逻悠。

image

19. 當(dāng)確認(rèn)該幀未損壞時(shí),再比對(duì)幀中的目的MAC地址與服務(wù)器網(wǎng)卡的MAC地址韭脊。如果二者相符童谒,則刪除幀頭并將數(shù)據(jù)包向上傳送到網(wǎng)絡(luò)層。

image

20. 網(wǎng)絡(luò)層檢查數(shù)據(jù)包的目的IPv4地址沪羔,確定目的主機(jī)饥伊。由于此地址與其自身的IPv4地址相符,因此服務(wù)器處理該數(shù)據(jù)包蔫饰。網(wǎng)絡(luò)層標(biāo)識(shí)出上層協(xié)議是TCP,并將包含的數(shù)據(jù)段傳送到傳輸層的TCP服務(wù)琅豆。

image

21. 服務(wù)器的傳輸層檢查TCP數(shù)據(jù)段,確定數(shù)據(jù)段中包含的數(shù)據(jù)所屬的會(huì)話篓吁。此操作通過(guò)檢查源端口和目的端口來(lái)完成茫因。唯一的源端口和目的端口標(biāo)識(shí)與Web服務(wù)器服務(wù)的現(xiàn)有會(huì)話。使用序列號(hào)按照正確的順序放置此數(shù)據(jù)段越除,向上發(fā)送到應(yīng)用層节腐。

前面說(shuō)過(guò)一個(gè)端口只能被一個(gè)進(jìn)程綁定,所以該數(shù)據(jù)只會(huì)傳送給web服務(wù)器進(jìn)程摘盆,而不會(huì)被其他進(jìn)程截獲翼雀。

image

22. 在應(yīng)用層,HTTP Get請(qǐng)求傳送到Web服務(wù)器服務(wù)(httpd)孩擂。然后狼渊,該服務(wù)可以確定對(duì)請(qǐng)求做出的響應(yīng)。

image

實(shí)際的網(wǎng)絡(luò)環(huán)境中类垦,服務(wù)器直接連接的路由器A和本地路由器B之間可能連接了非常多的網(wǎng)絡(luò)設(shè)備狈邑,比如衛(wèi)星、網(wǎng)橋蚤认、光纖等米苹,這些設(shè)備的組網(wǎng)會(huì)更加復(fù)雜,涉及到的網(wǎng)絡(luò)協(xié)議也更多砰琢。所有這些基礎(chǔ)網(wǎng)絡(luò)設(shè)施都由運(yùn)營(yíng)商建設(shè)蘸嘶,造價(jià)特別的昂貴良瞧,如果沒(méi)有中興、華為大力發(fā)展網(wǎng)絡(luò)設(shè)備训唱,我們基本不可能用如此低的價(jià)格來(lái)上網(wǎng)沖浪褥蚯,也不會(huì)誕生美團(tuán)、支付寶况增、微信赞庶、抖音這些互聯(lián)網(wǎng)公司。相信隨著5G的普及澳骤,未來(lái)會(huì)有更多的中國(guó)本土的新興互聯(lián)網(wǎng)公司歧强。

本例雖然組網(wǎng)基礎(chǔ)相對(duì)簡(jiǎn)單,但是萬(wàn)變不離其宗为肮,基本原理一致誊锭。網(wǎng)絡(luò)博大精深,在實(shí)際開(kāi)發(fā)產(chǎn)品中應(yīng)用非常廣泛弥锄,后面一口君還會(huì)陸續(xù)發(fā)布關(guān)于網(wǎng)絡(luò)的文章。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蟆沫,一起剝皮案震驚了整個(gè)濱河市籽暇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饭庞,老刑警劉巖戒悠,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舟山,居然都是意外死亡绸狐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門累盗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寒矿,“玉大人,你說(shuō)我怎么就攤上這事若债》啵” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蠢琳,是天一觀的道長(zhǎng)啊终。 經(jīng)常有香客問(wèn)我,道長(zhǎng)傲须,這世上最難降的妖魔是什么蓝牲? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮泰讽,結(jié)果婚禮上例衍,老公的妹妹穿的比我還像新娘昔期。我一直安慰自己,他們只是感情好肄渗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布镇眷。 她就那樣靜靜地躺著,像睡著了一般翎嫡。 火紅的嫁衣襯著肌膚如雪欠动。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天惑申,我揣著相機(jī)與錄音具伍,去河邊找鬼。 笑死圈驼,一個(gè)胖子當(dāng)著我的面吹牛人芽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绩脆,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼萤厅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了靴迫?” 一聲冷哼從身側(cè)響起惕味,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玉锌,沒(méi)想到半個(gè)月后名挥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡主守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年禀倔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片参淫。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡救湖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涎才,到底是詐尸還是另有隱情捎谨,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布憔维,位于F島的核電站涛救,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏业扒。R本人自食惡果不足惜检吆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望程储。 院中可真熱鬧蹭沛,春花似錦臂寝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至帚呼,卻和暖如春掏缎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煤杀。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工眷蜈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沈自。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓酌儒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親枯途。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忌怎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345