八股23- DNS查询过程,肯定有你不知道但又耳目一新的环节

原创 发哥 Linux运维实战派 2024年09月03日 11:54 陕西

阅读提示:

  • 部分过程是很少出现在其他文章中的,更偏向于生产真实的过程,而非理论
  • 过程中引出的部分知识点也在后边做了解析,有兴趣的,推荐完整阅读
  • 文末有福利哦

本地缓存查询

1、客户端程序在需要访问域名的时候,调用域名查询,如果应用程序本身维护了域名缓存,会先从本地缓存中查找,如果有缓存,并且TTL还没有到期,则会直接返回缓存记录,如果没有缓存则会继续后续的查询

2、查询本地的hosts文件,在linux服务器上,会根据nssswitch.conf配置的hosts 解析顺序,默认的顺序是 file dns,也就是先读 /etc/hosts ,然后再进行dns解析,windows在C:\Windows\System32\drivers\etc\hosts定义,在文件中如果查询到域名的记录绑定,则会直接返回,应用程序也会对应更新自己的缓存

DNS查询过程

3、浏览器如果配置了DOH,会走doh的http请求进行dns记录查询,其他客户端应用程序如果也配置了doh(httpdns)的解析链路,一般都会优先doh或者httpdns解析

Linux服务器上发起DNS查询的时候,会检查是否存在nscd缓存,如果有缓存,会从缓存中查询域名缓存,如果有缓存会直接返回

4、走默认的DNS协议查询域名记录,会通过读取本地网络配置,Linux配置在/etc/resolv.conf中,window配置TCP/IP网络配置中;

从中获取配置的localdns的IP地址,并向localdns发送dns查询请求

LocalDNS处理过程

5、LocalDNS接收到DNS查询请求之后,会先查自己的缓存,如果有,直接返回;

如果缓存没有,会接着判断域是否由本地直接进行权威管理(即,域名记录的数据库是在本地)则直接查询记录,对请求做权威回答

如果域在本地管理,但配置了请求转发,则会将dns查询转发到其他localdns服务器上,并等待回复,获取其他localdns的查询记录后返回给客户端,并缓存

如果以上情况都不匹配,则会判断当前dns服务器是否开启递归查询,只有开启之后localdns才会继续向根服务器发起查询请求,否则会直接返回失败

Localdns迭代查询

6、localdns会向根服务器发送查询请求,请求www.163.com的IP记录

7、根服务器是不会直接存储域名解析记录的,它只会存储顶级域及对应的地址,所以根服务器会回复“.com”的dns地址,告诉localdns,应该到.com那里问一下,这个域是它负责管理的

8、localdns会缓存根服务器回复的.com的地址,下次就会直接去.com查询;localdns继续发送dns查询到.com服务器,询问www.163.com的记录,.com的dns服务器同样并不直接维护域名记录,会返回163.com的权威dns服务器的地址

9、localdns会缓存下163.com的权威服务器地址,下一次会直接去这里查询;localdns则继续向163.com的权威服务器查询 www 主机记录,163.com的权威服务器会发现,这就是我自己维护的域,所以会查询自己的域名地址库,如果查询到,就会直接返回IP地址,如果未查询到,则会返回错误

10、localdns会将最终的结果缓存下来,下次相同的记录查询过来,会直接从缓存回复。

关于DOH/HTTPDNS

DOH(dns over https)与httpdns叫法不同,但本质上原理是一致的,就是通过http协议来查询域名记录。可以避免使用dns协议查询记录时面临的域名劫持、缓存污染、dns解析调度不准确的问题。

httpdns的工作流程

httpdns实际上就是客户端原本使用DNS协议从Localdns解析域名IP的过程修改为客户端直接访问HTTPDNS的http(s)接口,获取业务在域名配置管理系统上配置的访问延迟最优的IP。获取到IP后就直接往此IP发送业务协议请求

关于localdns的转发

在生产环境下,会一些场景是需要用到转发

  • • LocalDNS处于一些网络受限的环境,没有办法访问公网
  • • 减少服务器资源消耗,LocalDNS因为需要去公网上,一跳一跳的进行dns记录查询,这个过程是比较消耗资源的,有一些企业不愿意自己承担这部分的资源消耗,就可以直接把解析请求转发到其他DNS服务器做解析,自己只做记录缓存
  • • 优化DNS解析性能,比如下图中的nebulaedu.net,如果这个域是我自己管理的域名,那显然是将nebulaedu.net的解析请求直接转发给权威DNS解析速度更快【非自己管理的权威DNS建议不要这样做哦,并且权威DNS一般不接受递归查询,如果有CNAME记录,则不要使用,且权威DNS都是有比较严格的限速设置的】

关于nscd缓存

NSCD(name service cache daemon)是GLIBC中网络库的一个组件,基本上来讲我们能见到的一些编程语言和开发框架最终均会调用到glibc的网络解析的函数(如gethostbyname or gethostbyaddr等),因此绝大部分程序能够使用NSCD提供的缓存服务。当然如果是应用端自己用socker编写了一个网络client,就无法使用NSCD提供的缓存服务,比如DNS领域常见的dig命令不会使用NSCD提供的缓存,相反ping得到的DNS解析结果将使用NSCD提供的缓存。

nscd是在glibc的解析过程中直接嵌入的逻辑,只要linux客户端主机上启动了进程,并开启了hosts的缓存,那向localdns发起请求,就会先过nscd缓存。

nscd不止可以缓存dns记录,还可以缓存用户,密码等信息。

写在最后

客官,看到这里了,给个关注再走呗。

运维相关岗位面试时涉及到的知识面非常广,所以复习起来会有无从下手的感觉。为了让同学们面试不迷茫,我们整理了运维面试的高频面试题。

面试库带答案,涉及Linux系统,高并发集群解决方案,Linux网络,K8S云原生等等

关注 我,回复 面试题 免费领取。

祝愿每一位读者都可以面试成功,进入大厂。

#24秋招求职节奏总结##实习,投递多份简历没人回复怎么办##我的求职思考##23届找工作求助阵地##运维工程师#
全部评论

相关推荐

#深信服求职进展汇总#招聘进度线双一流计算机硕;6.7:投递简历(整个流程不到2分钟,非常简洁高效,超过大多数公司);6.14:收到测评通知,并学习信服圈儿里课程(企业发展历程、岗位产品内容及相关基础),课程内容都是干货.里面的企业文化无论放在个人还是公司都是“葵花宝典“;6.21:做完笔试,主要围绕产品和课程里面的内容,难度适中;7.29:正式线下面试,过一周收到正式邮件意向书,同时开始担任校园大使!8.30:线下沟通会,进一步认识深信服及解答同学疑惑,现静待9月中旬签正式offer。求职动机最开始接触到深信服其实是18年大一的时候用vpn产品,那个时候起深信服后就一直在印象里,后面有师哥师姐去深信服,反馈都比较不错,结合自己想法和岗位匹配度,果断投了X计划市场岗。面试体验1.从HR到面试官,都非常友好亲切,像是朋友或者同事之间相处,HR为同学们准备了茶歇,面试官面完后还主动起身和同学握手,种种细节真的是点赞。2.因为在X计划中简历和笔试较好的可以免群面,两轮单面主要围绕校园经历,包括学习经历、项目经历及学生干部任职和个人成长经历等方面挖掘和发现具备岗位对应的潜质和能力,以及个人是否真正想从事本岗位工作,单面时长平均半小时。和深信服的相处1.每次去深信服,HR都是很热心接待,校园大使群氛围相比其它大公司也更热闹,有说有笑,感受到了深信服简单有爱的文化。2.公司门口就摆了负责区域的对赌目标,还有优秀同事案例展示,公司人员展现出的精神面貌也是干劲十足,奋斗进取体现得很真实。3.深信服的格局让我印象深刻,在做招聘助理的时候,遇到一位非常优秀的面试者,HR和他交流,推荐他去更适合的岗位和大公司,而非做tob市场。深信服并一味将优秀的人吸纳过来,而是鼓励对方做出最合适的选择,这样才是和深信服之间的双向奔赴。4.在offer沟通会的时候,同学们都提了很多实际问题,也得到了真实得回应,比如工作内容、职业发展、待遇福利等等,都是坦诚相待。当时其实提前了解目前网安产品市场以及各个公司的业务及业绩,当时恰好在公司门口大屏幕上看大到了关于业务业绩上的问题,把问题和高管的回答都“赤裸裸”摆在了上面,后面HR解释到这是内部开放交流活动,职工会有机会直接向高层提出问题,领导和高管都会毫不避讳求真回答并解决,这种敢于“刮骨疗毒”敢为人先的处事方式,每个人看到都能更有信心。5.通过和深信服的直接接触以及与其他同学之间的交流,我感受到深信服倡导的使命和愿景、核心价值观和公司每个人每件事都是紧密相连的。前路漫漫需励行,能在提前批收到深信服offer,感到非常幸运和幸福。6.还有很多,欢迎评论区交流~~,也祝君诸事顺遂!
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务