zoukankan      html  css  js  c++  java
  • DNS解析超时排查/etc/resolv.conf single-request-reopen参数说明

    添加

    options rotate timeout:1 attempts:3 single-request-reopen

    添加到/etc/resolv.conf 中

    #释义: 循环查询 超时时间 重试次数 只收到一个IPV4应答或者只收到一个IPV6应答,重新开一个socket查询

     

    single-request-reopen参数说明

     basic  shang  3年前 (2015-05-29)  3918浏览  0评论

    说明:
    在RHLE6/CENTOS6的环境里,需要在/etc/resolv.conf添加以下参数options single-request-reopen。具体原因请看下面。

    具体:
    一. 在RHEL5/CentOS5/Ubuntu 10.04等linux下,dns的解析请求过程如下
    v1
    1 主机从一个随机的源端口,请求 DNS的AAAA 记录,
    2 主机接受dns服务器返回AAAA记录,
    3 主机从一个另一个随机的源端口,请求 DNS的A 记录,
    4 主机dns 服务器返回A记录,

    二. 如果是RHEL6/CentOS6,交互过程有所不同,如图:
    v2
    1 主机从一个随机的源端口,请求 DNS的A 记录,
    2 主机从同一个源端口,请求 DNS的AAAA 记录,
    3 主机接受dns服务器返回A记录,
    4 主机接受 dns服务器返回AAAA记录,

    三. 上面3,4并没有严格的先后顺序,实际的顺序受网络环境,服务器环境的影响
    理论上讲centos6的这种工作机制,效率更高,端口复用度更高,能节省更多的资源。
    但是这里也同样存在着一个问题。比如在存在防火墙等机制的网络环境中,同样源目的ip,同样源目的port,同样的第4层协议的连接会被防火墙看成是同一个会话,因此会存在返回包被丢弃现象。如下图。
    v3
    此时的整个dns解析过程如下:
    1 主机从一个随机的源端口,请求 DNS的A 记录,
    2 主机从同一个源端口,请求 DNS的AAAA 记录,
    3 主机先收到dns返回的AAAA记录,
    4 防火墙认为本次交互通信已经完成,关闭连接,
    5 于是剩下的dns服务器返回的A记录响应包被防火墙丢弃
    6 等待5秒超时之后,主机因为收不到A记录的响应,重新通过新的端口发起A记录查询请求,此后的机制等同于centos5)
    7 主机收到dns的A记录响应;
    8 主机从另一个新的源端口发起AAAA
    9 主机收到dns的AAAA记录响应;
    我们看到在这个解析的序列里面,dns解析有5秒的延迟发生。所以当用linux系统安装大量远程包的时候宏观上看延迟就非常大了(linux是不缓存dns解析记录的)。

    总结:
    那么到底options single-request-reopen这个参数的作用是什么的,man 5 resolv.conf的结果如下

    #man 5 resolv.conf
                  single-request-reopen (since glibc 2.9)
                         The resolver uses the same socket for the A and AAAA requests.  Some hardware mistakenly only sends
                         back  one reply.  When that happens the client sytem will sit and wait for the second reply.  Turn-
                         ing this option on changes this behavior so that if two requests from the same port are not handled
                         correctly it will close the  socket and open a new one before sending the second request.

    转载请注明:酷喃|coolnull| » centos 6中single-request-reopen参数说明

  • 相关阅读:
    基于python创建一个简单的HTTP-WEB服务器
    基于python自动化测试平台与虚拟化技术结合的思考
    Net分布式系统之六:微服务之API网关
    Net分布式系统之五:C#使用Redis集群缓存
    Net分布式系统之二:CentOS系统搭建Nginx负载均衡
    Net分布式系统之一:系统整体框架介绍
    .Net微服务架构之运行日志分析系统
    Net分布式系统之七:日志采集系统(1)
    程序员如何选择未来的职业路线
    NET技术公众号已上线
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/9725746.html
Copyright © 2011-2022 走看看