V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhoudaiyu
V2EX  ›  问与答

有个 DNS 的问题一直想不通,大佬们帮帮孩子吧

  •  
  •   zhoudaiyu · 2021-11-26 22:15:42 +08:00 via iPhone · 928 次点击
    这是一个创建于 1097 天前的主题,其中的信息可能已经有所发展或是发生改变。

           有个应用有点问题(闭源),看报错可能和 DNS 有关,由于没法看代码,因此对物理网卡 53 的端口通信进行抓包,应用近一两周运行正常,抓包结果虽然有点离谱,但是由于应用正常运行,而且查询结果也没啥问题,就没管。
           直到今天下午,又出问题了,然后我马上分析了抓包结果,看到了一个 DNS 请求走了 TCP ,之前应用正常时,每次查询都是查本机的机器名的 A 记录和 AAAA 记录,正常的查询都走的 UDP ,然后当然响应查不到,这次和之前的区别是走了 TCP ,查询的记录是一样的。我们配的是阿里的公共 DNS ,是支持 TCP 查询 DNS 的,这次当然这次 DNS 也回复了查不到的响应,然后应用回了 DNS 响应一个 ACK 包后,就像卡死了一样,一直不挥手,这时候应用就卡死了。然后过了几分钟挥手后,估计是服务端已经断了连接了,发挥手拿不到 ACK ,一直重传了几次,连接就断了。
           请大佬们给点思路吧!

    3 条回复    2021-11-27 09:53:15 +08:00
    wd
        1
    wd  
       2021-11-27 06:50:49 +08:00 via iPhone   ❤️ 1
    dns udp 结果如果太大需要分包的话,会告诉客户端。客户端需要用 tcp 查完整结果。
    ericwood067
        2
    ericwood067  
       2021-11-27 09:38:02 +08:00   ❤️ 1
    在 /etc/hosts 里加上
    >127.0.0.1 本机机器名
    试试,一楼说的没错正常情况下是分包了才会走 tcp ,你这种情况下不应该走 tcp 的,估计是程序里写了什么奇怪的逻辑,你拿不到代码只能试试这种方法解毒了。
    zhoudaiyu
        3
    zhoudaiyu  
    OP
       2021-11-27 09:53:15 +08:00 via iPhone
    @wd 哇,太感谢了,SO 也看到了类似的答案,不过我得周一去看看抓包结果
    @ericwood067 的确,我也怀疑是什么恶心的 bug ,实在不行反编译吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5614 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 06:44 · PVG 14:44 · LAX 22:44 · JFK 01:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.