linux dns解析超時5秒問題


參考:centos 6中single-request-reopen參數說明 http://coolnull.com/3820.html

說明:
在RHLE6/CENTOS6的環境里,需要在/etc/resolv.conf添加以下參數options single-request-reopen。具體原因請看下面。

具體:
一. 在RHEL5/CentOS5/Ubuntu 10.04等linux下,dns的解析請求過程如下

1 主機從一個隨機的源端口,請求 DNS的AAAA 記錄,
2 主機接受dns服務器返回AAAA記錄,
3 主機從一個另一個隨機的源端口,請求 DNS的A 記錄,
4 主機dns 服務器返回A記錄,

二. 如果是RHEL6/CentOS6,交互過程有所不同,如圖:

1 主機從一個隨機的源端口,請求 DNS的A 記錄,
2 主機從同一個源端口,請求 DNS的AAAA 記錄,
3 主機接受dns服務器返回A記錄,
4 主機接受 dns服務器返回AAAA記錄,

三. 上面3,4並沒有嚴格的先后順序,實際的順序受網絡環境,服務器環境的影響
理論上講centos6的這種工作機制,效率更高,端口復用度更高,能節省更多的資源。
但是這里也同樣存在着一個問題。比如在存在防火牆等機制的網絡環境中,同樣源目的ip,同樣源目的port,同樣的第4層協議的連接會被防火牆看成是同一個會話,因此會存在返回包被丟棄現象。如下圖。

此時的整個dns解析過程如下:
1 主機從一個隨機的源端口,請求 DNS的A 記錄,
2 主機從同一個源端口,請求 DNS的AAAA 記錄,
3 主機先收到dns返回的AAAA記錄,
4 防火牆認為本次交互通信已經完成,關閉連接,
5 於是剩下的dns服務器返回的A記錄響應包被防火牆丟棄
6 等待5秒超時之后,主機因為收不到A記錄的響應,重新通過新的端口發起A記錄查詢請求,此后的機制等同於centos5)
7 主機收到dns的A記錄響應;
8 主機從另一個新的源端口發起AAAA
9 主機收到dns的AAAA記錄響應;
我們看到在這個解析的序列里面,dns解析有5秒的延遲發生。所以當用linux系統安裝大量遠程包的時候宏觀上看延遲就非常大了(linux是不緩存dns解析記錄的)。

總結:
那么到底options single-request-reopen這個參數的作用是什么的,man 5 resolv.conf的結果如下

#man 5 resolv.conf
              single-request-reopen (since glibc 2.9)The resolver uses the same socket for the A and AAAA requests.Some hardware mistakenly only sends
                     back  one reply.When that happens the client sytem will sit and wait for the second reply.Turn-
                     ing this option on changes this behavior so that if two requests from the same port are not handled
                     correctly it will close the  socket and open a new one before sending the second request.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM