有个应用有点问题(闭源),看报错可能和 DNS 有关,由于没法看代码,因此对物理网卡 53 的端口通信进行抓包,应用近一两周运行正常,抓包结果虽然有点离谱,但是由于应用正常运行,而且查询结果也没啥问题,就没管。
直到今天下午,又出问题了,然后我马上分析了抓包结果,看到了一个 DNS 请求走了 TCP ,之前应用正常时,每次查询都是查本机的机器名的 A 记录和 AAAA 记录,正常的查询都走的 UDP ,然后当然响应查不到,这次和之前的区别是走了 TCP ,查询的记录是一样的。我们配的是阿里的公共 DNS ,是支持 TCP 查询 DNS 的,这次当然这次 DNS 也回复了查不到的响应,然后应用回了 DNS 响应一个 ACK 包后,就像卡死了一样,一直不挥手,这时候应用就卡死了。然后过了几分钟挥手后,估计是服务端已经断了连接了,发挥手拿不到 ACK ,一直重传了几次,连接就断了。
请大佬们给点思路吧!
1
wd 2021-11-27 06:50:49 +08:00 via iPhone 1
dns udp 结果如果太大需要分包的话,会告诉客户端。客户端需要用 tcp 查完整结果。
|
2
ericwood067 2021-11-27 09:38:02 +08:00 1
在 /etc/hosts 里加上
>127.0.0.1 本机机器名 试试,一楼说的没错正常情况下是分包了才会走 tcp ,你这种情况下不应该走 tcp 的,估计是程序里写了什么奇怪的逻辑,你拿不到代码只能试试这种方法解毒了。 |
3
zhoudaiyu OP |