自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android性能優(yōu)化之網(wǎng)絡(luò)優(yōu)化DNS和HttpDNS知識(shí)詳解

移動(dòng)開發(fā) Android
在 App 訪問(wèn)網(wǎng)絡(luò)的時(shí)候,DNS 解析是網(wǎng)絡(luò)請(qǐng)求的第一步,默認(rèn)我們使用運(yùn)營(yíng)商的 LocalDNS 服務(wù)。有數(shù)據(jù)統(tǒng)計(jì),在這一塊 3G 網(wǎng)絡(luò)下,耗時(shí)在 200~300ms,4G 網(wǎng)絡(luò)下也需要 100ms。

[[413589]]

本文轉(zhuǎn)載自微信公眾號(hào)「Android開發(fā)編程」,作者Android開發(fā)編程  。轉(zhuǎn)載本文請(qǐng)聯(lián)系A(chǔ)ndroid開發(fā)編程公眾號(hào)。

前言小計(jì)

在 App 訪問(wèn)網(wǎng)絡(luò)的時(shí)候,DNS 解析是網(wǎng)絡(luò)請(qǐng)求的第一步,默認(rèn)我們使用運(yùn)營(yíng)商的 LocalDNS 服務(wù)。有數(shù)據(jù)統(tǒng)計(jì),在這一塊 3G 網(wǎng)絡(luò)下,耗時(shí)在 200~300ms,4G 網(wǎng)絡(luò)下也需要 100ms。

解析慢,并不是 LocalDNS 最大的問(wèn)題,它還存在一些更為嚴(yán)重的問(wèn)題,例如:DNS 劫持、DNS 調(diào)度不準(zhǔn)確(緩存、轉(zhuǎn)發(fā)、NAT)導(dǎo)致性能退化等等,這些才是網(wǎng)絡(luò)優(yōu)化最應(yīng)該解決的問(wèn)題。

想要優(yōu)化 DNS,現(xiàn)在最簡(jiǎn)單成熟的方案,就是使用 HTTPDNS。

今天就來(lái)聊聊,DNS、HTTPDNS

一、什么是DNS

  • DNS(Domain Name System)是域名系統(tǒng)的英文縮寫,是一個(gè)組織的系統(tǒng)管理機(jī)構(gòu),維護(hù)系統(tǒng)內(nèi)的每一個(gè)主機(jī)的ip和主機(jī)名(域名)的對(duì)應(yīng)關(guān)系;
  • DNS即域名解析系統(tǒng),這個(gè)東西說(shuō)對(duì)于開發(fā)者來(lái)說(shuō),應(yīng)該是沒(méi)有不知道的。說(shuō)簡(jiǎn)單點(diǎn),這個(gè)系統(tǒng)的作用就是將域名解析成IP地址。我們的每一次網(wǎng)絡(luò)請(qǐng)求,如果是使用域名,那么就是進(jìn)行域名解析;
  • 一個(gè)優(yōu)秀的域名服務(wù)應(yīng)該能夠滿足兩點(diǎn)要求,一個(gè)是能夠正確的返回IP地址,二就是能夠根據(jù)網(wǎng)絡(luò)情況返回所請(qǐng)求的域名最近的服務(wù)器IP;

二、DNS域名結(jié)構(gòu)

1、DNS域名命名

  • 每個(gè)域名都是一個(gè)標(biāo)號(hào)序列,用字母、數(shù)字和連接符(-)組成;
  • 標(biāo)號(hào)序列總長(zhǎng)度不能超過(guò)255字符,每個(gè)標(biāo)號(hào)都可以看成一個(gè)層次域名;
  • 級(jí)別最低的域名寫在左邊,級(jí)別最高的域名寫在右邊;
  • 域名服務(wù)主要通過(guò)UDP實(shí)現(xiàn),服務(wù)器的端口為53;

2、域名的分級(jí)

 

域名可以劃分為各個(gè)子域,子域還可以繼續(xù)劃分為子域的子域,這樣就形成了頂級(jí)域名、二級(jí)域名、三級(jí)域名等;

頂級(jí)域名可以分為三大類:

  • 國(guó)家頂級(jí)域名:cn、us、uk等;
  • 通用域名:常見(jiàn)的有7個(gè),com、net、org、edu、int、gov、mil;
  • 方向域名:arpa,用于將ip地址轉(zhuǎn)為域名;
  • 域名服務(wù)器;

三、域名解析過(guò)程

域名解析的重要兩點(diǎn):

  • 主機(jī)向本地域名服務(wù)器查詢一般都是采用遞歸查詢。所謂遞歸查詢就是:如果主機(jī)所查詢的本地服務(wù)器不知道被查詢的域名的ip地址,那么本地域名服務(wù)器就以DNS客戶的身份,向其他根域名服務(wù)器繼續(xù)發(fā)出查詢請(qǐng)求報(bào)文(即代替主機(jī)繼續(xù)查詢),而不是讓主機(jī)自己進(jìn)行下一步查詢。因此,遞歸查詢返回的查詢結(jié)果或者是所要查詢的ip地址,或者是報(bào)錯(cuò),表示無(wú)法查詢到所需的ip地址;
  • 本地域名服務(wù)器向根域名服務(wù)器的查詢是迭代查詢。所謂迭代查詢就是:當(dāng)根域名服務(wù)器收到本地域名服務(wù)器發(fā)出的迭代查詢請(qǐng)求報(bào)文時(shí),要么給出所查詢的ip地址,要么告訴本地服務(wù)器:“你下一步應(yīng)當(dāng)向哪一個(gè)域名服務(wù)器進(jìn)行查詢”。然后讓本地域名服務(wù)器進(jìn)行后續(xù)的查詢。根域名服務(wù)器通常是把自己知道的頂級(jí)域名服務(wù)器的ip地址告訴本地域名服務(wù)器,讓本地域名服務(wù)器再向頂級(jí)域名服務(wù)器查詢。頂級(jí)域名服務(wù)器在收到本地域名服務(wù)器的查詢請(qǐng)求后,要么給出所要查詢的ip地址,要么告訴本地服務(wù)器下一步應(yīng)當(dāng)向哪一個(gè)權(quán)限域名服務(wù)器進(jìn)行查詢。最后,知道了所要解析的ip地址或者報(bào)錯(cuò),然后把這個(gè)結(jié)果返回給發(fā)起查詢的主機(jī);

以上兩點(diǎn)是域名解析的重要兩步。但是這并不是解析ip地址的完整過(guò)程,如果瀏覽器的緩存中有該域名對(duì)應(yīng)的ip地址,就不需要向本地域名服務(wù)器請(qǐng)求了等等。下面來(lái)看詳細(xì)過(guò)程:

例如要解析:www.example.com該域名的ip地址;

  • 瀏覽器緩存:當(dāng)用戶通過(guò)瀏覽器訪問(wèn)某域名時(shí),瀏覽器首先會(huì)在自己的緩存中查找是否有該域名對(duì)應(yīng)的ip地址;
  • 操作系統(tǒng)緩存:當(dāng)瀏覽器緩存中無(wú)域名對(duì)應(yīng)IP則自動(dòng)檢查用戶計(jì)算機(jī)系統(tǒng)hosts文件,看是否有該域名對(duì)應(yīng)的ip地址;
  • 路由器緩存:當(dāng)瀏覽器及系統(tǒng)緩存中都沒(méi)有域名對(duì)應(yīng)ip地址,則進(jìn)入路由器緩存中檢查。以上三點(diǎn)都是客戶端的DNS緩存;
  • ISP(網(wǎng)絡(luò)服務(wù)提供商)的LDNS(本地域名服務(wù)器):如果上述三點(diǎn)都沒(méi)有找到對(duì)應(yīng)的地址,就要本地域名服務(wù)器中進(jìn)行查詢。比如你是電信的網(wǎng),則會(huì)進(jìn)入電信的DNS緩存服務(wù)器進(jìn)行查找;
  • 根域名服務(wù)器:本地域名服務(wù)器沒(méi)有找到,本地域名服務(wù)器就會(huì)到根域名進(jìn)行查詢。全球僅有13臺(tái)根域名服務(wù)器。根域名服務(wù)器收到請(qǐng)求后,會(huì)查看區(qū)域文件記錄,若無(wú)則將其管轄下的對(duì)應(yīng)的頂級(jí)域名的ip地址,這里返回.com的地址;
  • 頂級(jí)域名服務(wù)器:根域名服務(wù)器沒(méi)有,則本地域名服務(wù)器向頂級(jí)域名服務(wù)器發(fā)送請(qǐng)求,然后返回次級(jí)域名服務(wù)器的ip地址,這里會(huì)返回.example的地址;
  • 主域名服務(wù)器:主域名服務(wù)器接收請(qǐng)求后查詢自己的緩存,如果沒(méi)有則進(jìn)入下一級(jí)域名服務(wù)器進(jìn)行查找,并重復(fù)該步驟直至找到正確記錄。
  • 保存結(jié)果至緩存:本地域名服務(wù)器把返回的結(jié)果保存到緩存,以備下一次使用,同時(shí)將該結(jié)果反饋給客戶端,客戶端通過(guò)這個(gè)ip地址與web服務(wù)器建立連接;

四、DNS安全和優(yōu)化

1、dns安全問(wèn)題

  • DNS反射/放大攻擊;
  • DDOS攻擊可能造成域名解析癱瘓;
  • DNS/域名劫持:在劫持的網(wǎng)絡(luò)范圍內(nèi)攔截域名解析的請(qǐng)求,分析請(qǐng)求的域名,返回假的ip地址或者使請(qǐng)求失去響應(yīng)。DNS劫持通過(guò)篡改DNS服務(wù)器上的數(shù)據(jù)返回給用戶一個(gè)錯(cuò)誤的查詢結(jié)果來(lái)實(shí)現(xiàn);
  • DNS污染:DNS污染是當(dāng)用戶發(fā)起域名解析請(qǐng)求時(shí),某個(gè)服務(wù)器(非DNS)監(jiān)控到用戶訪問(wèn)的已經(jīng)被標(biāo)記的地址時(shí),該服務(wù)器偽裝成DNS服務(wù)器向用戶發(fā)回錯(cuò)誤的地址;
  • DNS污染與DNS劫持的區(qū)別:DNS劫持修改了dns解析的結(jié)果,DNS污染是不經(jīng)過(guò)DNS服務(wù)器的,而是直接返回了錯(cuò)誤的地址;
  • DNS信息被修改;

2、DNS優(yōu)化

DNS解析是一個(gè)漫長(zhǎng)的過(guò)程,那么它的優(yōu)化有哪些?

1、網(wǎng)頁(yè)端

用戶在請(qǐng)求請(qǐng)求某個(gè)鏈接之前,瀏覽器先嘗試解析該鏈接的域名再將其進(jìn)行緩存。

可以這樣做:

(1) 在服務(wù)器中響應(yīng)設(shè)置X-DNS-Prefetch-Control的值為on啟動(dòng)預(yù)解析

(2) 在HTML中,

(3) 在head中加入link標(biāo)簽:

  1. 如<link rel="dns-prefetch" href="//tj.koudaitong.com/" /> 

不過(guò)現(xiàn)在的Chrome瀏覽器會(huì)自動(dòng)將當(dāng)前頁(yè)面的所有帶href的dns都prefetch一遍。需要手動(dòng)添加上面的link標(biāo)簽的場(chǎng)景是:你后面訪問(wèn)的域名不在當(dāng)前頁(yè)面的所有鏈接中;

正確使用link標(biāo)簽的姿勢(shì):

  • 對(duì)靜態(tài)資源域名做手動(dòng)dns-prefetch
  • 對(duì)js里發(fā)起的跳轉(zhuǎn)、請(qǐng)求做手動(dòng)的dns-prefetch
  • 對(duì)重定向跳轉(zhuǎn)的新域名做手動(dòng)的dns-prefetch
  • 不用對(duì)當(dāng)前頁(yè)面的超鏈接做手動(dòng)的dns-prefetch

域名收斂:建議將靜態(tài)資源只放在一個(gè)域名下面,可以減少DNS的請(qǐng)求

2、客戶端

HttpDNS

HttpDNS是使用HTTP協(xié)議向阿里云的HTTPDNS服務(wù)器的80端口直接進(jìn)行請(qǐng)求,代替?zhèn)鹘y(tǒng)的DNS協(xié)議向LDNS服務(wù)器的53端口進(jìn)行請(qǐng)求。從而可以繞過(guò)LDNS,可以避免運(yùn)行商的域名劫持和調(diào)度不精準(zhǔn)的問(wèn)題;

五、HttpDNS介紹

  • HttpDNS其實(shí)也是對(duì)DNS解析的另一種實(shí)現(xiàn)方式,只是將域名解析的協(xié)議由DNS協(xié)議換成了Http協(xié)議,并不復(fù)雜。使用HTTP協(xié)議向D+服務(wù)器的80端口進(jìn)行請(qǐng)求,代替?zhèn)鹘y(tǒng)的DNS協(xié)議向DNS服務(wù)器的53端口進(jìn)行請(qǐng)求,繞開了運(yùn)營(yíng)商的Local DNS,從而避免了使用運(yùn)營(yíng)商Local DNS造成的劫持和跨網(wǎng)問(wèn)題;
  • 接入HttpDNS也是很簡(jiǎn)單的,使用普通DNS時(shí),客戶端發(fā)送網(wǎng)絡(luò)請(qǐng)求時(shí),就直接發(fā)送出去了,有底層網(wǎng)絡(luò)框架進(jìn)行域名解析。當(dāng)接入HttpDNS時(shí),就需要自己發(fā)送域名解析的HTTP請(qǐng)求,當(dāng)客戶端拿到域名對(duì)應(yīng)的IP之后,就向直接往此IP發(fā)送業(yè)務(wù)協(xié)議請(qǐng)求;
  • 這樣,就再也不用再考慮傳統(tǒng)DNS解析會(huì)帶來(lái)的那些問(wèn)題了,因?yàn)槭鞘褂肏TTP協(xié)議,所以不用擔(dān)心域名劫持問(wèn)題了;而且,如果選擇好的DNS服務(wù)器提供商,還保證將用戶引導(dǎo)的訪問(wèn)速度最快的IDC節(jié)點(diǎn)上接入HttpDNS之前;

總結(jié):

網(wǎng)絡(luò)優(yōu)化的知識(shí)點(diǎn)很多,今天主要介紹了dns的知識(shí)點(diǎn)

 

下次繼續(xù)介紹Android網(wǎng)絡(luò)優(yōu)化的具體實(shí)現(xiàn)方案

 

責(zé)任編輯:武曉燕 來(lái)源: Android開發(fā)編程
相關(guān)推薦

2021-07-29 14:20:34

網(wǎng)絡(luò)優(yōu)化移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)

2022-02-16 14:10:51

服務(wù)器性能優(yōu)化Linux

2021-11-29 11:13:45

服務(wù)器網(wǎng)絡(luò)性能

2011-06-14 14:32:46

性能優(yōu)化

2019-12-13 10:25:08

Android性能優(yōu)化啟動(dòng)優(yōu)化

2023-07-10 16:18:18

性能優(yōu)化開發(fā)

2013-02-20 14:32:37

Android開發(fā)性能

2013-09-17 10:32:08

Android性能優(yōu)化數(shù)據(jù)庫(kù)

2017-01-15 15:13:37

Android性能優(yōu)化優(yōu)化點(diǎn)

2015-09-16 15:48:55

Android性能優(yōu)化電量

2015-09-16 14:37:50

Android性能優(yōu)化運(yùn)算

2015-09-16 13:54:30

Android性能優(yōu)化渲染

2010-03-02 09:53:14

MySQL性能優(yōu)化

2024-03-07 11:03:21

ElasticseaES索引

2009-06-30 11:23:02

性能優(yōu)化

2018-01-09 16:56:32

數(shù)據(jù)庫(kù)OracleSQL優(yōu)化

2019-09-25 08:03:21

Android加速Google

2017-12-23 14:38:41

Android編程開發(fā)優(yōu)化

2015-09-14 09:45:58

虛擬化網(wǎng)絡(luò)網(wǎng)絡(luò)性能

2017-03-29 14:44:20

網(wǎng)絡(luò)性能優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)