- 這是老楊的第135篇文章 | 預(yù)計(jì)閱讀8min - 今天是星期二,你好不容易今天準(zhǔn)點(diǎn)下班,6點(diǎn)打卡。 心情因?yàn)橄掳嗟牡絹?lái)正美,恰好外賣小哥在小區(qū)門口遇見(jiàn)你,把你點(diǎn)的奢華外賣送到你手上。 哎呀,心情更美了。 進(jìn)門打開(kāi)電腦,把外賣放在桌上,極具儀式感準(zhǔn)備登錄b站開(kāi)一部快樂(lè)肥宅劇配飯時(shí),你發(fā)現(xiàn): 在瀏覽器網(wǎng)址框內(nèi)輸入www.bilibili.com之后,經(jīng)過(guò)0.5秒的反應(yīng)時(shí)間,就會(huì)看到b站的主頁(yè)。 這時(shí),你的筷子一頓,腦海里開(kāi)始不受控制的思考起一個(gè)神秘的問(wèn)題: “這0.5秒的時(shí)間內(nèi),電腦是做了多少操作,才找到b站這個(gè)頁(yè)面的?” 這就是老楊今天要分析的問(wèn)題: 在這簡(jiǎn)單的2秒反應(yīng)時(shí)間的背后,為了找到b站這個(gè)頁(yè)面,你的電腦到底飛速干了多少活兒 分析這個(gè)問(wèn)題前 你需要了解的基礎(chǔ)問(wèn)題 01 IP地址和域名有啥區(qū)別?首先,我們要知道,平時(shí)我們?cè)谶@個(gè)瀏覽器搜索的網(wǎng)址并不是IP地址,而是域名。 像www.bilibili.com,它就是一個(gè)典型的域名,圖上的知乎也是。 那B站的IP地址是啥?是110.76.40.240。 域名的出現(xiàn)主要是方便人們記憶,一大串?dāng)?shù)字對(duì)于你來(lái)說(shuō)記起來(lái)肯定不如bilibili快。 問(wèn)你百度的IP地址是啥,你不太清楚; 但問(wèn)你百度的網(wǎng)址是啥,你馬上就能想起www.baidu.com,就是這么個(gè)道理。 IP地址究竟是啥? 老楊再之前的文章里詳細(xì)分析過(guò):如何形象生動(dòng)的解釋IP地址、子網(wǎng)掩碼和網(wǎng)關(guān)? 簡(jiǎn)單來(lái)說(shuō),IP地址是人們?cè)贗nternet上為了區(qū)分?jǐn)?shù)以億計(jì)的主機(jī)而給每臺(tái)主機(jī)分配的一個(gè)專門的地址,通過(guò)IP地址就可以訪問(wèn)到每一臺(tái)主機(jī)。 IP本身沒(méi)有什么實(shí)際的意義,很難記憶,所以才有了域名。但是路由器只認(rèn)識(shí)二進(jìn)制的IP地址,所以,你記住了域名,電腦記不住,就會(huì)出現(xiàn)一個(gè)問(wèn)題: 當(dāng)你使用域名訪問(wèn)某一個(gè)網(wǎng)站時(shí),需要先將域名翻譯成對(duì)應(yīng)的IP地址,這個(gè)過(guò)程叫做“域名解析”。 但是……我平時(shí)輸入的時(shí)候可沒(méi)有翻譯過(guò)啊,這背后是誰(shuí)再操作?老楊第二點(diǎn)就給你說(shuō)明白。 補(bǔ)充一個(gè)小技巧: 如果你想查看某一個(gè)網(wǎng)站的IP地址,要咋整?老楊平時(shí)喜歡用ping來(lái)查看:通過(guò)win+R打開(kāi)cmd ,輸入ping+空格+域名就可以了。 02 DNS又是啥?DNS(Domain Name System)是指域名系統(tǒng),它主要是提供一種從主機(jī)名到IP地址的目錄服務(wù)。 而DNS協(xié)議是指將域名轉(zhuǎn)換為IP地址的一個(gè)規(guī)則。這就是第一點(diǎn)里提及的“域名解析”。 你平時(shí)輸入網(wǎng)址的時(shí)候,沒(méi)有人給你翻譯成IP地址,但是客戶端自動(dòng)就是可以跳轉(zhuǎn)到對(duì)應(yīng)的頁(yè)面去,就是DNS在后面的默默奉獻(xiàn)。 為啥要特地整一個(gè)DNS呢? 因?yàn)橐婚_(kāi)始,咱們的域名和IP的對(duì)應(yīng)關(guān)系都存在host的文件里。 如果一個(gè)新的計(jì)算機(jī)要接入網(wǎng)絡(luò),或者某個(gè)IP需要改改,都要去信息中心定期對(duì)文件里的內(nèi)容進(jìn)行更新,延遲了很久,操作起來(lái)也賊麻煩,所以才有了自動(dòng)翻譯機(jī)——DNS系統(tǒng)。 所以,當(dāng)你輸入www.bilibili.com時(shí),再你按下回車鍵后,停頓的1-2秒內(nèi),DNS系統(tǒng)已經(jīng)悄悄地幫你把這個(gè)b站的域名翻譯成110.76.40.240給路由器看,這才能跳到你想要看到的二次元頁(yè)面。 03 HTTP是啥?看到下面這張圖,你就會(huì)發(fā)現(xiàn)你幾乎時(shí)時(shí)刻刻都在能看到它: 但老楊這里想講的是HTTP協(xié)議。 HTTP(Hyper Text Transfer Protocol)超文本傳輸協(xié)議是一個(gè)應(yīng)用層協(xié)議,也是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。 而HTTP報(bào)文是HTTP協(xié)議一種純文本的數(shù)據(jù)格式,分為請(qǐng)求報(bào)文和響應(yīng)報(bào)文,兩種報(bào)文都具有類似的結(jié)構(gòu),分別由三個(gè)部分構(gòu)成:起始行、首部、主體。 當(dāng)一個(gè)你用你的電腦登錄一個(gè)網(wǎng)站時(shí),通過(guò)HTTP協(xié)議將這個(gè)你請(qǐng)求的這個(gè)“內(nèi)容”封裝到HTTP請(qǐng)求報(bào)文之中。 然后,服務(wù)器收到這個(gè)請(qǐng)求報(bào)文之后,根據(jù)協(xié)議規(guī)范解析報(bào)文,然后給你返回相應(yīng)報(bào)文之后,你才能看到你想要看的網(wǎng)站頁(yè)面。 關(guān)于HTTP狀態(tài)碼的科普內(nèi)容,感興趣的小友可以戳這里:網(wǎng)絡(luò)狀態(tài)碼302和303的區(qū)別究竟是啥? 04 TCP的三次握手TCP的中文名叫做傳輸控制協(xié)議,是供已經(jīng)連接因特網(wǎng)的計(jì)算機(jī)進(jìn)行通信的通信協(xié)議。TCP是互聯(lián)網(wǎng)協(xié)議之一,也是主要的協(xié)議之一。 TCP/IP 定義了電子設(shè)備(比如計(jì)算機(jī))如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。所以討論這個(gè)問(wèn)題,必須要涉及到TCP這個(gè)東西。 詳解TCP三次握手可以看這篇:如果TCP不握手三次,改成兩次或者四次會(huì)怎樣? 計(jì)算機(jī)怎么這么多設(shè)備里,找到我要的網(wǎng)站?說(shuō)完上面四個(gè)基礎(chǔ)概念,我們?cè)倮@回題目本身。 老楊首先要強(qiáng)調(diào)一點(diǎn),計(jì)算機(jī)本身是不會(huì)找到你想要的那個(gè)網(wǎng)站的,它只是了解到你的“需求”之后,再去找“別人”處理這件事。 這個(gè)“別人”就是路由器。 路由器的世界也是層級(jí)分明,計(jì)算機(jī)問(wèn)離它最近的路由器,這個(gè)村子里的路由器不知道的話,就會(huì)網(wǎng)上稟報(bào),報(bào)到縣里的、鎮(zhèn)里的、城里的、全國(guó)的,一個(gè)個(gè)往上稟報(bào),總有一個(gè)路由器會(huì)知道。 畢竟骨干的路由器知道網(wǎng)絡(luò)世界里的所有“路徑”,最后找到你需要的那個(gè)服務(wù)器,路由器發(fā)起了請(qǐng)求連接,你就能登錄上。 并且,IP地址并不是像大海撈針一樣的搜尋的。因?yàn)槿虻腎P地址都已經(jīng)是固定好且唯一的標(biāo)識(shí),這就和我們的世界地圖一樣, 具有唯一性。 地址們都在嗷嗷待哺的等待著人們的“需求”,這個(gè)“需求”不僅可以被動(dòng)的靠路由器一層一層傳輸,也可以靠0.0.0.0這個(gè)“萬(wàn)能喇叭”來(lái)實(shí)現(xiàn)。 一旦對(duì)應(yīng)的網(wǎng)站服務(wù)器能接收到你的請(qǐng)求,就會(huì)雙眼放光,開(kāi)始一番猛如虎的連接操作,在0.5秒內(nèi),你就能看到對(duì)應(yīng)的網(wǎng)站頁(yè)面。 那路由器,到底是怎么具體的找到我想要的那個(gè)網(wǎng)站的呢? 當(dāng)你在登錄網(wǎng)站的2秒內(nèi) 計(jì)算機(jī)到底做了啥? 根據(jù)前面兩個(gè)大點(diǎn),我們?cè)俎垡槐楸澈蟮恼麄€(gè)操作過(guò)程。(終于可以用上第一點(diǎn)里的知識(shí)了) 小楊下班回家打開(kāi)電腦,把外賣放在桌上,極具儀式感準(zhǔn)備登錄b站開(kāi)一部快樂(lè)肥宅劇配飯。 他在瀏覽器網(wǎng)址框內(nèi)輸入www.bilibili.com, 這里的網(wǎng)址是域名,所以需要“翻譯”成計(jì)算機(jī)能看懂的語(yǔ)言,就需要"DNS"出場(chǎng)。 所以,在你按下回車鍵enter之后: 你的瀏覽器會(huì)率先使用DNS獲得對(duì)應(yīng)的IP地址。 如果本地的DNS服務(wù)器沒(méi)有,就像更高級(jí)的DNS服務(wù)器求助,一直到你獲得了B站的IP地址:110.76.40.240。 獲取到了110.76.40.240之后,登錄這個(gè)IP地址的需求就變成了你的“請(qǐng)求”。瀏覽器會(huì)把你的這個(gè)“請(qǐng)求”變成HTTP請(qǐng)求報(bào)文發(fā)送給TCP。 在這個(gè)發(fā)送的過(guò)程里,就出現(xiàn)了最經(jīng)典的“TCP的三次握手”場(chǎng)景。 具體是咋握手的,我們看這里: 首先,TCP先收到了服務(wù)器發(fā)來(lái)的請(qǐng)求“有個(gè)用戶要登錄B站看番”。 這時(shí)候它有點(diǎn)慌,心里想:這個(gè)請(qǐng)求靠不靠譜?。勘仨氁獪y(cè)試一下,驗(yàn)證驗(yàn)證可不可靠。 所以,TCP設(shè)計(jì)的“三次握手”出現(xiàn)了,為的是讓這倆貨接觸一下,自證清白,獲取TCP的信任。 你的計(jì)算機(jī)給服務(wù)器發(fā)消息,“誒哥們,我能不能登個(gè)B站???” 服務(wù)器說(shuō):“可以啊大兄弟,這點(diǎn)小事算啥,你收得到我的信息嗎?” 計(jì)算機(jī)說(shuō):“收到了!真是太好了,感恩的心感謝有你,祝哥們發(fā)大財(cái)!” 通過(guò)這三次握手,TCP確認(rèn)了“我要登錄B站看番”是ok的,接下來(lái),它就會(huì)把你這個(gè)請(qǐng)求再次打包成一個(gè)IP報(bào)文,發(fā)送給B站的服務(wù)器。 在B站確認(rèn)你的請(qǐng)求之后,它也會(huì)發(fā)送一個(gè)IP報(bào)文給你,以此表示確認(rèn)建立鏈接。 經(jīng)歷上述幾個(gè)過(guò)程以后,(也就是你在輸入框里輸入網(wǎng)址并按回車后的0.5秒內(nèi))你順利打開(kāi)了B站,開(kāi)始看起快樂(lè)肥宅劇。 寫到這里,覺(jué)得用這句話結(jié)尾,應(yīng)該是最好的:哪有什么歲月靜好,不過(guò)是有人在替你負(fù)重前行 |
|
來(lái)自: 網(wǎng)絡(luò)工程師老楊 > 《待分類》