在 libcurl 中禁用 AAAA 查找

在 libcurl 中禁用 AAAA 查找

我们在大型 map Reduce 中有一个步骤,用于执行 DNS 解析。应用程序本身使用 c-ares 库以及 libcurl。

我注意到,每次解析时,首先都会尝试 AAAA,然后立即尝试 A 解析。使用 TCPdump 可以清楚地看到这一点,无论是在我们指定的服务器还是在主机上。

以下是 S3 流量的示例

$ tcpdump dst port 53
20:28:35.259552 IP x.x.x.x.55271 > ec2-xx.amazonaws.com.domain: 21815+ AAAA? s3.amazonaws.com. (34)
20:28:35.261526 IP x.x.x.x.56058 > ec2-xx.amazonaws.com.domain: 21823+ A? s3.amazonaws.com. (34)

每次决议都会重复这一过程。由于我们在此过程中要进行超过 7000 万次决议,因此将其中 50% 的浪费削减掉是合理的。

如何在 Ubuntu 中禁用 IPv6 查找?

我尝试将 /etc/gai.conf 中的优先级更改为:

precedence ::ffff:0:0/96 45

但我仍然看到 ubuntu 首次尝试 IPv6 解析。如能得到任何帮助,我将不胜感激

编辑:

我的 /etc/resolv.conf 很简单,只设置了一个名称服务器:

cat /etc/resolv.conf 
nameserver x.x.x.x

答案1

您知道,IPv6(而不是 IPv4)是 IP 的前瞻性版本...IPv6 很遗憾看到您离开 :-( 但您可以禁用它。

如果您正在使用 libcURL,那么您需要做的就是:

curl_easy_setopt(easy_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

但是,您是否担心这些额外的 AAAA 请求所花费的时间或额外的网络流量?我希望 A 和 AAAA 可以并行完成,这样您就不必担心延迟。

相关内容