域名(Domain Name),是由一串用點(diǎn)分隔的名字組成的互聯(lián)網(wǎng)上某臺(tái)計(jì)算機(jī)或某組計(jì)算機(jī)的標(biāo)識(shí),它的目的是為了方便人們更簡(jiǎn)單便捷地訪問(wèn)互聯(lián)網(wǎng)上的服務(wù)。在實(shí)際的系統(tǒng)實(shí)現(xiàn)中,域名通過(guò)DNS(Domain Name System)系統(tǒng)轉(zhuǎn)化為服務(wù)器的IP地址,以方便機(jī)器通過(guò)IP進(jìn)行尋址和通信。上述行為,我們稱之為域名解析。
作為一次網(wǎng)絡(luò)通信最前置的環(huán)節(jié),域名解析的重要性不言而喻。在傳統(tǒng)的基于瀏覽器的網(wǎng)站訪問(wèn)場(chǎng)景下,域名解析環(huán)節(jié)由瀏覽器內(nèi)核實(shí)現(xiàn),網(wǎng)站開(kāi)發(fā)者無(wú)需關(guān)心域名解析的細(xì)節(jié)。But there are always two sides to every coin,一旦域名解析環(huán)節(jié)發(fā)生異常,開(kāi)發(fā)者面對(duì)這樣的黑盒架構(gòu)就會(huì)顯得束手無(wú)策,一個(gè)很典型的例子即域名劫持問(wèn)題,關(guān)于這一點(diǎn)我們?cè)诤笪臅?huì)有更詳細(xì)的介紹。
進(jìn)入移動(dòng)互聯(lián)網(wǎng)時(shí)代,大量的應(yīng)用基于C/S架構(gòu)構(gòu)建。相較于傳統(tǒng)的面向?yàn)g覽器的Web App,C/S架構(gòu)的應(yīng)用賦予了我們非常大的軟件定制空間,開(kāi)發(fā)者甚至可以滲透到整個(gè)應(yīng)用的底層網(wǎng)絡(luò)實(shí)現(xiàn)當(dāng)中,域名解析環(huán)節(jié)的優(yōu)化因此變?yōu)榱丝赡堋?br/>
優(yōu)化方案——HTTPDNS
1.HTTPDNS使用HTTP協(xié)議進(jìn)行域名解析,代替現(xiàn)有基于UDP的DNS協(xié)議,域名解析請(qǐng)求直接發(fā)送到HTTPDNS服務(wù)端,從而繞過(guò)運(yùn)營(yíng)商的Local DNS。
2.HTTPDNS在遞歸解析實(shí)現(xiàn)上優(yōu)化了與權(quán)威DNS的交互,通過(guò)edns-client-subnet協(xié)議( https://datatracker.ietf.org/doc/rfc7871 )將終端用戶的IP信息直接交付給權(quán)威DNS,這樣權(quán)威DNS就可以忽略Local DNS IP信息,根據(jù)終端用戶的IP信息進(jìn)行精準(zhǔn)調(diào)度,避免Local DNS的坐標(biāo)干擾(當(dāng)然上述精準(zhǔn)調(diào)度方案的前提是權(quán)威DNS需要支持edns-client-subnet,可喜的是當(dāng)前主流的權(quán)威DNS服務(wù)都已支持該協(xié)議)。
3.HTTPDNS基于HTTP協(xié)議,而HTTP基于TCP協(xié)議,對(duì)比傳統(tǒng)的UDP傳輸多了一些冗余的握手環(huán)節(jié),因此從原理上而言網(wǎng)絡(luò)請(qǐng)求方面的開(kāi)銷并沒(méi)有降低。但在實(shí)際使用過(guò)程中,我們可以通過(guò)端上的策略來(lái)實(shí)現(xiàn)一個(gè)零延遲DNS解析的方案。接下來(lái)我們一起來(lái)看看HTTPDNS服務(wù)在移動(dòng)端的最佳實(shí)踐方案。
4.商業(yè)化的HTTPDNS服務(wù)提供了終端SDK方便開(kāi)發(fā)者進(jìn)行終端上的集成和使用