日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EDNS

發布時間:2024/2/28 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EDNS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著業務的復雜化和多樣化,RFC1035中定義的DNS消息格式和它支持的消息內容已經不足以滿足一些DNS服務器的需求,于是,RFC2671 中提出了一種擴展DNS機制EDNS(Extension Mechanisms for DNS),并在其中推薦了一種傳遞包大小的EDNS0。我將EDNS0中的一些關鍵內容總結在這篇文章中,以便日后翻閱,同時希望能夠幫助到像我這樣迷茫 過的、探尋EDNS很久才知道其概貌的新人。

? ? 一,什么是EDNS?

? ? ?EDNS就是在遵循已有的DNS消息格式的基礎上增加一些字段,來支持更多的DNS請求業務。

? ? ?需要注意的是,像DNS服務器這樣一個大型且廣泛應用的系統軟件,新增加擴展協議的時候一定要考慮到向后兼容性(backward compatibility),即你增加了你這個特性的消息傳輸給未支持該特性的服務器時,后者依然能正確處理。

? ? 二,為什么要有EDNS?

? ? ??RFC2671中指出EDNS被提出來的幾個理由:

? ? ? ? ?1)DNS協議頭部的第二個16字節中都已經被用的差不多了,需要添加新的返回類型(RCODE)和標記(FLAGS)來支持其他需求;

? ? ? ? ?2)只為標示domain類型的標簽分配了兩位,現在已經用掉了兩位(00標示字符串類型,11表示壓縮類型),后面如果有更多的標簽類型則無法支持;

? ? ? ? ?3)當初DNS協議中設計的用UDP包傳輸時包大小限制為512字節,現在很多主機已經具備重組大數據包的能力,所以要有一種機制來允許DNS請求方通知DNS服務器讓其返回大包;

? ? ? ? 以后我們會看到,DNSSEC機制和edns-client-subnet機制等都需要有EDNS的支持。

? ? ?三,EDNS的內容是什么?

? ? ? ??怎樣在DNS消息協議的基礎上再增加一些字段呢?為了保持向后兼容性,更改已有的DNS協議格式是不可能的,所以只能在DNS協議的數據部分中做文章。

? ? ? ? 所以,EDNS中引入了一種新的偽資源記錄OPT(Resource Record),之所以叫做偽資源記錄是因為它不包含任何DNS數據,OPT RR不能被cache、不能被轉發、不能被存儲在zone文件中。OPT被放在DNS通信雙方(requestor和responsor)DNS消息的Additional data區域中。

? ? ? ? 1,OPT偽資源記錄中的內容有哪些呢?

? ? ? ? ? OPT pseudo-RR中的內容包含固定部分和可變部分。它的結構如下:

? ? ? ? ? ? ? ? 圖1 OPT內容

?

? ? 圖1中最下面的RDATA是可變部分,其余的部分都是固定部分:Name字段目前為空;TYPE字段是OPT RR的類型編號,IANA為其分配的是41(0x29);TTL中是擴展的DNS消息頭部,下面會有介紹;RDLEN是可變部分RDATA的長 度;RDATA是KV類型的可變部分。

? ? ?原來的TTL字段被用來存儲擴展消息頭部中的RCODE和flags,它的格式如下:

? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2?extended RCODE and flags Detail

? ? ?圖2中高位8個bit是擴展RCODE(返回狀態碼),這8個bit加上DNS頭部的4bit總共有12bit(8bit在高位),這樣就可以表示更多的返回類型;

? ? ? VERSOION字段表示EDNS的版本(EDNS根據支持不同的擴展內容會有很多版本),這篇文章提到的內容的VERSION=0

? ? ? RFC2671中Z一般情況下被發送者設置為0,接收方可以忽略它。但是后續的擴展協議中會用到這16bit。

?

? ? ? ?OPT RR中可變部分RDATA的結構如下圖所示:

圖3 RDATA格式

? ? 圖3中OPTION-CODE由IANA分配;OPTION-LENGTH是OPTION-DATA的長度;OPTION-DATA是具體長度。

? ? ? 上面三個圖之間的關系用下圖看或許會清晰一點:

   需要注意的是,每個DNS 消息中只能有一個OPT偽資源記錄,當有多中EDNS擴展協議時,各個{attribute, value}對一個緊接一個存儲在RDATA中。如下圖所示

? ?

可以看到當有NSID和CSUBNET的時候,兩個RDATA緊密排列在OPT的RDATA字段中,它們兩的總長度由Data length指定。

? ? ? ? 2,example

? ? ? ?好苦澀的理論啊,我們拿一個實例看看EDNS0的格式吧!

? ? ? ?我在自己的機器上用bind-9.8.1-p1中的dig請求Google首頁,并把包大小參數設置為768:

? ? ? ? ? ? ? ? ? ? ? ? ./dig www.google.com.hk +bufsize=768

? ? ? ?用tcpdump抓包,然后用ethereal查看UDP包的內容,下圖是請求包的詳細內容:

圖4 request message

? ?圖4中藍色的是請求消息中的Additional data中的所有內容,我們可以看到有一個OPT RR,需要注意的是:

? ? ? 1)TTL字段中的extended RCODE、VERSION和Z被ethereal拆分來顯示了;

? ? ? 2)RDATA length為0說明沒有可變消息RDATA,從下面的消息中可以看到確實沒有RDATA(...)

?

?下圖是響應消息:

圖5 response message

圖5中可以看出,Additional data中除了四個google權威域名服務器詳細信息外還有OPT RR,響應消息包的大小為4096字節。

? ? ? 3,Others

? ? ? RFC2671中還包含了很多EDNS0實現時請求方和響應方注意的事項,以及EDNS0帶來的問題,對它們感興趣的可以移步這里。

? ? ?四,參考文獻

? ? ? 1,RFC2671

? ? ? 2,維基百科 ?http://en.wikipedia.org/wiki/EDNS

總結

以上是生活随笔為你收集整理的EDNS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。