自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從頁面輸入網(wǎng)址,回車到顯示內(nèi)容,這中間到底經(jīng)歷了什么

開發(fā) 前端
阿粉在學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的內(nèi)容時(shí),腦子里面突然冒出來一個(gè)問題:當(dāng)我們?cè)谝粋€(gè)瀏覽器界面輸入網(wǎng)址,回車到界面顯示內(nèi)容,這中間經(jīng)歷了什么?

[[319026]]

寫在前面

阿粉在學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的內(nèi)容時(shí),腦子里面突然冒出來一個(gè)問題:當(dāng)我們?cè)谝粋€(gè)瀏覽器界面輸入網(wǎng)址,回車到界面顯示內(nèi)容,這中間經(jīng)歷了什么?

先不要往下看,你能想到什么?

下面是我能想到的過程,有可能不是很準(zhǔn)確,如有錯(cuò)誤之處,還望指出。

計(jì)算機(jī)網(wǎng)絡(luò)大體上可以分為應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層和物理層。

當(dāng)我們?cè)陧撁孑斎刖W(wǎng)址,然后回車到顯示內(nèi)容時(shí),我通過上面的層次依次來說。

詳細(xì)過程

應(yīng)用層

假設(shè)我們現(xiàn)在要訪問 google 網(wǎng)站,那么第一步要做的就是打開瀏覽器,在地址欄中輸入 google 的地址,當(dāng)你點(diǎn)擊回車時(shí),瀏覽器知道你要訪問 google 了,但是對(duì)于瀏覽器來說,這只是一個(gè)名字,但是具體在哪兒它是不知道的。比如,你知道某位明星的名字,但是他/她具體的地址在哪兒你不清楚,對(duì)吧?對(duì)于瀏覽器來說也是這樣。

比較好的一點(diǎn)是,想要訪問網(wǎng)站,不像你想見明星那么難。此時(shí)瀏覽器通過 DNS 找到你要訪問的具體網(wǎng)站地址。

當(dāng)然了,如果你想要更準(zhǔn)確的找到地址,也可以通過 HTTPDNS 去查找。通過 DNS 或者 HTTPDNS 現(xiàn)在瀏覽器拿到了具體的 IP 地址,隨后它就開始打包你的請(qǐng)求。對(duì)于舉的例子來說,你只是想要訪問一下,一般使用 HTTP 協(xié)議就可以了;如果有些請(qǐng)求會(huì)涉及到你的賬號(hào)密碼,就會(huì)使用 HTTPS 協(xié)議來保證你的數(shù)據(jù)安全。

傳輸層

到這里, DNS , HTTP , HTTPS 所在的層稱之為應(yīng)用層。

現(xiàn)在應(yīng)用層的事情做完了,接下來應(yīng)用層會(huì)將以上相關(guān)數(shù)據(jù)進(jìn)行封裝,經(jīng)過 Socket 編程,將應(yīng)用層的包發(fā)送給傳輸層。

如果這個(gè)包是使用 HTTP 或者 HTTPS 協(xié)議發(fā)送過來的,那傳輸層就會(huì)使用 TCP 協(xié)議來將數(shù)據(jù)進(jìn)行封裝;如果是使用 DNS 協(xié)議發(fā)送過來的,則會(huì)使用 UDP 協(xié)議來進(jìn)行封裝。

封裝完畢之后,瀏覽器就會(huì)將包交給操作系統(tǒng)的網(wǎng)絡(luò)層。

網(wǎng)絡(luò)層 + 鏈路層 + 物理層

這一部分會(huì)涉及到網(wǎng)絡(luò)層 + 鏈路層 + 物理層,我就不分那么詳細(xì)了~

網(wǎng)絡(luò)層的協(xié)議是 IP 協(xié)議,在 IP 協(xié)議中會(huì)有源 IP 地址和目標(biāo) IP 地址。源 IP 地址也就是瀏覽器所在機(jī)器的 IP 地址,說的再白點(diǎn)兒就是,假設(shè)你是使用電腦瀏覽器發(fā)出的訪問請(qǐng)求,這個(gè)源 IP 地址就是你的電腦 IP 地址 目標(biāo) IP 地址就是你想要訪問的網(wǎng)站地址。還記得嘛,在應(yīng)用層,我們根據(jù) DNS 或 HTTPDNS 已經(jīng)獲取到了想要訪問網(wǎng)站的具體 IP 地址。

OK ,既然此時(shí)操作系統(tǒng)已經(jīng)知道了目標(biāo) IP 地址,接下來它就會(huì)想我怎么根據(jù)這個(gè)目標(biāo) IP 地址找到這臺(tái)機(jī)器呢。首先操作系統(tǒng)會(huì)看這個(gè) IP 地址是不是在局域網(wǎng)內(nèi),如果是的話,從目標(biāo) IP 地址就能看出來。但是很明顯,想要訪問的 google 地址不在本地,在那觸不到的遠(yuǎn)方。

操作系統(tǒng)知道要訪問的地址在遠(yuǎn)方,但是遠(yuǎn)方在哪兒它也不知道。所以它就將這個(gè)數(shù)據(jù)包發(fā)給網(wǎng)關(guān)( gateway ),但是它不知道網(wǎng)關(guān)是哪兒臺(tái)機(jī)器,這可咋整。

沒事兒,反正大家都在一個(gè)地方,吼一嗓子不就得了~所以操作系統(tǒng)就大吼了一聲:咱們的網(wǎng)關(guān)是誰來著。網(wǎng)關(guān)就會(huì)回答它,我就是,我在這兒呢。

上面的那一聲吼,就是 ARP 協(xié)議,通過 ARP 協(xié)議,就知道了網(wǎng)關(guān)的具體地址,也就是 MAC 地址。

接下來這個(gè)數(shù)據(jù)包就到了網(wǎng)關(guān)那里。網(wǎng)關(guān)一般就是路由器,到某個(gè) IP 地址怎么走,在一個(gè)叫做「路由表」中維護(hù)著。

出網(wǎng)關(guān)就比較復(fù)雜了,這里就不詳細(xì)說了,具體可以看這篇文章: 想出網(wǎng)關(guān)?你需要懂得這些

出了網(wǎng)關(guān)之后,就需要拿出源 IP 地址和目標(biāo) IP 地址。因?yàn)橹灰隽司W(wǎng)關(guān),那就是在外面肉搏,如果沒有源 IP 地址和目標(biāo) IP 地址,就不知道這個(gè)請(qǐng)求是從哪兒發(fā)出的,要往哪兒去。

現(xiàn)在這個(gè)數(shù)據(jù)包經(jīng)過了重重關(guān)卡,終于找到了目標(biāo) IP 地址所在的服務(wù)器。此時(shí)服務(wù)器會(huì)首先發(fā)送一個(gè)接收請(qǐng)求,然后再將數(shù)據(jù)包一層層解析,在 TCP 頭中含有目標(biāo)端口號(hào),通過這個(gè)端口號(hào),就能夠找到哪兒個(gè)程序的進(jìn)程正在監(jiān)聽這個(gè)端口號(hào),進(jìn)而我們就找到了我們想要訪問的網(wǎng)頁。

但是我怎么知道從我這里發(fā)出的數(shù)據(jù)包有沒有丟失呢?所以此時(shí) TCP 層會(huì)隔一段時(shí)間發(fā)送一次,這并不是說,頁面又發(fā)送了一次請(qǐng)求,只是 TCP 自己在悶頭重試,直到收到了接收請(qǐng)求。

在我們找到了想要訪問的網(wǎng)頁之后,接下來就會(huì)像來的時(shí)候,再原路返回去。

最后:

沒想到吧,一個(gè)簡單的打開界面,竟然涉及到了這么多的知識(shí)~

當(dāng)然你會(huì)發(fā)現(xiàn)在你輸入網(wǎng)址之后敲回車,頁面幾乎是立刻出來了,這就涉及到了緩存,再深入講的話,這篇文章就很長了,如果這篇文章引起了你的興趣,可以繼續(xù)向下探究,更歡迎留言討論

 

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2020-09-01 11:40:01

HTTPJavaTCP

2020-10-09 08:59:55

輸入網(wǎng)址解密

2010-07-06 10:11:25

瀏覽器

2018-01-03 15:17:26

2017-09-22 13:24:20

2020-01-10 08:54:24

URLDNSTCP

2023-10-30 23:14:57

瀏覽器URL網(wǎng)頁

2017-12-04 09:26:56

架構(gòu)師碼農(nóng)菜鳥

2017-04-11 13:54:49

HTTPURLHTML

2022-05-26 23:36:36

SQLMySQL數(shù)據(jù)

2023-07-24 07:57:23

C++標(biāo)準(zhǔn)功能

2023-11-28 08:24:21

SQLredis

2017-11-14 16:38:05

智慧新城

2017-03-29 15:50:09

AndroidApp框架

2020-04-15 09:35:59

Flutter圖片優(yōu)化

2019-01-07 09:15:10

BAT技術(shù)互聯(lián)網(wǎng)Java

2022-03-04 08:56:58

HTTPDNS 服務(wù)器瀏覽器

2015-09-14 10:18:37

2016-09-18 17:27:06

2018-09-14 14:20:43

人肉智能運(yùn)維
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)