计算机网络应用层----DNS协议:因特网的目录服务

2023-11-01

计算机网络应用层----DNS协议:因特网的目录服务

DNS : (domain name system) 域名系统

由于IP地址非常复杂难以记忆,我们平时访问网站时,输入的都是字母组成的字符串,而不是直接输入IP地址,但是数据在网络中传播需要IP地址,因此就需要有效管理主机名和IP地址之间的关系的系统,也就是DNS系统。

DNS系统可以维护一个用来标识组织内部主机名和IP地址之间对应关系的数据库。

DNS组成:

  • 一个由分层的DNS服务器实现的分布式数据库
  • 一个使得主机能够查询分布式数据库的应用层协议

DNS协议是运行在UDP基础上的 (为了速度更快、负载更低)

DNS协议的运行过程:

  • 用户主机上运行着DNS客户端
  • 当向浏览器输入对应的URL后,将对应的主机名传给DNS客户端
  • DNS客户向DNS服务器发送一个包含主机名的请求
  • DNS客户最终会受到一份回答报文,包含有主机名对应的IP地址
  • 一旦浏览器接收到来自DNS的该IP地址,则将通过该IP地址可以发起TCP连接

DNS的服务:

  • 进行主机名到IP地址的转换
  • 主机别名。有着复杂主机名的主机能拥有一个或多个别名,应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址
  • 邮件服务器别名。电子邮件应用程序可以调用DNS,对提供的邮件服务器别名进行解析,以获得该主机的规范主机名及IP地址
  • 负载分配。 DNS用于冗余的服务器之间进行负载均衡

DNS工作原理概述

由于单一DNS服务器将有单点故障(DNS服务器崩溃则整个因特网崩溃)、通信容量(巨量的查询)、远距离查询(非常慢的查询)、难以维护等诸多问题,且难以扩展。故DNS采用的是分布式的设计方案

[

DNS使用了大量的DNS服务器,以层次方式组织,遍布在世界范围。

DNS服务器分为三种:

  • 根DNS服务器。通常存储的是顶级域与其对应的顶级域服务器IP地址之间的映射关系
  • 顶级域DNS服务器。通常成存储的是域名与其对应的权威服务器的IP地址之间的映射关系
  • 权威DNS服务器。存储的是本地的域名与其对应的IP地址之间的映射关系

还有本地DNS服务器,虽然不属于域名服务器的层次结构,但对DNS层次结构非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器,一般做一个代理的作用。

DNS查询过程:查询 gaia.cs.umass.edu

在这里插入图片描述

  • 主机首先向本地DNS服务器发送DNS查询报文,如果本地DNS服务器有该域名对应的IP地址直接返回即可
  • 如果本地DNS服务器没有存储该域名,则本地DNS服务器将该报文转发给根DNS服务器
  • 根DNS服务器解析域名发现前缀 edu ,将向本地DNS服务器返回负责 edu 的顶级域服务器的IP地址列表
  • 本地DNS服务器收到后,将向这些顶级域服务器之一发送查询报文
  • 该顶级域服务器注意到 umass.edu 的前缀,将向本地DNS服务器返回权威DNS服务器的IP地址
  • 本地DNS服务器将报文转发到权威DNS服务器,该权威DNS服务器将发送目标IP地址到本地DNS服务器
  • 本地DNS服务器将目标IP地址发送到请求主机
  • 主机获得目标IP地址后将进行之后的TCP/IP连接

DNS在进行区域传输的时候使用TCP,普通的查询使用UDP

客户端到本地DNS服务器是属于递归查询(发出一次请求,得到一次准确结果,但消耗资源),而DNS服务器之间的交互查询就是迭代查询(发出多次请求)

DNS缓存

为了改善时延并减少因特网上传输的DNS报文数量,DNS广泛采用了缓存技术。

原理:DNS服务器收到一个DNS回答后,将会把该回答存储到本地缓存存储器中,下一次如果有相同的查询将直接返回对应IP地址即可。(缓存具有生命周期,当一段时间没有访问后将丢弃该缓存信息)

查看本地DNS配置
在这里插入图片描述

我采用的是自动获得DNS服务器地址,也可以自己配置对应的DNS服务器地址。

查询我的DNS服务器地址:
在这里插入图片描述

DNS安全问题
1.针对域名系统的恶意攻击:DDOS攻击造成域名解析瘫痪。
2.域名劫持:修改注册信息、劫持解析结果。
3.国家性质的域名系统安全事件:“.ly”域名瘫痪、“.af”域名的域名管理权变更。
4.系统上运行的DNS服务存在漏洞,导致被黑客获取权限,从而篡改DNS信息。
5.DNS设置不当,导致泄漏一些敏感信息。提供给黑客进一步攻击提供有力信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络应用层----DNS协议:因特网的目录服务 的相关文章

  • 端口 80 被我的 ISP 封锁,那么我的浏览器如何仍然工作?

    我知道当我请求 example com 时 我的浏览器实际上默认为 example com 80 但是 我的 ISP 阻止 80 端口侦听 那么如果端口 80 被阻止 我如何接收请求的响应 它不应该工作 不是吗 当您发出 HTTP 请求 实
  • 如何使 Windows DNS 和 WINS 设置保留在 Azure VM 中?

    我在 Azure VM 中设置了一个域控制器 并且其他几个服务器也设置为 VM 当我设置服务器虚拟机时 我将 DNS 和 WINS 配置为指向 DC 的 IP 地址并将它们加入域 但是 这些设置在关闭 虚拟机被释放 后将无法保留 当虚拟机重
  • 将非 www 版本的域名重定向到 Jetty 中的 www

    我无法将我的非 www 域版本重定向到 wwwMovedContextHandler 它没有要重定向到的主机 Both www example com and example com指向我的网络服务器IP 当有人试图打开时example c
  • 非阻塞网络地址解析(gethostbyname 或 getaddrinfo)?

    使用经典的 nsswitch conf 配置 hosts files dns 尝试使用解析名称获取主机名 or 获取地址信息 如果 DNS 没有应答 或配置错误 可能需要一段时间 有没有办法在 nsswitch conf 中配置超时或使用管
  • 创建本地自定义主机名而不是 localhost?

    目前 我的 Flask 应用程序在本地运行 http localhost 5000 some page http localhost 5000 some page 如何为我的应用程序创建本地自定义位置 例如 http myappname s
  • 在 Android 上解析 DNS SRV 记录的轻量级方法

    在 Android 上进行 SRV 记录查找最节省资源的方法是什么 例如在 XMPP 客户端中 例如yaxim https github com pfleidi yaxim 我知道 JNDI http docs oracle com jav
  • Docker Weave 和 WeaveDNS 问题

    我在本地计算机上运行的小型 weave 网络上设置 weaveDNS 时遇到问题 目前 问题表现为以下事实 当我运行 weave status 时 我在输出中没有看到 DNS 部分 如故障排除部分中所建议的那样 http docs weav
  • Firebase 托管未验证 GoDaddy 中的 TXT 记录

    我部署了我的应用程序 现在我正在尝试添加我的自定义 URL 我按照 Firebase 的说明将他们的 TXT 记录添加到我的 DNS GoDaddy 中 但现在 Firebase 表示尚未得到验证 我认为我做错了什么 但这里没有什么可搞乱的
  • 从具有动态外部 IP 的计算机连接到 Azure SQL Server

    我正在尝试将具有动态外部 IP 的本地笔记本电脑连接到我们的 Azure SQL Server 为此 我创建了一个虚拟网络网关并将笔记本电脑连接到该网关 此外 我还向 SQL Server 添加了一个专用端点 之后 我可以使用telnet成
  • 域名通过“dig”存在

    是否可以通过检查 dig 的输出来检查域名是否存在 在绑定源中我发现了这些常量 0 DNS R NOEROR 1 DNS R FORMERR 2 DNS R SERVFAIL 3 DNS R NXDOMAIN 4 DNS R NOTIMP
  • 尝试使用 minikube 运行示例微服务应用程序时如何解决 DNS 查找错误

    亲爱的 StackOverflow 社区 我正在尝试运行https github com GoogleCloudPlatform microservices demo https github com GoogleCloudPlatform
  • django 在我的机器上非常慢

    我全新安装了 django 1 0 并提供了一个简单的页面 需要 5 秒才能加载 在我同事的计算机上几乎不需要时间 我使用启动服务器 python manage py testserver 我可以看到每个 GET 请求 PNG 和样式表 大
  • 如何从主机将主机名解析为 Docker 容器?

    我知道 Docker 在 127 0 0 11 上运行一个神奇的 dns 所以我想我会尝试 nslookup mycontainername 127 0 0 11 where mycontainername当然 是我尝试访问的容器的名称 然
  • Java 无法从 AIX 解析 DNS 地址:UnknownHostException

    我遇到了这个奇怪的错误 在 AIX 上 如果我可以从命令行访问我的服务器 使用 ping telnet 但是如果我尝试使用 java 我会遇到 UnknownHostException 这是因为 Java 无法以某种方式 使用 DNS 但我
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好
  • 如何为digitalocean设置子域?

    我需要通过在 URL 中输入 sendy ambee app 来访问我的 Digitalocean 服务器 如果我输入 IP 地址 157 230 9 219 它就可以工作 但只要我输入 sendy ambee app 它就不起作用 Whe
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • Nodejs 上使用 DNS 进行 Consul 服务发现

    TL DR 大家好 我试图从用 Express 编写的 NodeJS 前端调用 NodeJS 后端微服务 通过Consul https www consul io DNS接口 https www consul io intro gettin
  • 域名 foo.bar 指向 127.0.53.53 ——为什么?

    我今天刚刚注意到域名 foo bar 解析为 127 0 53 53 http foo bar http foo bar http whois domaintools com foo bar http whois domaintools c
  • 将 DNS 名称指向本地计算机上的 IP 地址

    这可能是一个愚蠢的问题 但我真的很感激任何简洁的答案 我已使用静态 IP 地址 例如 213 221 211 111 在本地计算机上上传了 Joomla 网站 我已在 Godaddy com 上注册了一个域名 例如 www example

随机推荐