前言:
筆者最近閱讀大量網(wǎng)絡(luò)原理相關(guān)書(shū)籍,因此總結(jié)出此文,讀完本文,讀者們應(yīng)該要了解下面名詞:
瀏覽器、Web服務(wù)器、網(wǎng)址(URL)、HTTP、HTML、協(xié)議、URI、請(qǐng)求消息、解析器、Socket庫(kù)、DNS服務(wù)器、域名
生成HTTP請(qǐng)求消息
向DNS服務(wù)器查詢(xún)Web服務(wù)器的IP地址
DNS服務(wù)器的互相配合(如何找出IP地址)
委托協(xié)議棧發(fā)送消息
生成HTTP請(qǐng)求消息
1、從網(wǎng)址開(kāi)始
我們看NBA,要在瀏覽器輸入某個(gè)nba網(wǎng)址吧,沒(méi)錯(cuò)。就是那串http://開(kāi)頭的那串玩意兒, http://sports.qq.com/,如下圖,只不過(guò)瀏覽器把前面的http://隱藏而已,復(fù)制可以見(jiàn)到完整網(wǎng)址。
這串玩意兒叫網(wǎng)址,更準(zhǔn)確的叫URL(統(tǒng)一資源定位符)我們一般訪問(wèn)的是Web服務(wù)器,但實(shí)際上瀏覽器還有很多功能,F(xiàn)TP(文件傳輸協(xié)議)服務(wù)器上下載和上傳文件,同時(shí)也具備電子郵件客戶(hù)端的功能。所以有各種不同的URL。訪問(wèn)Web服務(wù)器用“http”,而訪問(wèn)FTP服務(wù)器用“ftp”.下面圖一列舉了互聯(lián)網(wǎng)常見(jiàn)的幾種URL,不喜歡看請(qǐng)忽略。
在此,請(qǐng)對(duì)域名,有個(gè)淺顯了解。往后會(huì)詳細(xì)介紹。
域名:像http://xintu.baidu.com這樣以句點(diǎn)(.)分隔的名稱(chēng)。URL開(kāi)頭的文字,即 “http:” “file:” “mailto:” 這部分文字都表示文字都表示瀏覽器應(yīng)當(dāng)使用的訪問(wèn)方法。比如訪問(wèn)Web服務(wù)器時(shí)應(yīng)該使用HTTP協(xié)議,而訪問(wèn)FTP服務(wù)器則應(yīng)該使用FTP協(xié)議。因?yàn)椋覀兛梢园堰@部分理解為訪問(wèn)時(shí)使用的協(xié)議類(lèi)型
HTTP協(xié)議:超文本協(xié)議
2、HTTP的思路
HTTP協(xié)議定義了客戶(hù)端和服務(wù)端之間交互的消息內(nèi)容和步驟。
首先,客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求消息,請(qǐng)求消息包含兩部分(“對(duì)什么”和“進(jìn)行怎樣的操作”)?!皩?duì)什么”是指訪問(wèn)目標(biāo)(URI),“進(jìn)行怎樣的操作”則是指方法,也稱(chēng)HTTP謂詞。收到請(qǐng)求消息后,Web 服務(wù)器會(huì)對(duì)其中的內(nèi)容進(jìn)行解析,通過(guò)接收的URI和方法完成自己的工作,然后將結(jié)果存放在響應(yīng)消息中,返回給客戶(hù)端。
3、生成HTTP請(qǐng)求消息
使用GET方法的情況下,僅憑方法和URI,Web 服務(wù)器就能判斷需要進(jìn)行怎樣的操作,因此消息體中不需要填寫(xiě)任何數(shù)據(jù)。而POST則需要消息體。
4、返回響應(yīng)消息
我們把請(qǐng)求消息發(fā)送出去之后,Web服務(wù)器會(huì)返回響應(yīng)消息。其中會(huì)有狀態(tài)碼和響應(yīng)短語(yǔ)。
1條請(qǐng)求消息中只可以寫(xiě)1個(gè)uRI,所以每次只能獲取1個(gè)文件。比如1個(gè)頁(yè)面中包含3張圖片,那么獲取網(wǎng)頁(yè)加上獲取圖片,一共需要向Web服務(wù)器發(fā)送4條請(qǐng)求。
向DNS服務(wù)器查詢(xún)Web服務(wù)器的IP地址
1、IP地址的基本知識(shí)
生成HTTP消息之后,我們需要委托操作系統(tǒng)將消息發(fā)送給Web服務(wù)器。
因?yàn)闉g覽器只能解析網(wǎng)址并生成HTTP消息,但它本身不具將消息發(fā)送到網(wǎng)絡(luò)中的功能,只能委托操作系統(tǒng)。操作系統(tǒng)發(fā)送消息,必須提供IP地址,而不是通信對(duì)象的域名(前面說(shuō)過(guò),類(lèi)似http://xintu.baidu.com的一串玩意)。所以生成HTTP消息的下一個(gè)步驟就是根據(jù)根據(jù)域名查詢(xún)IP地址。
IP地址科普:
互聯(lián)網(wǎng)和公司內(nèi)部的局域網(wǎng)都是基于TCP/IP的思路來(lái)設(shè)計(jì),TCP/IP結(jié)構(gòu)是由一些小的子網(wǎng),通過(guò)路由器連接起來(lái)組成一個(gè)大網(wǎng)絡(luò)。這里的子網(wǎng)暫時(shí)可以理解為幾臺(tái)計(jì)算機(jī)。
在網(wǎng)絡(luò)中,所有的設(shè)備都會(huì)被分配一個(gè)地址。這個(gè)地址就相當(dāng)于現(xiàn)實(shí)中某條路上的“xx號(hào)xx室”。其中“號(hào)”是分配給整個(gè)子網(wǎng)的,而“室”對(duì)應(yīng)的號(hào)碼稱(chēng)為網(wǎng)絡(luò)號(hào),“室”對(duì)應(yīng)的號(hào)碼稱(chēng)為主機(jī)號(hào),這個(gè)地址的整體叫做IP地址。
通過(guò)IP地址,我們可以判斷出對(duì)象服務(wù)器的位置,從而將消息發(fā)送到服務(wù)器。實(shí)際的IP地址是一串32比特的數(shù)字,按照8比特(1字節(jié))為一組分成4組,分別用十進(jìn)制表示,然后再用圓點(diǎn)隔開(kāi)。eg:“10.11.12.13”、“202.96.128.86”
2、域名和IP地址并用的理由
TCP/IP網(wǎng)絡(luò)是通過(guò)IP地址來(lái)確定通信對(duì)象,因此不知道IP地址就無(wú)法將消息發(fā)送給對(duì)方,這跟我們打電話(huà)需要知道對(duì)方的電話(huà)號(hào)碼一樣才可以。
可能有人會(huì)問(wèn),為什么不直接用IP地址去訪問(wèn)網(wǎng)址,確實(shí),我們直接輸入IP地址是可以訪問(wèn)的。但是IP地址那串?dāng)?shù)字,難以記住。比如百度的網(wǎng)址,不是“xintu.baidu.com”,而是“202.96.128.99”,你怎么記住呢?
然后你可能又會(huì)問(wèn),干么不直接用域名去確定通信對(duì)象呢,其實(shí),這是可以的,但是這會(huì)影響運(yùn)行效率。
IP地址的長(zhǎng)度為32比特(4字節(jié)),而域名最短的也要幾十個(gè)字節(jié),最長(zhǎng)甚至可以達(dá)到255字節(jié)。字節(jié)長(zhǎng)而且長(zhǎng)短不一,處理起來(lái)非常復(fù)雜,所以這影響了效率(增加路由器的負(fù)擔(dān))。
3、Socket 庫(kù)提供查詢(xún)IP地址的功能
DNS服務(wù)器可以幫我們查詢(xún)到IP地址。
通過(guò)DNS服務(wù)器發(fā)出查詢(xún)的操作成為域名解析。負(fù)責(zé)解析的這個(gè)操作就叫做解析器,解析器它是一段程序,包含在操作系統(tǒng)的Socket庫(kù)中(Socket庫(kù)包含很多發(fā)送和接受數(shù)據(jù)的程序組件,是網(wǎng)絡(luò)開(kāi)發(fā)的一種標(biāo)準(zhǔn)庫(kù))。Socket庫(kù)是標(biāo)準(zhǔn)組件,我們從應(yīng)用程序進(jìn)行調(diào)用即可。如果,解析器的程序名稱(chēng)為“getIPadressWithDN”,以及需要解析的域名為“xintu.baidu.com”,過(guò)程如下:
4、解析器的內(nèi)部原理
解析器生成要給DNS服務(wù)器的查詢(xún)消息,但是解析器本身也不具備使用網(wǎng)絡(luò)收發(fā)數(shù)據(jù)的功能(之所以用“也”,是因?yàn)檫@一過(guò)程跟瀏覽器生成HTTP消息發(fā)送給Web服務(wù)器類(lèi)似),所以需要委托協(xié)議棧(操作系統(tǒng)內(nèi)部的網(wǎng)絡(luò)控制軟件,也叫“協(xié)議驅(qū)動(dòng)”、“TCP/IP驅(qū)動(dòng)”)執(zhí)行操作,再通過(guò)網(wǎng)卡發(fā)給DNS服務(wù)器。
網(wǎng)絡(luò)程序調(diào)用解析器,程序的控制流程會(huì)發(fā)生轉(zhuǎn)移。那么“控制流程轉(zhuǎn)移”指的是什么呢?
一般來(lái)說(shuō),應(yīng)用程序編寫(xiě)的操作內(nèi)容是從上往下按順序執(zhí)行的,當(dāng)?shù)竭_(dá)需要調(diào)用解析器的部分時(shí),對(duì)應(yīng)的那一行程序就會(huì)執(zhí)行,應(yīng)用程序本身的工作就會(huì)暫停,然后,Socket庫(kù)的解析器開(kāi)始運(yùn)行,完成應(yīng)用程序委托的操作。像這樣,由于調(diào)用其他的程序,原本運(yùn)行的程序進(jìn)入暫停狀態(tài),而被調(diào)用程序的開(kāi)始運(yùn)行。這就是“控制流程轉(zhuǎn)移”。
DNS服務(wù)器的互相配合
1、DNS服務(wù)器的基本工作
DNS的基本工作就是接受來(lái)自客戶(hù)端查詢(xún)消息,然后根據(jù)消息的內(nèi)容返回響應(yīng)。其中,客戶(hù)端的消息包含3中信息
1、域名:
服務(wù)器、郵件服務(wù)器(郵件地址中@后面的部分)的名稱(chēng)
2、Class:它的值永遠(yuǎn)為“IN”
3、記錄類(lèi)型:
表示域名對(duì)應(yīng)何種類(lèi)型的記錄。當(dāng)類(lèi)型為A(Address)時(shí),表示域名對(duì)應(yīng)的是IP地址;MX(Mail eXchange)時(shí),則表示域名對(duì)應(yīng)的是郵件服務(wù)。
一、查詢(xún)“xintu.baidu.com”IP地址:
域名=http://xintu.baidu.com、Class = IN、記錄類(lèi)型=A
二、查詢(xún)“dwyane@qq.com”郵件服務(wù)器:
域名=qq.com”、Class = IN、記錄類(lèi)型=MX
2、域名的層次結(jié)構(gòu)
互聯(lián)網(wǎng)中不計(jì)其數(shù)的服務(wù)器,所以存儲(chǔ)他們信息的只用一臺(tái)DNS服務(wù)器是不可能的,需要將信息分布在多臺(tái)DNS服務(wù)器,然后它們相互接力配合,從而查找出要查的信息。DNS服務(wù)器中所有信息都是按照域名以分層次的結(jié)構(gòu)保存。類(lèi)似公司中的事業(yè)集團(tuán)、部門(mén)、科室結(jié)構(gòu)。
DNS中的域名是用句點(diǎn)來(lái)分隔的,域名越靠右的位置表示層級(jí)越高。比如:“xintu.ituring.com.cn”域名,cn 是公司集團(tuán),com是研發(fā)部,ituring是后臺(tái)小組,所以可以理解為某公司集團(tuán)cn下的com 研發(fā)部的ituring后臺(tái)小組的xintu。其中相當(dāng)一個(gè)層級(jí)的部分稱(chēng)為域,即com域的下一層級(jí)是ituring 域, 再下一層才是 xintu 這個(gè)名字
cn是國(guó)家頂級(jí)域名,中國(guó)是cn,美國(guó)是us,日本是jp,表示工商企業(yè)的.com,表示網(wǎng)絡(luò)提供商的.net,表示非盈利組織的.org等
有時(shí)我們會(huì)看到類(lèi)似這種“sports.qq.com”、“http://finance.qq.com ”,這兩者有什么關(guān)聯(lián)嗎?
這兩者其實(shí)就是某訊旗下的體育和金融版本,“qq.com”是他的公司域,因?yàn)椴豢赡苷f(shuō)一個(gè)公司的不同板塊(或者說(shuō)不同的事業(yè)集團(tuán)),我給你公司多個(gè)DNS服務(wù)器,一個(gè)域是不可分割的。解決辦法是建立子域。例如某訊就是在公司域“qq.com”的下面建立子域“sports.qq.com”、“http://finance.qq.com ”
尋找相應(yīng)的DNS服務(wù)器并找到IP地址
找到DNS服務(wù)器中存放的信息,關(guān)鍵是找到信息歸哪臺(tái)DNS服務(wù)器管。
互聯(lián)網(wǎng)有無(wú)數(shù)臺(tái)DNS服務(wù)器,不可能一臺(tái)一臺(tái)挨個(gè)找。所以采取以下方法。首先,將負(fù)責(zé)管理下級(jí)域的DNS服務(wù)器的IP地址注冊(cè)到他們的上級(jí)DNS服務(wù)器中,然后上級(jí)DNS服務(wù)器的IP地址再注冊(cè)到更高一級(jí)的DNS服務(wù)器中,以此類(lèi)推。
在互聯(lián)網(wǎng)中,比com和cn更高一級(jí),稱(chēng)為根域。根域在域名的最后加上一個(gè)點(diǎn),如“xintu.baidu.com.”最后的那個(gè)句點(diǎn)代表根域名,但是那個(gè)句點(diǎn)經(jīng)常被省略,根域的DNS服務(wù)器保管著com、cn等DNS服務(wù)器的信息。由于上級(jí)DNS服務(wù)器保管著所有下級(jí)DNS服務(wù)器的信息,所以我們可從根域開(kāi)始一路往下順藤摸瓜找到任意一個(gè)域的DNS服務(wù)器。
另外,根域的DNS服務(wù)器信息存在互聯(lián)網(wǎng)中所有的DNS服務(wù)器中。分配給根域DNS服務(wù)器的IP地址只有13個(gè)。
下面以“xintu.gov.cn”和“sports.qq.com”舉例說(shuō)明DNS服務(wù)器查找流程
客戶(hù)端首先會(huì)訪問(wèn)最近的一臺(tái)DNS服務(wù)器(也就是客戶(hù)端的TCP/IP設(shè)置中填寫(xiě)的DNS服務(wù)器地址),假設(shè)我們要查找“sports.qq.com”這臺(tái)Web服務(wù)器相關(guān)信息,但由于最近的DNS服務(wù)器沒(méi)有存放“sports.qq.com”這一域名對(duì)應(yīng)的信息,所以從該服務(wù)器獲取根域的地址,把查詢(xún)消息轉(zhuǎn)發(fā)給根域,繼續(xù)從根域查找,根域沒(méi)有該域名信息,繼續(xù)往下找,去到com域找,com域沒(méi)有“sports.qq.com”的信息,所以返回他下一級(jí)的“qq.com”域的DNS服務(wù)器IP地址,繼續(xù)往下找…
通過(guò)緩存加快DNS服務(wù)器的響應(yīng)
有時(shí)候不需要從最上級(jí)的根域開(kāi)始查找,因?yàn)镈NS服務(wù)器有一個(gè)緩存功能,可以記住之前的域名。如果要查詢(xún)的域名和相關(guān)信息已經(jīng)在緩存中,那么可以直接從緩存處得到所需信息,然后從緩存位置開(kāi)始向下查找。這樣對(duì)比與從根域開(kāi)始,減少了查詢(xún)時(shí)間。
當(dāng)查詢(xún)的域名不存在時(shí),緩存也會(huì)存儲(chǔ)起來(lái),下次查詢(xún)時(shí),直接快速反應(yīng)。如果信息被緩存了,原本的注冊(cè)信息可能會(huì)發(fā)生改變,那么緩存中的信息就可能不正確了,因此,DNS服務(wù)器中保存的信息設(shè)置一個(gè)有效期,當(dāng)緩存中的信息超過(guò)有效期后,數(shù)據(jù)就會(huì)從緩存中刪除。
委托協(xié)議棧發(fā)送消息
數(shù)據(jù)收發(fā)操作
獲悉ip之后,就可以委托操作系統(tǒng)內(nèi)部的協(xié)議棧發(fā)送消息到目標(biāo)IP地址,也就是發(fā)送到Web服務(wù)器,發(fā)送給Web服務(wù)器的HTTP消息是一種數(shù)字消息。
簡(jiǎn)單來(lái)說(shuō),整體思路就是收發(fā)數(shù)據(jù)的兩臺(tái)計(jì)算機(jī)之間連接了一個(gè)數(shù)據(jù)通道,數(shù)據(jù)沿著這個(gè)通道流動(dòng),最終到達(dá)目的地,會(huì)在目的地的那一端被取出。數(shù)據(jù)流動(dòng)是雙向的,可以從任何一個(gè)端流入。
實(shí)際過(guò)程,可把收發(fā)數(shù)據(jù)總結(jié)為四步:
1、創(chuàng)建套接字(創(chuàng)建套接字階段)
2、將管道連接到服務(wù)器端的套接字上(連接階段)
3、收發(fā)數(shù)據(jù)(通信階段)
4、斷開(kāi)管道并刪除套接字(斷開(kāi)階段)
注:本文轉(zhuǎn)載自程序員大咖秀微信公眾號(hào);文內(nèi)觀點(diǎn)僅供參考。
埃文科技——網(wǎng)絡(luò)空間地圖測(cè)繪領(lǐng)域技術(shù)專(zhuān)家,提供最全面、最精準(zhǔn)的網(wǎng)絡(luò)空間地圖服務(wù)。
公司成立于2012年,專(zhuān)注于網(wǎng)絡(luò)空間、地理空間和社會(huì)空間的相互映射,繪制三位一體的網(wǎng)絡(luò)空間地圖,對(duì)網(wǎng)絡(luò)空間資源的靜態(tài)屬性和動(dòng)態(tài)變化情況進(jìn)行探測(cè)。擁有19項(xiàng)軟件著作權(quán)及10項(xiàng)發(fā)明專(zhuān)利。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長(zhǎng)刪除。
轉(zhuǎn)載請(qǐng)注明出處http://macbookprostickers.com/xintu/1621.html