在一台CentOS 7.0
服务器(内核版本号:3.10.0-123.el7.x86_64
)上安装我们的安全防护程序后,会出现curl
访问网址超时5秒的情况。现象如下:
1 | [root@localhost ~]# time curl -s www.baidu.com -o /dev/null |
通过strace
分析程序调用的过程:
1 | strace -f -tt -o curl.strace curl -s www.baidu.com -o /dev/null |
从strace
输出可以看到, 第一次curl
调用sendmmsg
同时发送了两个DNS
数据包,分别是A
记录和AAAA
记录请求,但是只收到了A
记录响应包:

然后等待5秒超时后,依次调用sendto
和recvfrom
串行处理两个DNS
请求, 这次两个DNS
响应全部收到后,继续向下执行:

而从抓包结果分析,tcpdump
只能看到第一次同时发送的两个DNS
请求中的A
记录请求,AAAA
记录请求数据包被内核协议栈丢弃了:
1 | 17:04:24.772049 IP 10.10.10.89.57416 > 114.114.114.114.53: 37081+ A? www.baidu.com. (31) |