关于wget和curl请求过程中-DNS域名解析问题

由于工作原因,我使用strace命令追踪了curl和wget请求的整个过程,其中关于DNS域名解析的部分,得出了如下结论。其中有些不太理解,而源码又看不懂(运维一枚),请给予协助,感谢!

假设一共域名:test.domain.com的域名,DNS配置了2个A记录
测试命令:
strace curl -v test.domain.com
strace wget test.domain.com

我的结论:
(1)curl是通过libcurl跨平台库去实现的,暂且搞不懂curl是通过何种方式或规律由域名转为IP地址的,不过多次使用curl去请求,从strace的结果中来看,它并没有去轮询请求两个A记录的IP地址。

(2)相对于curl来说,一次wget请求,它把很多时间都用在了域名解析上,在查找hosts文件无果的情况下,通过类似dig的方式解析获取所有ip地址并去选择其一去请求数据,多次测试,结果:它可以轮询使用DNS解析出的(2个A记录IP)去请求资源。

我的问题:
我想更进一步了解curl和wget(尤其是curl)关于DNS域名解析部分的原理

阅读 13.2k
1 个回答

curl会用一个子线程去做DNS查询,所以要用strace -f才能看到。

大概看了一下curl的代码,DNS解析有多种实现,我用的版本是用线程实现的异步DNS,但最终执行解析的都是curl_addrinfo.cCurl_getaddrinfo_ex函数,里面会调用getaddrinfo获得IP列表。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏