1.2向DNS服務(wù)器查詢Web服務(wù)器的IP地址
時(shí)間:2023-02-12 07:21:01 | 來源:建站知識(shí)
時(shí)間:2023-02-12 07:21:01 來源:建站知識(shí)
本節(jié)和前一節(jié)的關(guān)系:在生成HTTP消息之后,下一個(gè)步驟就是根據(jù)域名查詢IP地址,然后根據(jù)IP地址講消息發(fā)送出去
1.簡介IP地址的基本知識(shí)
什么是IP地址和子網(wǎng)掩碼網(wǎng)絡(luò)中,所有的設(shè)備都會(huì)被分配一個(gè)地址。這個(gè)地址相當(dāng)于現(xiàn)實(shí)中某條路上的“××號(hào)××室”。“號(hào)”對應(yīng)的號(hào)碼稱為網(wǎng)絡(luò)號(hào),“室”對應(yīng)的號(hào)碼稱為主機(jī)號(hào),這個(gè)地址的整體稱為IP地址。
我們知道IP地址由兩部分組成——網(wǎng)絡(luò)號(hào)和主機(jī)號(hào),這兩部分共用32位比特位,但相對大小是不固定的,于是就需要一種方式來界定它們之間的分界,而這種分界方式就是通過添加一個(gè)叫做子網(wǎng)掩碼的附加信息來實(shí)現(xiàn)的。
具體規(guī)則如下:
子網(wǎng)掩碼為1的部分表示網(wǎng)絡(luò)號(hào),子網(wǎng)掩碼為0的部分表示主機(jī)號(hào)。
兩種比較特殊的情況主機(jī)號(hào)部分的比特位全部為0或者全部為1時(shí)代表兩種特殊的含義。
主機(jī)號(hào)部分全部為0代表整個(gè)子網(wǎng)而不是子網(wǎng)中的某臺(tái)設(shè)備。
主機(jī)號(hào)部分全部為1代表向子網(wǎng)上所有設(shè)備發(fā)送包,即廣播。
IP地址的作用請求消息發(fā)送到目的地需要域名對應(yīng)的IP地址,通過IP地址我們可以判斷出訪問對象服務(wù)器的位置,從而將消息發(fā)送到服務(wù)器。
消息從客戶端到達(dá)服務(wù)器端的過程客戶端——>客戶端子網(wǎng)中集線器——>離發(fā)送者最近的路由器——>集線器——>中間路由器——很多個(gè)中間子網(wǎng)——>服務(wù)器,中間過程判斷發(fā)往哪一個(gè)節(jié)點(diǎn)時(shí)的依據(jù)就是IP地址。
域名和IP地址并用的原因對人來說,使用域名更加友好,IP地址不好記憶和區(qū)別。
對于計(jì)算機(jī)來說,使用域名,占用了更多的內(nèi)存,增加了機(jī)器的負(fù)擔(dān),使運(yùn)行效率降低。
最終,我們讓人來使用名稱,讓路由器來使用IP地址。為了填補(bǔ)兩者之間的障礙,需要有一個(gè)機(jī)制能夠完成IP地址和域名的相互轉(zhuǎn)換,這樣就能夠在人和機(jī)器雙方都不做出犧牲的前提下完美地解決問題。這個(gè)機(jī)制就是DNS。
2.查詢DNS服務(wù)器的過程
第一步:將查詢工作委托給操作系統(tǒng)瀏覽器本身不具備發(fā)送消息到網(wǎng)絡(luò)中的功能,這一功能需要委托操作系統(tǒng)來實(shí)現(xiàn)。發(fā)送消息的功能對所有應(yīng)用程序來說都是共通的,所以讓操作系統(tǒng)來實(shí)現(xiàn)這個(gè)功能比較合理。
操作系統(tǒng)是如何完成委托的呢?
向DNS服務(wù)器發(fā)送查詢消息,并接收服務(wù)器返回的響應(yīng)消息,那么計(jì)算機(jī)上一定就有DNS客戶端,這個(gè)DNS客戶端我們稱之為DNS解析器,簡稱解析器。
解析器:負(fù)責(zé)執(zhí)行域名解析工作的工具就叫解析器。Socket庫:用于調(diào)用網(wǎng)絡(luò)功能的程序組件集合。解析器的使用方法解析器的用法非常簡單。Socket庫中的程序都是標(biāo)準(zhǔn)組件,只要從應(yīng)用程序中進(jìn)行調(diào)用就可以了,該函數(shù)會(huì)自動(dòng)完成相應(yīng)的工作
具體過程如下:
調(diào)用解析器后,解析器會(huì)向DNS服務(wù)器發(fā)送查詢消息,然后DNS服務(wù)器會(huì)返回響應(yīng)消息。響應(yīng)消息中包含查詢到的IP地址,解析器會(huì)取出IP地址,并將其寫入瀏覽器指定的內(nèi)存地址中。
解析器的內(nèi)部原理1.程序執(zhí)行到解析器函數(shù)那里,控制流程轉(zhuǎn)移到解析器。
2.然后解析器按照DNS規(guī)格(特定的協(xié)議)生成請求消息,該過程和客戶端根據(jù)HTTP協(xié)議生成請求消息的過程類似。
3.之后將請求消息轉(zhuǎn)給協(xié)議棧(和瀏覽器類似,本身不具有收發(fā)消息的功能,而是通過委托實(shí)現(xiàn))
4.控制流程轉(zhuǎn)移到協(xié)議棧,協(xié)議棧執(zhí)行發(fā)送消息操作,通過網(wǎng)卡將消息發(fā)送給DNS服務(wù)器。
5.DNS服務(wù)器根據(jù)域名查詢到IP地址,通過響應(yīng)消息發(fā)回客戶端
6.再經(jīng)過協(xié)議棧被傳遞給解析器,
7.解析器讀取出消息取出IP地址,并將IP地址傳遞給應(yīng)用程序
8.解析器完成工作,控制流程回到了應(yīng)用程序
以上完,這就是具體過程
補(bǔ)充:細(xì)心的你會(huì)發(fā)現(xiàn),客戶端程序是怎么找到DNS服務(wù)器的呢,在網(wǎng)絡(luò)中尋找目標(biāo)不是需要IP地址嗎。答案是,DNS服務(wù)器的IP地址已經(jīng)作為作為TCP/IP的一個(gè)設(shè)置項(xiàng)目事先設(shè)置好的,不需要再去查詢了。
小結(jié):作者是如何來講解的1.作者不直接講瀏覽器如何通過DNS服務(wù)器查詢IP地址,也不僅僅只是講解IP地址在當(dāng)前”如何通過DNS服務(wù)器查詢IP地址“這個(gè)主題下的的作用和意義,而是比較完整的闡釋了IP這個(gè)網(wǎng)絡(luò)概念各方面的內(nèi)容,比如它的解釋規(guī)則,它的作用,它和別的網(wǎng)絡(luò)概念的關(guān)聯(lián)(域名),從整體上幫助我們理解了IP這個(gè)概念的意義,為后面講查詢做鋪墊。
2.作者利用
隱藏的邏輯線,巧妙順理成章的引出了DNS查詢。在講到IP地址和域名都是作為網(wǎng)絡(luò)中設(shè)備地址標(biāo)識(shí)的時(shí)候,引出了這兩者之間需要一個(gè)轉(zhuǎn)換機(jī)制的問題,而這個(gè)機(jī)制就是DNS。
本來在講IP地址的內(nèi)容(IP和別的概念的關(guān)聯(lián)),突然話鋒一轉(zhuǎn)直接來到了DNS,很自然,毫無突兀之感。這是我寫作過程中欠缺的。
感覺這里面是
一條技巧,當(dāng)多個(gè)知識(shí)點(diǎn)概念開始連接的時(shí)候,大多情況下會(huì)自然而然地引出另外一些知識(shí)。所以我們在寫作的時(shí)候,先講清楚概念本身,再講概念之間的關(guān)聯(lián),然后順理成章引出新的點(diǎn)。妙啊妙啊。
3.在講解DNS這個(gè)概念的時(shí)候,作者先補(bǔ)充了一些預(yù)備知識(shí),Socket庫,庫,流程控制的概念,然后簡要描述了解釋器向DNS查詢IP地址的整體流程,最后抽絲剝繭分析原理。(這是第一層思路理解)
預(yù)備知識(shí)——>整體概要——>逐條分析 這是我目前寫作常用的邏輯
作者講解的思路也可以這么來理解,直接進(jìn)入問題,
線性思維逐層推導(dǎo),當(dāng)遇到新的知識(shí)時(shí),就先暫停主線的推導(dǎo)過程,把新知識(shí)單獨(dú)拿出來講明白了,再回到主線繼續(xù)推導(dǎo)。(第二層思路)
特別注意,這種方式操作的難點(diǎn)在于,要暫時(shí)的可以不把問題講明白,省略那些不好理解或者不完整的方面,把整體框架先搭好了,然后后面再補(bǔ)充。
我在之前的寫作中,總是想在第一時(shí)間把問題全部聊明白,結(jié)果使得文章主題不集中,增大了文章的閱讀難度。
(因?yàn)槲宜^把一個(gè)問題聊明白的通常做法是羅列出所有可能的狀況)
總結(jié)技巧:先搭框架,再理細(xì)節(jié)
先解決主要矛盾,暫時(shí)忽視掉次要矛盾
計(jì)算機(jī)基本原理
4.分層工作,計(jì)算機(jī)的基本原理之一:
計(jì)算機(jī)的內(nèi)部結(jié)構(gòu)就是這樣一層一層的。也就是說,很多程序組成不同的層次,彼此之間分工協(xié)作。當(dāng)接到上層委派的操作時(shí),本層的程序并不會(huì)完成所有的工作,而是會(huì)完成一部分工作,再將剩下的部分委派到下層來完成。