首页 > 其他分享 >【学习笔记】透视HTTP协议(五):什么是DNS?

【学习笔记】透视HTTP协议(五):什么是DNS?

时间:2024-06-13 22:05:10浏览次数:13  
标签:缓存 HTTP 透视 查询 域名 DNS IP地址 服务器

 本文是一篇学习笔记,学习的课程是极客时间的《透视HTTP协议》。

透视HTTP协议_HTTP_HTTPS-极客时间 (geekbang.org)

DNS(Domain Name System)是域名系统的缩写,它是一个分布式数据库系统,用于将人们易于记忆和理解的域名(如 www.example.com)转换为计算机能够理解和处理的IP地址(如 192.0.2.1)。DNS系统由多个层次化的域名服务器组成,这些服务器共同工作以解析域名并提供相应的IP地址。

一、域名的形式

域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低。

最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。

看一下极客时间的域名“time.geekbang.org”,这里的“org”就是顶级域名,“geekbang”是二级域名,“time”则是主机名。使用这个域名,DNS就会把它转换成相应的IP地址,就可以访问极客时间的网站了

在Apache、Nginx这样的Web服务器里,域名可以用来标识虚拟主机,决定由哪个虚拟主机来对外提供服务。

敲黑板:域名本质上就是个名字空间系统。

类似于电话本,ip就是电话号码,域名就是人名。

二、域名的解析

就像IP地址必须转换成MAC地址才能访问主机一样,域名也必须要转换成IP地址,这个过程就是“域名解析”。

DNS的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:

  1. 根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的IP地址;

  2. 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如com顶级域名服务器可以返回apple.com域名服务器的IP地址;

  3. 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的IP地址,比如apple.com权威域名服务器可以返回www.apple.com的IP地址。

例如,你要访问“www.apple.com”,就要进行下面的三次查询:

  1. 访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;

  2. 访问“com”顶级域名服务器,它再告诉你“apple.com”域名服务器的地址;

  3. 最后访问“apple.com”域名服务器,就得到了“www.apple.com”的地址。

三、DNS缓存

虽然核心的DNS系统遍布全球,服务能力很强也很稳定,但如果全世界的网民都往这个系统里挤,即使不挤瘫痪了,访问速度也会很慢。

所以在核心DNS系统之外,还有两种手段用来减轻域名解析的压力,并且能够更快地获取结果,基本思路就是“缓存”。

DNS是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存。

1、建立“非权威域名服务器”缓存DNS查询结果

许多大公司、网络运行商都会建立自己的DNS服务器,作为用户DNS查询的代理,代替用户访问核心DNS系统。这些“野生”服务器被称为“非权威域名服务器”,可以缓存之前的查询结果,如果已经有了记录,就无需再向根服务器发起查询,直接返回对应的IP地址。

这些DNS服务器的数量要比核心系统的服务器多很多,而且大多部署在离用户很近的地方。比较知名的DNS有Google的“8.8.8.8”,Microsoft的“4.2.2.1”,还有CloudFlare的“1.1.1.1”等等。

2、操作系统缓存DNS查询结果

操作系统里也会对DNS解析结果做缓存,如果你之前访问过“www.apple.com”,那么下一次在浏览器里再输入这个网址的时候就不会再跑到DNS那里去问了,直接在操作系统里就可以拿到IP地址。

3、“主机映射”文件

操作系统里还有一个特殊的“主机映射”文件,通常是一个可编辑的文本,在Linux里是“/etc/hosts”,在Windows里是“C:\WINDOWS\system32\drivers\etc\hosts”,如果操作系统在缓存里找不到DNS记录,就会找这个文件。

下面的这张图比较完整地表示了现在的DNS架构。

四、域名的新作用

1、也是最简单的,“重定向”。因为域名代替了IP地址,所以可以让对外服务的域名不变,而主机的IP地址任意变动。当主机有情况需要下线、迁移时,可以更改DNS记录,让域名指向其他的机器。

2、因为域名是一个名字空间,所以可以使用bind9等开源软件搭建一个在内部使用的DNS,作为名字服务器。这样我们开发的各种内部服务就都用域名来标记,比如数据库服务都用域名“mysql.inner.app”,商品服务都用“goods.inner.app”,发起网络通信时也就不必再使用写死的IP地址了,可以直接用域名。

3、基于域名实现的负载均衡。

  • 因为域名解析可以返回多个IP地址,所以一个域名可以对应多台主机,客户端收到多个IP地址后,就可以自己使用轮询算法依次向服务器发起请求,实现负载均衡。
  • 域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,这样在DNS端把请求分发到不同的服务器,实现负载均衡。

有没有不理解为什么公司要自建DNS ?

  1. 性能优化和响应时间
    • 自建DNS服务器通常部署在公司或运营商的网络内部,与用户距离更近,这有助于减少网络延迟和查询响应时间。
    • 本地缓存机制能够存储用户经常访问的域名和IP地址对应关系,减少了对外部DNS服务器的依赖,从而提高了查询效率。
  2. 安全性和隐私保护
    • 自建DNS服务器可以更好地控制DNS查询的处理过程,避免潜在的中间人攻击和数据泄露。
    • 公司或运营商可以自定义DNS查询的过滤和拦截规则,以防止恶意域名解析,保护用户免受网络钓鱼、恶意软件和广告等威胁。
  3. 可靠性和稳定性
    • 自建DNS服务器可以根据公司或运营商的需求进行定制和优化,提供更可靠和稳定的服务。
    • 在发生故障或网络拥塞时,自建DNS服务器可以提供备用路径或负载均衡,确保用户查询的连续性和可用性。
  4. 内容控制和策略实施
    • 通过自建DNS服务器,公司或运营商可以实施特定的内容控制策略,如阻止访问某些网站或限制某些类型的网络流量。
    • 这有助于维护公司内部网络的安全和合规性,以及符合相关法律法规和政策要求。
  5. 定制化和灵活性
    • 自建DNS服务器可以根据公司或运营商的具体需求进行定制和扩展,提供灵活的域名解析服务。
    • 例如,可以添加自定义的DNS记录类型、支持特定的查询协议或实现与其他网络服务的集成。
  6. 数据分析和监控
    • 自建DNS服务器可以收集和分析用户的DNS查询数据,提供有关网络使用情况的洞察和统计信息。
    • 这有助于公司或运营商更好地理解用户需求、优化网络配置以及改进服务质量。

 在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www.不存在.com”,试着解释一下它的DNS解析过程。

本地查询:首先,浏览器会在本地缓存中查找该域名对应的IP地址。本地缓存通常保存了之前访问过的域名解析结果,以加快访问速度。如果本地缓存中有该域名的记录,浏览器会直接使用缓存中的IP地址进行访问。

查询DNS服务器:如果本地缓存中没有找到对应的域名记录,浏览器会向配置的DNS服务器发送查询请求。DNS服务器中存储着域名和IP地址的映射关系。

主域名服务器:如果DNS服务器是主域名服务器,它会直接从本地磁盘文件中加载域名信息进行解析。主域名服务器负责维护一个特定区域的所有域名信息。

辅助域名服务器:如果DNS服务器是辅助域名服务器,它会从主域名服务器那里获得授权,并有一个所有域信息的完整拷贝。辅助域名服务器作为主域名服务器的备份,提供域名解析服务。

缓存域名服务器:缓存域名服务器没有自己的域名数据库,而是从远程服务器获取域名解析的答案,并将其存储在高速缓存中。对于相同的查询请求,缓存域名服务器可以直接从缓存中提供答案,从而提高解析速度。

转发域名服务器:转发域名服务器负责处理所有非本地域名的查询。如果它自己的缓存中没有找到答案,它会将查询请求转发到指定的其他DNS服务器,直到找到结果为止。

如果DNS服务器找到了对应的IP地址,它会将结果返回给浏览器。浏览器随后会使用这个IP地址来访问目标网站。 如果因为某些原因,DNS失效或者出错了,会出现什么后果?

无法解析域名:浏览器会报告一个错误,通常是“您所访问的域名错误或者不存在”。这意味着浏览器无法将输入的域名解析为有效的IP地址。

无法建立连接:由于没有有效的IP地址,浏览器无法与目标服务器建立TCP连接,因此无法加载或显示网页内容。

用户体验下降:用户可能会感到困惑或不满,因为他们无法访问期望的网站。这可能导致用户尝试重新输入域名、检查网络连接或寻求其他帮助。

为了避免这些问题,网络管理员和服务提供商需要确保DNS服务器的正常运行和及时更新,以减少DNS失效或出错的可能性。同时,用户也可以采取一些措施,如清除浏览器缓存、检查网络连接或尝试使用其他DNS服务器来解决访问问题。

标签:缓存,HTTP,透视,查询,域名,DNS,IP地址,服务器
From: https://blog.csdn.net/MAOZI8/article/details/139595773

相关文章

  • 网站_域名_DNS_端口_web访问过程
    网站基本概念服务器:能够提供服务器的机器,取决于机器上所安装的服务软件web服务器:提供web服务(网站访问),需要安装web服务软件,Apache,tomcat,iis等域名(DomainName)方便人记的DNS(DomainNameSystem)域名系统,一个分布式数据库,让ip和域名相互映射让你不用记ip先找本地DNS,再找网......
  • SQL注入&HTTP 头XFF&COOKIE&POST请求
    目录#知识点:#补充点:案例演示1数据请求方式涉及到的问题:phpJavaSpringPython案例演示2手工注入sqlmap注入方式一方式二案例演示3​编辑案例演示4#知识点:1、数据请求方式-GET&POST&COOKIE等2、常见功能点请求方式-用户登录&IP记录等3、黑盒白盒注入......
  • Windows Server 2012 R2部署网站后IIS,只要访问网址应用程序池就自动停止,浏览器页面提
     解决方案:1.查看windows日志通过文件资源管理器查看:打开文件资源管理器,找到“我的电脑”。右键点击“管理”。在弹出的窗口中,点击“事件查看器”。在事件查看器中,点击“Windows日志”即可查看各种日志信息 2.找到错误信息......
  • netcore HTTP Error 500.30 - ASP.NET Core app failed to start
    netcoreHTTPError500.30-ASP.NETCoreappfailedtostart 错误解释:HTTPError500.30表示在尝试启动ASP.NETCore应用程序时发生了错误。这通常是因为应用程序无法找到或无法正确加载.NETCore运行时或应用程序的相关依赖项。解决方法:确认.NETCore运行时已安装:检查......
  • 利用Wireshark抓包分析DNS域名解析过程
    一、DNS协议概述  DNS协议也可以称为DNS服务,全称是DomainNameSystem,即域名系统,和HTTP协议一样,也是一个位于应用层的协议(服务),它是基于运输层的UDP协议的。从DNS的名字我们就可以知道,它提供域名映射到IP地址的服务。二、实验目的掌握DNS域名解析过程熟悉DNS报文格式三......
  • 云平台DNS故障导致网站访问卡顿异常排查过程,wireshark、strace等工具在实际问题排查过
    一、问题现象    项目上使用华为私有云,前段时间华为升级云平台后,云上用户反馈业务系统出现卡顿,之前几秒可以刷新出来的页面现在需要几十秒。提供了一个比较明显的url和curl调用方法。10.213.x.xxx:8082/files/logincurl-H"Content-Type:application/json"-H"T......
  • HTTP1.x HTTP2 HTTP3 的简单对比
    协议简要描述比喻HTTP1.0短连接,一次数据通信,结束后就断开一次性道路,简单暴力通过。HTTP1.1长连接,连接可以被复用,但需要按照资源顺序复用。单向单车道,婚礼车队,不能逆序。HTTP2连接复用,增加了http头部压缩和帧传输,连接可以被异步服用,服务器端可以主动推送资源......
  • ab压测 ab会模拟10个并发用户向网站发送总共100个HTTP GET请求
    ab-n100-c10https://yiyan.baidu.com/-n100:指定总共要发送的请求数,这里是100个请求。-c10:指定并发用户数,即同时有多少个用户(或连接)在发送请求,这里是10个并发用户。https://www.163.com/:要测试的HTTPS服务器的URL。执行这个命令后,ab会模拟10个并发用户向https://w......
  • httpclient,轻量级idea集成测试工具
    优点:不用新开一个网页,具有测试数据保存功能,不需要配置即用(对比swagger)   不会特别占内存(对比postman) 使用方法:idea中安装插件controller方法中点击 选择对应action 即可自动生成测试,点击左侧三角即可测试。但是数据内容需要自己填写如下:###分页查询POST{......
  • HTTP和HTTPS的区别
    目录HTTP和HTTPS的区别1)什么是HTTP2)什么是HTTPS3)HTTP与HTTPS的区别4)HTTP的工作原理5)HTTPS的工作原理HTTP和HTTPS的区别1)什么是HTTPHTTP(HyperTextTransferProtocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是一种请求-响应协议,在客户端用户代......