NOTE: 作為IT開發(fā)人員,經(jīng)常會(huì)遇到用到或者看到url、域名、DNS等名詞,天天見面,卻一直對(duì)其原理和工作過程理解得不夠透徹,這幾天特地對(duì)相關(guān)的知識(shí)點(diǎn)進(jìn)行了一個(gè)比較全面的了解。這里整理為一個(gè)筆記,以便日后查閱。
我們說:重要的不是解決問題,而是提出合適的問題,本著這種態(tài)度,這里提出我想解釋的問題:
1. url的作用及組成是怎樣的?
2. 域名的作用及其構(gòu)成?
3. DNS作用及DNS解析的過程是怎樣的?
1. URL 和 URI
URL(Uniform Resource Locator 統(tǒng)一資源定位符) 是URI(Uniform Resource Identifier 統(tǒng)一資源標(biāo)識(shí)符) 的子集,標(biāo)識(shí)著資源在互聯(lián)網(wǎng)中的具體地址。
- URI 在某一規(guī)則下能把一個(gè)資源獨(dú)一無二地標(biāo)識(shí)出來
- URL 是以描述資源的位置來唯一確定或者獲取資源
他們的 RFC -- Request for Comments 標(biāo)準(zhǔn)如下
URI的標(biāo)準(zhǔn)格式:
hierarchical part
┌───────────────────┴─────────────────────┐
authority path
┌───────────────┴───────────────┐┌───┴────┐
abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
└┬┘ └───────┬───────┘ └────┬────┘ └┬┘ └─────────┬─────────┘ └──┬──┘
scheme user information host port query fragment
urn:example:mammal:monotreme:echidna
└┬┘ └──────────────┬───────────────┘
scheme path
// 這里不對(duì)URI的格式進(jìn)行詳細(xì)的說明,因?yàn)楦鼮槠毡橹獣缘氖瞧渥蛹疷RL
URL的標(biāo)準(zhǔn)格式:
協(xié)議類型:[//服務(wù)器地址[:端口號(hào)]][/路徑]文件名[?查詢][#片段]
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]注: 在http協(xié)議中 user 和 password 在url中通常不是必須的,所以我們平時(shí)所看到的url是沒有user 和 password 的,另外由于http協(xié)議的默認(rèn)端口號(hào)是80,所以80端口也被省略了。在使用http協(xié)議的時(shí)候,一般除了域名,其他的都是可省略的,
http://會(huì)由瀏覽器自動(dòng)補(bǔ)上
http://zh.wikipedia.org:80/w/index.php?title=Special:%E9%9A%8F%E6%9C%BA%E9%A1%A2&printable=yes
1. http // 協(xié)議,其他常用協(xié)議有ftp、file、telnet、mailto等
2. zh.wikipedia.org // 域名即服務(wù)器
3. 80 // 服務(wù)器上的端口號(hào)(http協(xié)議默認(rèn)的端口,可以省略)
4. /w/index.php // 路徑
5. ?title=Special:XXXX&printable=yes // query
比較常用的協(xié)議類型及其描述如下:
| 協(xié)議 | 描述 |
|---|---|
| file | 主機(jī)系統(tǒng)上的一個(gè)文件 |
| ftp | 文件傳輸協(xié)議 |
| gopher | gopher 協(xié)議 |
| http | 超文本傳輸協(xié)議 |
| https | 安全超文本傳輸協(xié)議 |
| im | 即時(shí)通信 |
| pop | 郵局協(xié)議v3 |
| mailto | 電子郵件地址 |
2. 域名
域名的來源: IP地址是Internet主機(jī)的作為路由尋址用的數(shù)字型標(biāo)識(shí),但卻不容易記憶,為了更容易記憶一個(gè)主機(jī)或服務(wù)器,因而產(chǎn)生了域名(domain name)這一種字符型標(biāo)識(shí)。再由DNS服務(wù)將其轉(zhuǎn)換成計(jì)算機(jī)可以識(shí)別的IP,跟IP一樣域名也是獨(dú)一無二的,一旦注冊(cè),便與對(duì)應(yīng)的IP唯一的綁定
一級(jí)域名是頂級(jí)域名
.com/.cn/.org/.info/.edu/.name 等是頂級(jí)域名
taobao.com 是二級(jí)域名
XXX.taobao.com 是三級(jí)域名(子域名)
3. DNS(Domain Name System) 域名系統(tǒng)
從
URL解析出域名后,要如何才能知道域名對(duì)應(yīng)的IP呢?這就是DNS要做得事。 DNS是因特網(wǎng)的一項(xiàng)核心服務(wù),是一個(gè)可以將域名和IP地址相互映射的分層結(jié)構(gòu)的分布式數(shù)據(jù)庫
解析過程:
第一步:瀏覽器將會(huì)檢查緩存中有沒有這個(gè)域名對(duì)應(yīng)的解析過的IP地址,如果有該解析過程將會(huì)
結(jié)束。瀏覽器緩存域名也是有限制的,包括緩存的時(shí)間、大小,可以通過TTL屬性來設(shè)置。
第二步:如果用戶的瀏覽器中緩存中沒有,瀏覽器將會(huì)查找操作系統(tǒng)緩存中是否有這個(gè)域名對(duì)應(yīng)
的DNS解析結(jié)果。其實(shí)操作系統(tǒng)也會(huì)有一個(gè)域名解析的過程,在Windows中可以通過
C:WindowsSystem32driversetchosts文件來設(shè)置,你可以將任何域名解析到任何能夠訪問的IP
地址。那么瀏覽器會(huì)首先使用這個(gè)IP地址。也正是因?yàn)橛羞@種本地DNS解析的規(guī)程,所以黑客就
有可能通過修改你的域名解析來把特定的域名解析到它指定的IP地址上,導(dǎo)致這些域名被劫持。
第三步:讀取網(wǎng)絡(luò)設(shè)置中的“DNS服務(wù)器地址”,操作系統(tǒng)就會(huì)將這個(gè)域名發(fā)送給這里設(shè)置的
LDNS,也就是本地的域名服務(wù)器。這個(gè)DNS通常都提供給你本地互聯(lián)網(wǎng)接入的一個(gè)DNS服務(wù)。
如果你實(shí)在小區(qū)接入的互聯(lián)網(wǎng),那這個(gè)DNS就是提供給你接入互聯(lián)網(wǎng)的應(yīng)用提供商,即電信或者
是聯(lián)通,也就是通常所說的SPA,可以通過ipconfig查詢這個(gè)地址。
第四步:如果LDNS仍然沒有命中,就直接到Root Server域名服務(wù)器中請(qǐng)求解析。
第五步:根域名服務(wù)器返回給本地服務(wù)器一個(gè)所查詢域的主域名服務(wù)器地址(gTLD Server)。
gTLD是國際頂級(jí)域名服務(wù)器,如.com、.cn、.org等,全球只有13臺(tái)左右。
第六步:本地域名服務(wù)器(Local DNS Server)再向上一步返回的gTLD服務(wù)器發(fā)送請(qǐng)求。
第七步:接受請(qǐng)求的gTLD服務(wù)器查找并返回此域名對(duì)應(yīng)的Name Server域名服務(wù)器的地址,這
個(gè)Name Server通常就是你注冊(cè)的域名服務(wù)器的域名服務(wù)商,例如你的域名服務(wù)商A那里申請(qǐng)一
個(gè)域名,那個(gè)gTLD將會(huì)把這個(gè)域名解析任務(wù)交由這個(gè)域名服務(wù)商的服務(wù)器來解析。
第八步:Name Server域名服務(wù)器會(huì)查詢存儲(chǔ)的域名和IP的映射關(guān)系表,正常情況下都根據(jù)域名
得到目標(biāo)IP表,連同一個(gè)TTL值返回給DNS Server域名服務(wù)器。
第九步:返回該域名對(duì)應(yīng)的IP以及TTL值,Local DNS Server會(huì)緩存這個(gè)域名和IP的對(duì)應(yīng)關(guān)系,
緩存時(shí)間由TTL值限制。
第十步:把解析的結(jié)果返回給用戶,用戶根TTL值緩存在本地系統(tǒng)緩存中,域名解析過程結(jié)束。