鍍金池/ 問答/Linux/ 關(guān)于wget和curl請求過程中-DNS域名解析問題

關(guān)于wget和curl請求過程中-DNS域名解析問題

由于工作原因,我使用strace命令追蹤了curl和wget請求的整個過程,其中關(guān)于DNS域名解析的部分,得出了如下結(jié)論。其中有些不太理解,而源碼又看不懂(運維一枚),請給予協(xié)助,感謝!

假設(shè)一共域名:test.domain.com的域名,DNS配置了2個A記錄
測試命令:
strace curl -v test.domain.com
strace wget test.domain.com

我的結(jié)論:
(1)curl是通過libcurl跨平臺庫去實現(xiàn)的,暫且搞不懂curl是通過何種方式或規(guī)律由域名轉(zhuǎn)為IP地址的,不過多次使用curl去請求,從strace的結(jié)果中來看,它并沒有去輪詢請求兩個A記錄的IP地址。

(2)相對于curl來說,一次wget請求,它把很多時間都用在了域名解析上,在查找hosts文件無果的情況下,通過類似dig的方式解析獲取所有ip地址并去選擇其一去請求數(shù)據(jù),多次測試,結(jié)果:它可以輪詢使用DNS解析出的(2個A記錄IP)去請求資源。

我的問題:
我想更進(jìn)一步了解curl和wget(尤其是curl)關(guān)于DNS域名解析部分的原理

回答
編輯回答
青檸

curl會用一個子線程去做DNS查詢,所以要用strace -f才能看到。

大概看了一下curl的代碼,DNS解析有多種實現(xiàn),我用的版本是用線程實現(xiàn)的異步DNS,但最終執(zhí)行解析的都是curl_addrinfo.cCurl_getaddrinfo_ex函數(shù),里面會調(diào)用getaddrinfo獲得IP列表。

2017年7月15日 15:26