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

2021-11-26 22:15:42 +08:00
 zhoudaiyu

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

863 次点击
所在节点    问与答
3 条回复
wd
2021-11-27 06:50:49 +08:00
dns udp 结果如果太大需要分包的话,会告诉客户端。客户端需要用 tcp 查完整结果。
ericwood067
2021-11-27 09:38:02 +08:00
在 /etc/hosts 里加上
>127.0.0.1 本机机器名
试试,一楼说的没错正常情况下是分包了才会走 tcp ,你这种情况下不应该走 tcp 的,估计是程序里写了什么奇怪的逻辑,你拿不到代码只能试试这种方法解毒了。
zhoudaiyu
2021-11-27 09:53:15 +08:00
@wd 哇,太感谢了,SO 也看到了类似的答案,不过我得周一去看看抓包结果
@ericwood067 的确,我也怀疑是什么恶心的 bug ,实在不行反编译吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818262

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX