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's avatar速盾高防cdn
上一篇 2024年5月23日 下午1:42
下一篇 2024年5月23日 下午1:46

相关推荐

  • 6种负载均衡算法

    当今的分布式系统越来越普遍,由于它们能够提供更高的灵活性和可扩展性。但是,这些系统需要处理大量的客户端请求。为了处理这些请求并提供对每个客户端的稳定和高效的服务,需要使用负载均衡算…

    CDN资讯 2024年4月6日
    0
  • 消息通知系统的架构设计

    目标: 设计企业级系统架构,支持使用API集成的电子邮件、短信、聊天和其他公共社交应用程序: ?电子邮件?短信/一次性密码?推送通知(移动设备和Web浏览器)?聊天 –…

    CDN资讯 2024年4月18日
    0
  • DNS负载均衡原理

    1. DNS负载均衡原理 以访问网站为例,当用户尝试访问一个网站时,他们的设备会向DNS服务器发送一个请求,将域名解析到对应的IP地址。如果配置了DNS负载均衡,DNS服务器会返回…

    2024年3月24日
    0
  • CDN龙头上市公司

    CDN龙头上市公司 首段:本文将深入探讨CDN(内容分发网络)领域的龙头上市公司,重点介绍其产品”速盾CDN”在解决网络内容分发中所面临的挑战和问题。 在当…

    2024年5月11日
    0

发表回复

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