官术网_书友最值得收藏!

1.4 DNS域名解析

我們知道互聯(lián)網(wǎng)都是通過(guò)URL來(lái)發(fā)布和請(qǐng)求資源的,而URL中的域名需要解析成IP地址才能與遠(yuǎn)程主機(jī)建立連接,如何將域名解析成IP地址就屬于DNS解析的工作范疇。

可以毫不夸張地說(shuō),雖然我們平時(shí)上網(wǎng)感覺(jué)不到DNS解析的存在,但是一旦DNS解析出錯(cuò),可能會(huì)導(dǎo)致非常嚴(yán)重的互聯(lián)網(wǎng)災(zāi)難。目前世界上的整個(gè)互聯(lián)網(wǎng)有幾個(gè)DNS根域名服務(wù)器,任何一臺(tái)根服務(wù)器壞掉后果都會(huì)非常嚴(yán)重。

1.4.1 DNS域名解析過(guò)程

圖1-10是DNS域名解析的主要請(qǐng)求過(guò)程實(shí)例圖。

圖1-10 DNS域名解析

如圖1-10所示,當(dāng)一個(gè)用戶在瀏覽器中輸入www.abc.com時(shí),DNS解析將會(huì)有將近10個(gè)步驟,這個(gè)過(guò)程大體描述如下。

當(dāng)用戶在瀏覽器中輸入域名并按下回車鍵后,第1步,瀏覽器會(huì)檢查緩存中有沒(méi)有這個(gè)域名對(duì)應(yīng)的解析過(guò)的IP地址,如果緩存中有,這個(gè)解析過(guò)程就將結(jié)束。瀏覽器緩存域名也是有限制的,不僅瀏覽器緩存大小有限制,而且緩存的時(shí)間也有限制,通常情況下為幾分鐘到幾小時(shí)不等,域名被緩存的時(shí)間限制可以通過(guò)TTL屬性來(lái)設(shè)置。這個(gè)緩存時(shí)間太長(zhǎng)和太短都不好,如果緩存時(shí)間太長(zhǎng),一旦域名被解析到的IP有變化,會(huì)導(dǎo)致被客戶端緩存的域名無(wú)法解析到變化后的IP地址,以致該域名不能正常解析,這段時(shí)間內(nèi)有可能會(huì)有一部分用戶無(wú)法訪問(wèn)網(wǎng)站。如果時(shí)間設(shè)置太短,會(huì)導(dǎo)致用戶每次訪問(wèn)網(wǎng)站都要重新解析一次域名。

第2步,如果用戶的瀏覽器緩存中沒(méi)有,瀏覽器會(huì)查找操作系統(tǒng)緩存中是否有這個(gè)域名對(duì)應(yīng)的DNS解析結(jié)果。其實(shí)操作系統(tǒng)也會(huì)有一個(gè)域名解析的過(guò)程,在Windows中可以通過(guò)C:\Windows\System32\drivers\etc\hosts文件來(lái)設(shè)置,你可以將任何域名解析到任何能夠訪問(wèn)的IP地址。如果你在這里指定了一個(gè)域名對(duì)應(yīng)的IP地址,那么瀏覽器會(huì)首先使用這個(gè)IP地址。例如,我們?cè)跍y(cè)試時(shí)可以將一個(gè)域名解析到一臺(tái)測(cè)試服務(wù)器上,這樣不用修改任何代碼就能測(cè)試到單獨(dú)服務(wù)器上的代碼的業(yè)務(wù)邏輯是否正確。正是因?yàn)橛羞@種本地DNS解析的規(guī)程,所以黑客就有可能通過(guò)修改你的域名解析來(lái)把特定的域名解析到它指定的IP地址上,導(dǎo)致這些域名被劫持。

這導(dǎo)致早期的Windows版本中出現(xiàn)過(guò)很嚴(yán)重的問(wèn)題,而且對(duì)于一般沒(méi)有太多電腦知識(shí)的用戶來(lái)說(shuō),出現(xiàn)問(wèn)題后很難發(fā)現(xiàn),即使發(fā)現(xiàn)也很難自己解決,所以Windows 7中將hosts文件設(shè)置成了只讀的,防止這個(gè)文件被輕易修改。

在Linux中這個(gè)配置文件是/etc/named.conf,修改這個(gè)文件可以達(dá)到同樣的目的,當(dāng)解析到這個(gè)配置文件中的某個(gè)域名時(shí),操作系統(tǒng)會(huì)在緩存中緩存這個(gè)解析結(jié)果,緩存的時(shí)間同樣是受這個(gè)域名的失效時(shí)間和緩存的空間大小控制的。

前面這兩個(gè)步驟都是在本機(jī)完成的,所以在圖1-10中沒(méi)有表示出來(lái)。到這里還沒(méi)有涉及真正的域名解析服務(wù)器,如果在本機(jī)中仍然無(wú)法完成域名的解析,就會(huì)真正請(qǐng)求域名服務(wù)器來(lái)解析這個(gè)域名了。

第3步,如何、怎么知道域名服務(wù)器呢?在我們的網(wǎng)絡(luò)配置中都會(huì)有“DNS服務(wù)器地址”這一項(xiàng),這個(gè)地址就用于解決前面所說(shuō)的如果兩個(gè)過(guò)程無(wú)法解析時(shí)要怎么辦,操作系統(tǒng)會(huì)把這個(gè)域名發(fā)送給這里設(shè)置的LDNS,也就是本地區(qū)的域名服務(wù)器。這個(gè)DNS通常都提供給你本地互聯(lián)網(wǎng)接入的一個(gè)DNS解析服務(wù),例如你是在學(xué)校接入互聯(lián)網(wǎng),那么你的DNS服務(wù)器肯定在你的學(xué)校,如果你是在一個(gè)小區(qū)接入互聯(lián)網(wǎng)的,那這個(gè)DNS就是提供給你接入互聯(lián)網(wǎng)的應(yīng)用提供商,即電信或者聯(lián)通,也就是通常所說(shuō)的SPA,那么這個(gè)DNS通常也會(huì)在你所在城市的某個(gè)角落,通常不會(huì)很遠(yuǎn)。在Windows下可以通過(guò)ipconfig查詢這個(gè)地址,如圖1-11所示。

圖1-11 在Windows中查詢DNS Server

在Linux下可以通過(guò)如下方式查詢配置的DNS Server,如圖1-12所示。

圖1-12 在Linux中下查詢DNS Server

這個(gè)專門的域名解析服務(wù)器性能都會(huì)很好,它們一般都會(huì)緩存域名解析結(jié)果,當(dāng)然緩存時(shí)間是受域名的失效時(shí)間控制的,一般緩存空間不是影響域名失效的主要因素。大約80%的域名解析都到這里就已經(jīng)完成了,所以LDNS主要承擔(dān)了域名的解析工作。

第4步,如果LDNS仍然沒(méi)有命中,就直接到Root Server域名服務(wù)器請(qǐng)求解析。

第5步,根域名服務(wù)器返回給本地域名服務(wù)器一個(gè)所查詢域的主域名服務(wù)器(gTLD Server)地址。gTLD是國(guó)際頂級(jí)域名服務(wù)器,如.com、.cn、.org等,全球只有13臺(tái)左右。

第6步,本地域名服務(wù)器(Local DNS Server)再向上一步返回的gTLD服務(wù)器發(fā)送請(qǐng)求。

第7步,接受請(qǐng)求的gTLD服務(wù)器查找并返回此域名對(duì)應(yīng)的Name Server域名服務(wù)器的地址,這個(gè)Name Server通常就是你注冊(cè)的域名服務(wù)器,例如你在某個(gè)域名服務(wù)提供商申請(qǐng)的域名,那么這個(gè)域名解析任務(wù)就由這個(gè)域名提供商的服務(wù)器來(lái)完成。

第8步,Name Server域名服務(wù)器會(huì)查詢存儲(chǔ)的域名和IP的映射關(guān)系表,正常情況下都根據(jù)域名得到目標(biāo)IP記錄,連同一個(gè)TTL值返回給DNS Server域名服務(wù)器。

第9步,返回該域名對(duì)應(yīng)的IP和TTL值,Local DNS Server會(huì)緩存這個(gè)域名和IP的對(duì)應(yīng)關(guān)系,緩存的時(shí)間由TTL值控制。

第10步,把解析的結(jié)果返回給用戶,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過(guò)程結(jié)束。

在實(shí)際的DNS解析過(guò)程中,可能還不止這10個(gè)步驟,如Name Server也可能有多級(jí),或者有一個(gè)GTM來(lái)負(fù)載均衡控制,這都有可能會(huì)影響域名解析的過(guò)程。

1.4.2 跟蹤域名解析過(guò)程

在Linux和Windows下都可以用nslookup命令來(lái)查詢域名的解析結(jié)果,如圖1-13所示。

圖1-13 用nslookup查詢域名解析結(jié)果

在Linux系統(tǒng)中還可以使用dig命名來(lái)查詢DNS的解析過(guò)程,如下所示:

[junshan@v101055.sqa.cm4 admin]$ dig www.taobao.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> www.taobao.com
;; global options:  printcmd
;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16903
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 3, ADDITIONAL: 3
;; QUESTION SECTION:
;www.taobao.com.                     IN     A
;; ANSWER SECTION:
www.taobao.com.         1542    IN      CNAME   www.gslb.taobao.com.
www.gslb.taobao.com.   130      IN       A       115.238.23.251
www.gslb.taobao.com.   130      IN       A       115.238.23.241
;; AUTHORITY SECTION:
gslb.taobao.com.        70371   IN      NS      gslbns3.taobao.com.
gslb.taobao.com.        70371   IN      NS      gslbns1.taobao.com.
gslb.taobao.com.        70371   IN      NS      gslbns2.taobao.com.
;; ADDITIONAL SECTION:
gslbns1.taobao.com.    452      IN      A       121.0.23.218
gslbns2.taobao.com.    452      IN      A       115.124.17.70
gslbns3.taobao.com.    452      IN      A       110.75.3.193
;; Query time: 5 msec
;; SERVER: 10.232.2.254#53(10.232.2.254)
;; WHEN: Sun Feb 12 19:19:052012
;; MSG SIZE  rcvd: 201

結(jié)果的第1行輸出了當(dāng)前Linux的版本號(hào),第2行說(shuō)明可以增加可選參數(shù)printcmd,如果加上printcmd,打印出來(lái)的結(jié)果如下:

  ;; Got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 58602
  ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
  ;; QUESTION SECTION:
  ;printcmd.                   IN     A
  ;; AUTHORITY SECTION:
  .                       10800   IN      SOA     a.root-servers.net. nstld. verisign-grs.com. 20120212001800900 60480086400
  ;; Query time: 208 msec

;; SERVER: 10.232.2.254#53(10.232.2.254)
;; WHEN: Sun Feb 12 19:20:592012
;; MSG SIZE  rcvd: 101

“QUESTION SECTION”部分表示當(dāng)前查詢的域名是一個(gè)A記錄,“ANSWER SECTION”部分返回了這個(gè)域名由CNAME到www.gslb.taobao.com,返回了這個(gè)域名對(duì)應(yīng)的IP地址。

還可通過(guò)增加+trace參數(shù)跟蹤這個(gè)域名的解析過(guò)程,如下所示:

[junshan@v101055.sqa.cm4 admin]$ dig www.taobao.com +trace
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> www.taobao.com +trace
;; global options:   printcmd
.                    449398  IN     NS     k.root-servers.net.
.                    449398  IN     NS     l.root-servers.net.
.                    449398  IN     NS     m.root-servers.net.
.                    449398  IN     NS     a.root-servers.net.
.                    449398  IN     NS     b.root-servers.net.
.                    449398  IN     NS     c.root-servers.net.
.                    449398  IN     NS     d.root-servers.net.
.                    449398  IN     NS     e.root-servers.net.
.                    449398  IN     NS     f.root-servers.net.
.                    449398  IN     NS     g.root-servers.net.
.                    449398  IN     NS     h.root-servers.net.
.                    449398  IN     NS     i.root-servers.net.
.                    449398  IN     NS     j.root-servers.net.
;; Received 272 bytes from 10.232.2.254#53(10.232.2.254) in 0 ms
com.                 172800  IN     NS     a.gtld-servers.net.
com.                 172800  IN     NS     b.gtld-servers.net.
com.                 172800  IN     NS     c.gtld-servers.net.
com.                 172800  IN     NS     d.gtld-servers.net.
com.                 172800  IN     NS     e.gtld-servers.net.
com.                 172800  IN     NS     f.gtld-servers.net.
com.                 172800  IN     NS     g.gtld-servers.net.
com.                 172800  IN     NS     h.gtld-servers.net.
com.                 172800  IN     NS     i.gtld-servers.net.
com.                 172800  IN     NS     j.gtld-servers.net.
com.                 172800  IN     NS     k.gtld-servers.net.
com.                 172800  IN     NS     l.gtld-servers.net.

com.                 172800  IN     NS     m.gtld-servers.net.
;; Received 492 bytes from 193.0.14.129#53(k.root-servers.net) in 607 ms
taobao.com.           172800  IN     NS     ns1.taobao.com.
taobao.com.           172800  IN     NS     ns2.taobao.com.
taobao.com.           172800  IN     NS     ns3.taobao.com.
;; Received 134 bytes from 192.5.6.30#53(a.gtld-servers.net) in 250 ms
www.taobao.com.        1800   IN     CNAME   www.gslb.taobao.com.
gslb.taobao.com.       86400   IN     NS     gslbns2.taobao.com.
gslb.taobao.com.       86400   IN     NS     gslbns3.taobao.com.
gslb.taobao.com.       86400   IN     NS     gslbns1.taobao.com.
;; Received 169 bytes from 110.75.1.19#53(ns1.taobao.com) in 0 ms

上面清楚地顯示了整個(gè)域名是如何發(fā)起和解析的,從根域名(.)到gTLD Server(.com.)再到Name Server(taobao.com.)的整個(gè)過(guò)程都顯示出來(lái)了。還可以看出DNS的服務(wù)器有多個(gè)備份,可以從任何一臺(tái)查詢到解析結(jié)果。

1.4.3 清除緩存的域名

我們知道DNS域名解析后會(huì)緩存解析結(jié)果,其中主要在兩個(gè)地方緩存結(jié)果,一個(gè)是Local DNS Server,另外一個(gè)是用戶的本地機(jī)器。這兩個(gè)緩存都是TTL值和本機(jī)緩存大小控制的,但是最大緩存時(shí)間是TTL值,基本上Local DNS Server的緩存時(shí)間就是TTL控制的,很難人工介入,但是我們的本機(jī)緩存可以通過(guò)如下方式清除。

在Windows下可以在命令行模式下執(zhí)行ipconfig /flushdns命令來(lái)刷新緩存,如圖1-14所示。

圖1-14 在Windows下刷新DNS緩存

在Linux下可以通過(guò)/etc/init.d/nscd restart來(lái)清除緩存,如圖1-15所示。

圖1-15 在Linux下清除DNS緩存

重啟依然是解決很多問(wèn)題的第一選擇。

在Java應(yīng)用中JVM也會(huì)緩存DNS的解析結(jié)果,這個(gè)緩存是在InetAddress類中完成的,而且這個(gè)緩存時(shí)間還比較特殊,它有兩種緩存策略:一種是正確解析結(jié)果緩存,另一種是失敗的解析結(jié)果緩存。這兩個(gè)緩存時(shí)間由兩個(gè)配置項(xiàng)控制,配置項(xiàng)是在 %JAVA_HOME%\lib\security\java.security文件中配置的。兩個(gè)配置項(xiàng)分別是networkaddress.cache. ttl和networkaddress.cache.negative.ttl,它們的默認(rèn)值分別是-1(永不失效)和10(緩存10秒)。

要修改這兩個(gè)值同樣有幾種方式,分別是:直接修改java.security文件中的默認(rèn)值、在Java的啟動(dòng)參數(shù)中增加-Dsun.net.inetaddr.ttl=xxx來(lái)修改默認(rèn)值、通過(guò)InetAddress類動(dòng)態(tài)修改。

在這里還要特別強(qiáng)調(diào)一下,如果我們需要用InetAddress類解析域名時(shí),一定要是單例模式,不然會(huì)有嚴(yán)重的性能問(wèn)題,如果每次都創(chuàng)建InetAddress實(shí)例,每次都要進(jìn)行一次完整的域名解析,非常耗時(shí),這點(diǎn)要特別注意。

1.4.4 幾種域名解析方式

域名解析記錄主要分為A記錄、MX記錄、CNAME記錄、NS記錄和TXT記錄。

◎ A記錄,A代表的是Address,用來(lái)指定域名對(duì)應(yīng)的IP地址,如將item.taobao.com指定到115.238.23.241,將switch.taobao.com指定到121.14.24.241。A記錄可以將多個(gè)域名解析到一個(gè)IP地址,但是不能將一個(gè)域名解析到多個(gè)IP地址。

◎ MX記錄,表示的是Mail Exchange,就是可以將某個(gè)域名下的郵件服務(wù)器指向自己的,如taobao.com域名的A記錄IP地址是115.238.25.245,如果MX記錄設(shè)置為115.238.25.246,是xxx@taobao.com的郵件路由,DNS會(huì)將郵件發(fā)送到115.238.25.246所在的服務(wù)器,而正常通過(guò)Web請(qǐng)求的話仍然解析到A記錄的IP地址。Mail Server

◎ CNAME記錄,全稱是Canonical Name(別名解析)。所謂的別名解析就是可以為一個(gè)域名設(shè)置一個(gè)或者多個(gè)別名。如將taobao.com解析到xulingbo.net,將srcfan.com也解析到xulingbo.net。其中xulingbo.net分別是taobao.com和srcfan.com的別名。前面的跟蹤域名解析中的“www.taobao.com. 1542 IN CNAME www.gslb.taobao.com”就是CNAME解析。

◎ NS記錄,為某個(gè)域名指定DNS解析服務(wù)器,也就是這個(gè)域名有指定的IP地址的DNS服務(wù)器去解析,前面的“gslb.taobao.com. 86400 IN NS gslbns2.taobao. com.”就是NS解析。

◎ TXT記錄,為某個(gè)主機(jī)名或域名設(shè)置說(shuō)明,如可以為xulingbo.net設(shè)置TXT記錄為“君山的博客|許令波”這樣的說(shuō)明。

主站蜘蛛池模板: 习水县| 安图县| 甘孜| 龙井市| 孝感市| 资源县| 托里县| 青田县| 海晏县| 芒康县| 邢台市| 枝江市| 铜鼓县| 道真| 汝州市| 广汉市| 千阳县| 高淳县| 景谷| 萍乡市| 崇仁县| 习水县| 阳东县| 平乡县| 原阳县| 陆良县| 临城县| 台东县| 宽城| 临高县| 阿图什市| 定远县| 宜章县| 烟台市| 邯郸县| 永胜县| 江都市| 延吉市| 镇赉县| 天水市| 虞城县|