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

相关推荐

  • 什么是KMP?

    部分匹配表 当然,KMP 的关键是部分匹配表。我和理解 KMP 之间的主要障碍是我没有完全理解部分匹配表中的值的真正含义。我现在将尝试用最简单的词来解释它们。 这是模式“ababa…

    CDN资讯 2024年4月15日
    0
  • 怎么解决香港主机访问速度慢的问题

    香港作为一个国际金融中心和互联网节点,拥有强大的网络基础设施和高速互联网连接。然而,由于网络拥堵、服务器负载过大、网络干扰等原因,有时候香港主机的访问速度可能会变慢。本文将介绍一些…

    2024年4月30日
    0
  • cdn是什么意思,cdn是什么意思

    当今互联网世界中,CDN是一个备受瞩目的名词,但很多人仍然对它的含义感到困惑。CDN究竟是什么意思呢?让我们一起来揭开这个神秘的面纱。 CDN,即内容分发网络,是一种用于提高网站性…

    2024年5月11日
    0
  • CDN如何为企业保驾护航

    CDN(内容分发网络)对企业来说可以提供多种保驾护航的服务和功能,以下是其中一些关键点: 综上所述,CDN 可以为企业提供网站性能优化、全球覆盖和可用性保障、安全防护、节省带宽成本…

    CDN资讯 2024年2月24日
    0

发表回复

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