1、DNS協議的公用連接埠是53,常用UDP封裝(也可以用TCP封裝的)。
DNS(網域名稱系統)是一種分散式資料庫(IP -- 名字)
2、一些概念:
(1)、DNS的網域名稱的網域名稱最多有63個字元,不分大小寫,比如:sun.tuc.noao.edu 最右邊的是頂級(一級)網域名稱,往左依次是次層網域,第三層網域名...。最多可以有128級網域名稱(0-127;其中0級網域名稱為空白)
(2)、頂級域有三個組成部分,一是組織域(普通域),常用的有7com,edu,org,int,net,gov,mil(其中gov,mil為美國專用),二是國家域(比如:cn等),三是反向網域名稱:arpa,它底下只有一個次層網域in-addr(用來做從名字到IP的轉換)
(3)、以點‘.’結尾的網域名稱稱為FQDN(絕對網域名稱)。(一般說,不完整的網域名稱有兩段(以上),預設為完整的)
(4)、主從伺服器,主伺服器負責維護映射,而從伺服器不建立更新檔案,只是週期性把另一台伺服器(可主可從)中資訊拷過來備份而已(這個拷貝過程叫做地區傳輸),目的是為了建立資料的備份,如果某部伺服器壞了,還有另外的嘛。
3、報文格式:首部12位元組加上可變資料部分
(1)、首部,注意的是標示欄位(2B),應用程式的詢問和應答通過這個來匹配;標誌欄位(2B)中的QR位,0表示查詢,1表示應答;AA位,由應答伺服器設定,當為1時表示該伺服器是該網域名稱的授權伺服器;TC位,當DNS使用UDP封裝,而資料超過512B時,就截斷後面的部分,並將該位置1;RD位,當置1時,客戶希望得到遞迴應答;RA位,當DNS應答包回來,名字伺服器置1時,表示遞迴可用;0
(2)、查詢報文中的問題部分:每個問題格式如下:查詢名(4B),查詢類型(2B),查詢類(2B)。問題的總數記在首部的問題數欄位。
其中,查詢名的格式如下:(以tuc.noao.edu為例):3tuc4noao3edu0
查詢類型常用的如下:A(查IP),PTR(查指標記錄),NS(表示該網域名稱伺服器是要求名字的授權伺服器)
查詢類通常是:IN(0x01 表示互連網地址)
(3)、應答部分格式如下:網域名稱(4B),類型名(2B),類(2B),存留時間(4B),資料長度(2B),資料(由長度值給定)
其中,網域名稱,類型名和類欄位照查詢報文填充;
存留時間以秒為單位,表示客戶程式記住該記錄的時間(這段時間可以放在快取內)。
資料:(分3類)
a、IP地址(類型為A時)
b、網域名稱(用在PTR類型中返回結果)
c、位移指標(長度為2B,頭2bit為11),表示資料放在DNS資料的頭部的距離(一般為12,因為DNS的首部佔12位元組,再下來就是DNS網域名稱),這個叫做壓縮
4、遞迴解析和迭代解析
遞迴解析就是:伺服器A如果知道該網域名稱對應的IP地址,則返回結果;如果不知道,就向別的伺服器B發送請求,如此類推到結果出來為止。
迭代解析就是:如A知道,返回結果;如果不知道,則返回別的網域名稱伺服器B的地址給客戶,讓客戶去訪問B,如此類推。
5、指標查詢(已知IP查網域名稱)
已知IP,在問題部分的網域名稱欄位要這樣做(以220.181.6.19為例),網域名稱是 19.6.181.220.in-addr.arpa (就是頂級域arpa的用途)。發送類型為PTR的查詢,返回的結果的資料部分就是所求。
6、linux下,DNS伺服器的地址在這個檔案中:/etc/resolv.conf 檔案中。應用程式通過本地的名字解譯器進行IP與網域名稱的呼喚,而名字解譯器進程則通過名字伺服器打交道。(用host程式可以運行網域名稱解析器進程);windows下,用nslookup程式運行網域名稱解析器進程
7、注意的一些東西:
快取,當伺服器收到另外一個伺服器的應答時,在將應答發回給客戶的同時,拷貝一份到快取,同時標記為未授權的;存留時間欄位就是針對這個來用的,就是有效期間只是存留時間裡面的秒數;