DNS為什麼查詢根域名服務器只返回13個IP地址

一次DNS的遞歸查詢,首先會查詢根域名服務器(.),然後是com.,edu.,等頂級域,根域名服務器承載了全球ipv4的域名解析,他的數量肯定是越多越好,為什麼一次查詢根域名服務器器只返回13個IP地 址呢?我們先看看DNS包結構,再分析DNS包傳輸的⼀一些限制;

1、DNS包傳輸限制

以太⽹的最⼤傳輸單元(MTU)是1500,就是說一次鏈路上傳輸的最⼤長度是1500,結合下圖,IP⾸部20字節,UDP⾸部8字節,DNS包的⻓度是否是1500減去28呢?

DNS主要使⽤用UDP協議,由於UDP協議是不不可靠的傳輸,沒有TCP協議的超時和重傳機制,所以UDP服務為了了避免分⽚片,都會對應⽤用做⼀個包長度的限制;

DNS為什麼查詢根域名服務器只返回13個IP地址

先來直觀的看⼀一下TCP協議傳輸⻓長度的協商機制:

DNS為什麼查詢根域名服務器只返回13個IP地址

TCP協議在三次握手的時候,SYN包⾥里面的MSS字段代表TCP協議的最⼤報文段⻓度,通常情況下,MSS=MTU-20(IP⾸部長度)-20(TCP首部長度),通信的兩端都通告⾃己能接收的最⼤大MSS,TCP協 議會選擇兩邊較小的MSS作為這條連接的MSS,TCP協議設計的這種機制可以避免鏈路發生分片;

DNS限制⻓度是512字節,那麼為什麼是512呢?查閱相關資料料得知,IP協議實現規定,要求主機最少能 夠收發576個字節的數據報。UDP的應用程序的限制⽐這個⻓度要小,⼤多應用限制在512字節。

2、DNS之UDP和TCP傳輸

DNS協議有UDP,TCP兩種,通常wireshark抓包看到的DNS請求通常都是UDP協議的,例如以下包:

DNS為什麼查詢根域名服務器只返回13個IP地址

看⼀一下DNS 響應包中的字段:

DNS為什麼查詢根域名服務器只返回13個IP地址

其中,Truncated:字段代表響應是否被截斷,當時Truncated:被置為1時,就意味著響應超過了了512字節,當前響應只返回了前512字節,這時DNS server會使⽤用TCP重發原來的請求,這樣顯然增加了了域 名解析時間。

當查詢根域的NS記錄時,為了了在⼀一個報⽂文中傳完響應,512字節只夠返回包含13個根域名服務器器的NS記錄和A記錄;所以雖然從⽹絡覆蓋角度考慮根域名服務器器的地址越多越好,實際上一次查詢根域名服 務器器只返回到13個IP地址。

查看更多


分享到:


相關文章: