HttpDNS与传统DNS的区别
一、DNS
1、什么是DNS
DNS(Domain Name System,域名系統(tǒng)),DNS 服務(wù)用于在網(wǎng)絡(luò)請求時(shí),將域名轉(zhuǎn)為 IP 地址。能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的 IP 數(shù)串。
傳統(tǒng)的基于 UDP 協(xié)議的公共 DNS 服務(wù)極易發(fā)生 DNS 劫持,從而造成安全問題。
2、DNS 域名系統(tǒng)結(jié)構(gòu)
Root 域名:DNS 域名使用時(shí),規(guī)定由尾部句號(hào)來指定名稱位于根或更高級別的域?qū)哟谓Y(jié)構(gòu)
Top Level 頂級域名:用來指示某個(gè)國家、地區(qū)或組織使用的名稱的類型名稱。如 .com
Second Level 域名:個(gè)人或組織在 Internet 上使用的注冊名稱。如 taobao.com
Third Level 域名:已注冊的二級域名派生的域名。如 www.taobao.com
3、DNS解析過程
當(dāng)一個(gè)用戶在地址欄輸入www.taobao.com時(shí),DNS解析有大致十個(gè)過程,如下:
瀏覽器查緩存:瀏覽器先檢查自身緩存中有沒有被解析過的這個(gè)域名對應(yīng)的ip地址,如果有,解析結(jié)束。同時(shí)域名被緩存的時(shí)間也可通過TTL屬性來設(shè)置。
操作系統(tǒng)緩存:如果瀏覽器緩存中沒有,瀏覽器會(huì)檢查操作系統(tǒng)緩存中有沒有對應(yīng)的已解析過的結(jié)果。而操作系統(tǒng)也有一個(gè)域名解析的過程。
# 查看 windows 本地緩存DNS 解析記錄的命令C:\Users\Admin>ipconfig /displaydns --->> 查看命令# 清除 windows 客戶端本地緩存的DNS 解析記錄的命令C:\Users\Admin>ipconfig /flushdns# windows 系統(tǒng)下的hosts 域名解析記錄的位置C:\Windows\System32\drivers\etc\hosts?
請求本地域名服務(wù)器(LDNS):如果至此還沒有命中域名,才會(huì)真正的請求本地域名服務(wù)器(LDNS)來解析這個(gè)域名,這臺(tái)服務(wù)器一般在你的城市的某個(gè)角落,距離你不會(huì)很遠(yuǎn),并且這臺(tái)服務(wù)器的性能都很好,一般都會(huì)緩存域名解析結(jié)果,大約80%的域名解析到這里就完成了。
Root Server 域名服務(wù)器:如果LDNS仍然沒有命中,就直接跳到Root Server 域名服務(wù)器請求解析
根域名服務(wù)器返回給LDNS一個(gè)所查詢域的主域名服務(wù)器(gTLD Server,國際頂尖域名服務(wù)器,如.com .cn .org等)地址
此時(shí)LDNS再發(fā)送請求給上一步返回的gTLD
接受請求的gTLD查找并返回這個(gè)域名對應(yīng)的Name Server的地址,這個(gè)Name Server就是網(wǎng)站注冊的域名服務(wù)器
Name Server根據(jù)映射關(guān)系表找到目標(biāo)ip,返回給LDNS
LDNS緩存這個(gè)域名和對應(yīng)的ip
LDNS把解析的結(jié)果返回給用戶,用戶根據(jù)TTL值緩存到本地系統(tǒng)緩存中,域名解析過程至此結(jié)束
)LocalDNS服務(wù)器
如果 hosts 與本地解析器緩存都沒有相應(yīng)的網(wǎng)址映射關(guān)系,則本地解析器會(huì)向 TCP/IP 參數(shù)中設(shè)置的首選 DNS 服務(wù)器(我們叫它 Local DNS 服務(wù)器,本地DNS服務(wù)器)發(fā)起一個(gè)遞歸的查詢請求。
Local DNS 服務(wù)器,這臺(tái)服務(wù)器一般在你的城市的某個(gè)角落,距離你不會(huì)很遠(yuǎn),并且這臺(tái)服務(wù)器的性能都很好,一般都會(huì)緩存域名解析結(jié)果,大約80%的域名解析到這里就完成了。
2)域名劫持
瀏覽器中輸入 www.taobao.com,發(fā)出解析請求。本機(jī)的域名解析器 resolver 程序查詢本地緩存和 host 文件中是否為域名的映射關(guān)系,如果有則調(diào)用這個(gè) IP 地址映射,完成解析。
這種操作系統(tǒng)級別的域名解析規(guī)則也被很多黑客利用,通過修改你的hosts文件里的內(nèi)容把特定的域名解析到他指定的ip地址上,造成所謂的域名劫持。所以在windows7中將hosts文件設(shè)置成了readonly,防止被惡意篡改。
如何解決?
“域名劫持”的根源在于:域名服務(wù)器上的記錄被人給改了。最直接的辦法就是不要使用這種 ISP 提供的Local DNS 域名服務(wù)器,TCP/IP 參數(shù)中設(shè)置的首選 DNS 服務(wù)器,改用國外那些比較靠譜的。
目前口碑最好的,大概是 Google 提供的兩個(gè)域名服務(wù)器,IP地址 分別是 8.8.8.8 和 8.8.4.4 ——這倆不光是地址好記,更重要的是,不會(huì)耍流氓。
?
二、HttpDNS
HTTPDNS 利用 HTTP 協(xié)議與 DNS 服務(wù)器交互,代替了傳統(tǒng)的基于 UDP 協(xié)議的 DNS 交互,繞開了運(yùn)營商的 Local DNS,能夠有效避開 DNS 層面的攔截和故障,比如域名污染,域名遞歸服務(wù)器緩存不刷新,運(yùn)營商域名劫持等問題,提高域名解析效率。
另外,由于 DNS 服務(wù)器端獲取的是真實(shí)客戶端 IP 而非 Local DNS 的 IP,能夠精確定位客戶端地理位置、運(yùn)營商信息,從而有效改進(jìn)調(diào)度精確性,提高分發(fā)精準(zhǔn)度,解決用戶 DNS 設(shè)置錯(cuò)誤造成的訪問時(shí)延加大,響應(yīng)過慢的問題。
1、HTTPDNS原理
- 常規(guī)域名解析是通過 DNS 協(xié)議進(jìn)行解析的,其最終結(jié)果就是獲取域名對應(yīng)的真實(shí)服務(wù)器地址,無法繞開 DNS 攔截和故障問題。
- 而 HTTPDNS 則是以 HTTP 的方式代替?zhèn)鹘y(tǒng) DNS 協(xié)議傳遞解析結(jié)果,能夠有效避開 DNS 層面的攔截和故障。
- 客戶端直接訪問 HTTPDNS 接口(直接通過ip訪問,而不是通過域名訪問),根據(jù)客戶端源IP地址,查詢 CDN 內(nèi)部調(diào)度策略,通過響應(yīng)請求的方式,獲取域名的最優(yōu)節(jié)點(diǎn) IP,緩存到本地。(基于容災(zāi)考慮,建議保留使用運(yùn)營商 LocalDNS 解析域名的方式作為備選。)
- 客戶端獲取到業(yè)務(wù) IP 后,就向直接往此 IP 發(fā)送業(yè)務(wù)協(xié)議請求。以 HTTP 請求為例,通過在 header 中指定 host 字段,向 HTTPDNS 返回的 IP 發(fā)送標(biāo)準(zhǔn)的 HTTP 請求即可。
- 請求方式如:
HTTPDNS解決的問題
1. 運(yùn)營商域名劫持
運(yùn)營商為了減少跨網(wǎng)結(jié)算成本,會(huì)在本地運(yùn)營商網(wǎng)內(nèi)搭建內(nèi)容緩存服務(wù)器。本地本網(wǎng)用戶訪問時(shí),運(yùn)營商把域名強(qiáng)行指向內(nèi)容緩存服務(wù)器的 IP 地址,從而把本地本網(wǎng)流量完全留在了本地,減少了跨網(wǎng)訪問。
為了獲取更多利益,部分運(yùn)營商們還會(huì)將對應(yīng)解析內(nèi)容替換成第三方廣告聯(lián)盟的廣告或是釣魚網(wǎng)站等。
2. 轉(zhuǎn)發(fā)解析請求
運(yùn)營商的 LocalDNS 會(huì)存在解析轉(zhuǎn)發(fā)的情況,解析轉(zhuǎn)發(fā)是指運(yùn)營商自身不進(jìn)行域名遞歸解析,而是把域名解析請求轉(zhuǎn)發(fā)到其它運(yùn)營商的遞歸 DNS 上。
客戶使用 CDN 加速服務(wù)后,當(dāng)解析被運(yùn)營商轉(zhuǎn)發(fā), DNS服務(wù)端收到的域名解析請求的來源 IP 就成了其它運(yùn)營商或其他地區(qū)的 IP (DNS 服務(wù)端會(huì)根據(jù)來源 IP 進(jìn)行解析調(diào)度),那么用戶流量就被導(dǎo)向了錯(cuò)誤的節(jié)點(diǎn),造成跨域、跨省、跨運(yùn)營商訪問后果:網(wǎng)站訪問緩慢甚至無法訪問。
3. DNS 多出口
DNS 多出口,是指運(yùn)營商的 LocalDNS 按照標(biāo)準(zhǔn) DNS 協(xié)議進(jìn)行遞歸查詢時(shí),由于存在網(wǎng)絡(luò)多出口且配置了目標(biāo)路由 NAT 的情況,最終導(dǎo)致 LocalDNS進(jìn)行遞歸解析的出口 IP 非本網(wǎng) IP 地址。DNS 多出口的情況會(huì)造成調(diào)度系統(tǒng)收到的域名解析請求來源 IP 變成其它運(yùn)營商的 IP ,最終引發(fā)域名解析錯(cuò)誤、流量跨網(wǎng)。
4. DNS 攻擊
當(dāng)前網(wǎng)絡(luò)攻擊越來越激烈,從歷史來看,每次攻擊的影響范圍都很大,主要攻擊類型:
① 針對公網(wǎng) dns 服務(wù)的攻擊,這個(gè)攻擊影響的是所有解析用戶。一旦受攻擊,意味著所有用戶的域名解析都會(huì)出問題,大家上網(wǎng)都會(huì)出現(xiàn)故障。
② 針對特定 dns 服務(wù)的攻擊,通常為 ddos 攻擊,網(wǎng)宿平臺(tái)可應(yīng)對,其余類型攻擊則影響網(wǎng)宿平臺(tái)該 DNS 服務(wù)的所有用戶。
由于 CDN 加速是通過 CNAME 的方式別名到網(wǎng)宿入口,無論是公網(wǎng) DNS 受到攻擊還是網(wǎng)宿 DNS 受到攻擊,都將對客戶的服務(wù)造成嚴(yán)重影響,甚者直接導(dǎo)致區(qū)域服務(wù)中斷。
總結(jié)
以上是生活随笔為你收集整理的HttpDNS与传统DNS的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中的 // 与 / 的区别
- 下一篇: 如何高效维持网络长连接