linux 为什么dns域名解析器最多生效3个?/etc/resolv.conf nameserver

概述

经过测试发现/etc/resolv.conf可以配置很多个dns server但是最多生效3个。

dns解析器配置内容

文件路径/etc/resolv.conf,文件内容如下:

# Generated by NetworkManager
nameserver 192.168.100.24
nameserver 192.168.100.25
nameserver 114.114.114.114
nameserver 114.114.114.114

修改保存即生效,无需做其他操作。经过测试发现最多生效3个。感到好奇,一顿搜索后,找到一些蛛丝马迹。

蛛丝马迹

控制程序

控制程序为glibc中的glibc/resolv/resolv.conf.c,核心代码段 if (nserv > MAXNS) nserv = MAXNS;

 {
    size_t nserv = conf->nameserver_list_size;
    if (nserv > MAXNS)
      nserv = MAXNS;
    /* _ext.nscount is 0 until initialized by res_send.c.  */
    if (resp->nscount != nserv
        || (resp->_u._ext.nscount != 0 && resp->_u._ext.nscount != nserv))
      return false;
    for (size_t i = 0; i < nserv; ++i)
      {
        if (resp->nsaddr_list[i].sin_family == 0)
          {
            if (resp->_u._ext.nsaddrs[i]->sin6_family != AF_INET6)
              return false;
            if (!same_address ((struct sockaddr *) resp->_u._ext.nsaddrs[i],
                               conf->nameserver_list[i]))
              return false;
          }
        else if (resp->nsaddr_list[i].sin_family != AF_INET)
          return false;
        else if (!same_address ((struct sockaddr *) &resp->nsaddr_list[i],
                                conf->nameserver_list[i]))
          return false;
      }
  }

MAXNS

最大值是写死在[resolv.h](https://git.musl-libc.org/cgit/musl/tree/include/resolv.h?h=v1.2.2&id=85e0e3519655220688e757b9d5bfd314923548bd)中,最大值为3.

#define MAXNS   3

官方man 手册对MAXNS有详细说明。

nameserver Name server IP address
            Internet address of a name server that the resolver should
             query, either an IPv4 address (in dot notation), or an
             IPv6 address in colon (and possibly dot) notation as per
              RFC 2373.  Up to MAXNS (currently 3, see <resolv.h>) name
              servers may be listed, one per keyword.  If there are
              multiple servers, the resolver library queries them in the
              order listed.  If no nameserver entries are present, the
              default is to use the name server on the local machine.
              (The algorithm used is to try a name server, and if the
              query times out, try the next, until out of name servers,
              then repeat trying all the name servers until a maximum
              number of retries are made.)

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/76721.html

(0)
速盾高防cdn的头像速盾高防cdn
上一篇 2024年5月23日
下一篇 2024年5月23日

相关推荐

  • 点播CDN回源标准化策略

      背景: 历史上公司点播CDN接入的厂商就比较多 厂商之间回源的方式存在细节上的差异 不同的厂商之间专线大小存在差异 厂商之间的定位不同,有全镜像存储厂商,作为源站资源…

    2024年7月9日
    0
  • 在微服务架构中的数据一致性

    当从传统的单体应用架构转移到微服务架构时,特别是涉及数据一致性时,数据一致性是微服务架构中最困难的部分。传统的单体应用中,一个共享的关系型数据库负责处理数据一致性。在微服务架构中,…

    2024年4月19日
    0
  • cdn是什么货币,cdn是什么货币

    CDN是什么货币? 在当今数字化时代,我们所处的网络环境中,CDN(内容分发网络)扮演着至关重要的角色。对于许多人来说,CDN这个术语可能像是一种“货币”,充满了神秘和不可思议。C…

    2024年5月11日
    0
  • Java版本和功能指南

    点击上方“蓝字”关注我们 您可以使用本指南查找和安装最新的Java,了解Java发行版(AdoptOpenJdk,OpenJDK,OracleJDK等)之间的差异,以及获得Java…

    CDN资讯 2024年4月13日
    0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注