作者介绍:一位在简历上没有标注精通的运维工程师。请点击上方的蓝色《运维小路》关注我,以下思维导图展示了预计更新的内容和当前进度(不定时更新)。
Linux进阶部分包含多个小节,我们刚刚讲解了Linux日常运维。这些内容都是系统自带的,但作为服务器操作系统,Linux需要安装运行软件来满足业务需求。本章将从以下几个部分详细讲解基础软件:
Linux基础软件-软件安装
Linux基础软件-yum(一)
Linux基础软件-yum(二)
Linux基础软件-ntp
Linux基础软件-chrony
Linux基础软件-dns(一)(本节)
Linux基础软件-dns(二)
Linux基础软件-nfs
Linux基础软件-lvm
Linux基础软件-Selinux&库文件&swap
在讲解Linux运维-主机名&hosts时,我们提到可以通过hosts文件跳过dns解析。那么,什么是dns,为什么需要dns呢?本小节将详细讲解dns相关内容。
什么是dns?
DNS,全称为“Domain Name System”或“域名系统”,是一种互联网服务。它是一个分布式数据库,用于将域名和IP地址相互映射,使人们更方便地访问互联网,而无需记住机器可识别的IP数字串。
为什么需要dns?
在互联网上,每个连接网络的设备都会被分配一个唯一的IP地址,可以将其视为互联网上的电话号码。当你想访问一个网站时,实际上是向该网站服务器的IP地址发送请求。然而,IP地址是一串数字,对人类来说记忆困难。这时,DNS就发挥了作用,它将这些数字IP地址转换为更易于记忆的域名,例如Linux默认情况下localhost代表本机IP地址。
例如,当你在浏览器中输入www.qq.com时,你的计算机会首先询问DNS服务器www.qq.com的IP地址,然后DNS服务器会返回对应的IP地址给你的计算机,之后你的计算机才能通过该IP地址访问qq.com服务器。这个过程称为DNS解析。
Linux的dns解析流程
用户请求
用户在应用程序(如浏览器、命令行等)中输入域名,例如www.example.com。
查找本地缓存:
然而,这个缓存默认情况下是不可见的。我通过抓包测试连续两次dns查询,仍然需要向dns发出请求。因此,我对这个缓存一直持怀疑态度,但在实际运维中确实遇到过解析异常的情况。
查询/etc/hosts文件:
如果本地缓存中找不到对应的IP地址,系统会检查/etc/hosts文件。这个文件可以手动配置域名和IP地址的映射关系。如果在这里找到了,也会直接返回IP地址给应用程序。
向DNS解析器发起查询:
如果本地缓存和/etc/hosts文件中都没有找到对应的IP地址,系统会向预先配置的DNS解析器发起查询请求。DNS解析器通常在/etc/resolv.conf文件中指定,例如:
nameserver 223.5.5.5 nameserver 114.114.114.114
这里的223.5.5.5和114.114.114.114是国内提供的公共dns,可以替换为其他DNS服务器的IP地址。
DNS解析器查询过程:
DNS服务器可以分为迭代和递归两种:
迭代查询:在迭代查询中,当客户端向DNS服务器查询时,如果该服务器没有存储查询的信息,它会将能够提供信息的其他服务器的地址返回给客户端,让客户端去那个服务器查找。也就是说,DNS服务器不会自己去查询,而是告诉客户端应该去哪里查找。
递归查询:在递归查询中,当客户端向DNS服务器查询时,如果该服务器没有存储查询的信息,它会代表客户端去其他服务器查询,直到找到答案才返回给客户端。在这个过程中,客户端只需要等待最终结果,所有的查询工作都由DNS服务器完成。
总结下来其实很简单,迭代自己没有答案,但是他会告诉你哪里有答案。递归他帮你去找到答案,然后告诉你答案。目前大部分dns都是递归。
解析结果返回:
DNS解析器将获取到的IP地址返回给系统的resolver,并且缓存这个结果。同时,将IP地址返回给应用程序,应用程序可以继续向该IP地址发送网络请求。
应用程序通信:
应用程序拿到IP地址后,可以与目标服务器建立通信,发送HTTP请求等操作。
Linux的dns配置文件
前面提到Linux的dns配置文件是/etc/resolv.conf,除了配置了dns服务器外,还有其他配置,它们分别是什么意思,如果遇到解析失败会怎样处理?
nameserver:就是dns服务器地址,最多可以写3个。
search:搜索域,一般环境用不到,但在k8s中会在搜索svc时使用这个特性。大概意思是你查询一个域名,如果没查到解析,他再给你添加个后缀,再进行查询。
options:
timeout:如果在设定时间未返回数据,则他会请求下一个dns服务器查询。
attempts:如果所有dns都查询了都失败了,他在重复这个操作的次数。
如果你的dns解析很慢,可以注意看这2个参数。
总结
Linux的dns是一个很核心的基础服务,几乎所有的业务请求都是通过域名来实现,这样所有的请求都会通过dns才能正常使用。
有的程序并不会使用系统dns逻辑,而是程序自带的dns逻辑,这样就可能导致业务和实际预期不一样的情况。
以上就是Linux基础软件-dns(一)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号