curl和nslookup之间的名称查找区别是什么

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (63)

当我试图找出DNS查询何时超时时,我迷路了。试过多个场景(在Linux上):

  1. /etc/resolv.conf中未配置名称服务器 ###################### curl ####################### WRITE_OUT="%{http_code}\t%{time_namelookup}\t%{time_connect}\t\t%{time_starttransfer}\t\t%{time_total}\n" time curl -k -w "$WRITE_OUT" https://www.google.com/ 000 0.000 0.000 0.000 0.000 curl: (6) Could not resolve host: www.goole.com; Unknown error real 0m0.009s user 0m0.000s sys 0m0.006s ##################### nslookup #################### time nslookup www.google.com ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached real 0m24.012s user 0m0.004s sys 0m0.009s 我们可以看到,curl立即返回(9ms),而nslookup需要更长的时间(24s)。这让我很困惑,curl的行为更有意义,因为主机上没有指定名称服务器。
  2. 在/etc/resolv.conf中添加无法访问的主机IP,无法ping通模拟名称服务器关闭方案 ###################### curl ####################### time curl -k -w "$WRITE_OUT" https://www.google.com/ 000 0.000 0.000 0.000 19.529 curl: (6) Could not resolve host: www.goole.com; Unknown error real 0m20.535s user 0m0.003s sys 0m0.005s ##################### nslookup #################### time nslookup www.google.com ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached real 0m20.008s user 0m0.006s sys 0m0.003s 欢呼!在同一页面上看起来像curl和nslookup。
  3. 添加可以ping通但不使用DNS服务的主机IP地址,以模拟服务器处于活动状态,但名称服务器服务已关闭 ###################### curl ####################### time curl -k -w "$WRITE_OUT" https://www.google.com/ 000 0.000 0.000 0.000 4.513 curl: (6) Could not resolve host: www.goole.com; Unknown error real 0m5.520s user 0m0.004s sys 0m0.005s ##################### nslookup #################### time nslookup www.google.com ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached real 0m20.010s user 0m0.006s sys 0m0.005s 再次困惑!

最令人困惑的部分是,从resolv.conf的Manual页面,我们可以认为默认值timeout是5秒,attempts是2倍。所以我想超时应该是5秒* 2 = 10秒。但是......别扭......

编辑:再次尝试修改/etc/nsswitch.conf,仅使用dns方法。hosts: dns

场景1:

###################### curl #######################
time curl -k -w "$WRITE_OUT" https://www.google.com/
000     0.000   0.000           0.000           0.000
curl: (6) Could not resolve host: www.google.com; Unknown error

real    0m0.051s
user    0m0.004s
sys     0m0.002s
##################### nslookup ####################
time nslookup www.google.com
;; connection timed out; trying next origin
;; connection timed out; no servers could be reached

real    0m24.287s
user    0m0.005s
sys     0m0.014s
######################## dig ######################
time dig www.google.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7 <<>> www.google.com
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m18.041s
user    0m0.005s
sys     0m0.005s

场景2:

time curl -k -w "$WRITE_OUT" https://www.google.com/
000     0.000   0.000           0.000           19.527
curl: (6) Could not resolve host: www.google.com; Unknown error

real    0m20.533s
user    0m0.003s
sys     0m0.004s

time nslookup www.google.com
;; connection timed out; trying next origin
;; connection timed out; no servers could be reached

real    0m20.009s
user    0m0.005s
sys     0m0.005s

time dig www.google.com
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7 <<>> www.google.com
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m15.008s
user    0m0.005s
sys     0m0.003s

场景3:

time curl -k -w "$WRITE_OUT" https://www.google.com/
000     0.000   0.000           0.000           4.512
curl: (6) Could not resolve host: www.google.com; Unknown error

real    0m5.518s
user    0m0.004s
sys     0m0.003s

time nslookup www.google.com
;; connection timed out; trying next origin
;; connection timed out; no servers could be reached

real    0m20.009s
user    0m0.005s
sys     0m0.005s

time dig www.google.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7 <<>> www.google.com
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m15.009s
user    0m0.005s
sys     0m0.005s

dig 有自己的超时机制,超时(5s)*重试(3)= 15s。

提问于
用户回答回答于

虽然这是一篇很老的帖子,但我觉得自己好像因为它不止一次出现在我面前,所以我想分享一下。

需要指出的一个区别是应用程序(即nslookup或curl)用于DNS查找,即libresolv.solibbind.so。看起来像nslookup专门做后者,所以也许这就是为什么它比卷曲更快地超时。要在您的系统上查看,您应该运行

strace -o curl.out curl www.google.com
strace -o dig.out dig www.google.com

grep libresolv *.out
grep libbind *.out

并比较。

虽然神秘,但strace输出应该显示每个部分等待的时间以及底层系统调用正在进行的工作

热门问答

直播间IM消息可以下载到自己服务器备份吗?

人生的旅途辣鸡前端
推荐
目前仅私有群(Private)、公开群(Public)和聊天室(ChatRoom)具备消息漫游能力(默认7天)。核实下您那边的群组类型看是否支持https://cloud.tencent.com/document/product/269/1502#.E6.B6.88.E6.81....... 展开详请

腾讯云容器加速地址是错的?

推荐已采纳

我刚才测试了一下,这个加速器地址可以用额,你这边是怎么测试出是关闭状态的啊?

加速器地址是不能直接用浏览器访问的,阿里云提供的直接访问也是空

webIM添加组员报错?

无聊至极互联网重度用户
推荐已采纳

付费超过组数限制,核实下是否超过限制

https://cloud.tencent.com/document/product/269/11673#.E5.8A.9F.E8.83.BD.E5.AF.B9.E6.AF.94

Tencent iot-sdk-embedded-c在Windows下编译出错:无法解析外部符号?

无聊至极互联网重度用户
推荐已采纳

腾讯云IM调用 add_group_member提示该群不能邀请成员?

推荐已采纳
是什么类型的群?根据相应类型的邀请他人入群的控制项,对照文档看下是否允许邀请他人入群。 参考文档:https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E6.88.90.E5.91.98.E6.93.8D.E4...... 展开详请

智能钛机器学习平台的模型怎么从外部调用?

腾讯智能钛AI开发者

腾讯云 · 智能钛产品团队 (已认证)

腾讯智能钛产品团队官方运营账号。分享产品最新动态,第一时间解答用户疑问。
推荐

所属标签

扫码关注云+社区

领取腾讯云代金券