一次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服務為了了避免分⽚片,都會對應⽤用做⼀個包長度的限制;
先來直觀的看⼀一下TCP協議傳輸⻓長度的協商機制:
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 響應包中的字段:
其中,Truncated:字段代表響應是否被截斷,當時Truncated:被置為1時,就意味着響應超過了了512字節,當前響應隻返回了前512字節,這時DNS server會使⽤用TCP重發原來的請求,這樣顯然增加了了域 名解析時間。
當查詢根域的NS記錄時,為了了在⼀一個報⽂文中傳完響應,512字節隻夠返回包含13個根域名服務器器的NS記錄和A記錄;所以雖然從⽹絡覆蓋角度考慮根域名服務器器的地址越多越好,實際上一次查詢根域名服 務器器隻返回到13個IP地址。
查看更多
Nginx 常用指令說明
nginx的port_in_redirect配置
nginx 11 個處理階段
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!