一、什麼是DNS(域名解析)
Internet上的計算機是通過IP地址來定位的,給出一個IP地址,就可以找到Internet上的某臺主機。而因爲IP地址難於記憶,又發明了域名來代替IP地址。但通過域名並不能直接找到要訪問的主機,中間要加一個從域名查找IP地址的過程,這個過程就是域名解析。
DNS的一個基本特性是使用超高速緩存。即當一個名字服務器收到有關映射的信息(主機名字到IP地址)時,它會將該信息存放在高速緩存中。這樣若以後遇到相同的映射請求,就能直接使用緩存中的結果而無需通過其他服務器查詢。
二、DNS查詢
下圖爲DNS查詢和響應的一般報文格式,由12個字節的首部+ 4個長度可變長度的字段組成。
2.1 標識
標識字段由客戶程序設置並由服務器返回結果。客戶程序通過它來確定響應與查詢是否匹配。
2.2 標誌
- QR(1bit): 0表示查詢報文,1表示響應報文。
- opcode(4bit): 通常值爲0(標準查詢),其他值爲1(反向查詢)和2(服務器狀態請求)。
- AA(1bit標誌): 表示“授權回答(authoritativeanswer)”。該名字服務器是授權於該域的。
- TC (1bit字段): 表示“可截斷的(truncated)”。使用UDP時,它表示當應答的總長度超過512字節時,只返回前512個字節。
- RD(1bit): 表示“期望遞歸(recursiondesired)”。該比特能在一個查詢中設置,並在響應中返回。這個標誌告訴名字服務器必須處理這個查詢,也稱爲一個遞歸查詢。如果該位爲0,且被請求的名字服務器沒有一個授權回答,它就返回一個能解答該查詢的其他名字服務器列表,這稱爲迭代查詢。
- RA(1bit字段),表示“可用遞歸”。如果名字服務器支持遞歸查詢,則在響應中將該比特設置爲1。在後面的例子中可看到大多數名字服務器都提供遞歸查詢,除了某些根服務器。
- Zero( 3bit) 必須爲0。
- rcode是一個4bit的返回碼字段。通常的值爲0(沒有差錯)和3(名字差錯)。名字差錯只有從一個授權名字服務器上返回,它表示在查詢中制定的域名不存在。
隨後的4個16bit字段說明最後4個變長字段中包含的條目數。對於查詢報文,問題(question)數通常是1,而其他3項則均爲0。類似地,對於應答報文,回答數至少是1,剩下的兩項可以是0或非0。
2.3 查詢問題
查詢名是要查找的名字,它是一個或多個標識符的序列。每個標識符以首字節的計數值來說明隨後標識符的字節長度,每個名字以最後字節爲0結束,長度爲0的標識符是根標識符。計數字節的值必須是0~63的數,因爲標識符的最大長度僅爲63。
每個問題和響應都有一個類型類型:最多的就是A iP地址查詢和指針記錄(查詢Ip地址所對應的域名)。
查詢類的值通常爲 1。
2.4 DNS報文中最後的三個字段
回答字段、授權字段和附加信息字段,均採用一種稱爲資源記錄RR(ResourceRecord)的相同格式。
資源記錄格式:
域名是記錄中資源數據對應的名字。它的格式和前面介紹的查詢名字段格式(圖14-6)相同。
類型說明RR的類型碼。它的值和前面介紹的查詢類型值是一樣的。類通常爲1,表示Internet數據。
生存時間字段是客戶程序保留該資源記錄的秒數。資源記錄通常的生存時間值爲2天。
資源數據長度說明資源數據的數量。該數據的格式依賴於類型字段的值。對於類型1(A記錄)資源數據是4字節的IP地址。
三、DNS採用UDP還是TCP傳輸
DNS主要採用UDP進行傳輸。 對於DNS客戶程序,一個好的重傳和超時程序就顯得更重要了。
四、DNS劫持
4.1 什麼是DNS劫持
通過攻擊域名解析服務器(DNS),或僞造域名解析服務器(DNS)的方法,把目標網站域名解析到錯誤的地址從而實現用戶無法訪問目標網站的目的。
4.2 如何消除DNS劫持
主要參考信息: