关于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域名解析部分的原理
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
curl会用一个子线程去做DNS查询,所以要用
strace -f
才能看到。大概看了一下curl的代码,DNS解析有多种实现,我用的版本是用线程实现的异步DNS,但最终执行解析的都是
curl_addrinfo.c
的Curl_getaddrinfo_ex
函数,里面会调用getaddrinfo获得IP列表。