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