DNS在哪一层

一、什么是DNS

DNS(Domain Name System)是互联网中的一个命名系统,用于将域名与IP地址相互映射。借助DNS,用户只需要输入易于记忆和理解的域名,即可访问到远程主机。

DNS是一个分布式的数据库系统,同时也是一个应用层协议。可提供两种服务:解析和逆向解析。解析将域名转换成IP地址,逆向解析将IP地址转换成域名。

二、DNS在哪一层

DNS作为一个应用层协议,位于OSI七层模型中的应用层。DNS的数据传输使用的是TCP和UDP协议,TCP常用于大数据传输,UDP常用于小数据传输,例如DNS的查询。

三、DNS的工作原理

DNS的工作可以分为两个阶段:递归查询和缓存查询。

1.递归查询

当用户查询一个域名时,本地域名服务器(Local DNS Server)会先查询本地缓存是否存在该域名对应的IP地址。如果存在,则直接将IP地址返回给用户。如果不存在,则本地域名服务器需要向根域名服务器(Root DNS Server)查询该域名对应的顶级域名服务器(TLD DNS Server)的IP地址。

然后本地域名服务器会向TLD DNS Server发送一个查询请求,询问负责该域名的下一级域名服务器的IP地址。例如,www.example.com的顶级域名是.com,则TLD DNS Server需要返回负责.com域名解析的域名服务器IP地址。

本地域名服务器再向负责.com域名解析的域名服务器发送询问请求,询问www.example.com对应的IP地址。域名服务器查询自己的缓存。如果缓存中有该域名对应的IP地址,则返回,否则继续向上级域名服务器查询,直到返回该域名对应的IP地址。

最后,本地域名服务器将查询结果返回给用户,并将结果缓存,以备下次查询时使用。

2.缓存查询

缓存查询指的是本地域名服务器在递归查询过程中,将查询结果缓存起来,以便在下次查询时能够更快地返回结果。缓存可以设置生存时间,超过生存时间就需要重新从根域名服务器查询。

四、DNS的代码示例

以下是一个使用Node.js实现的简单DNS服务器,它可以响应简单的DNS查询请求。

const dns = require('dns');
const dgram = require('dgram');
const server = dgram.createSocket('udp4');

server.on('error', (err) => {
  console.log(`server error:\n${err.stack}`);
  server.close();
});

server.on('message', (msg, rinfo) => {
  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
  const domain = msg.slice(12, msg.length - 5);
  dns.lookup(domain, (err, address) => {
    if (err) {
      console.log('lookup error:', err);
      return;
    }
    const response = Buffer.alloc(16);
    response.writeUInt16BE(msg.readUInt16BE(0), 0); // 事务ID
    response.writeUInt16BE(0x8180, 2); // 标准响应,无递归和权威答案
    response.writeUInt16BE(msg.readUInt16BE(4), 4); // 问题数量
    response.writeUInt16BE(1, 6); // 回答数量
    response.writeUInt16BE(0, 8); // 权威域名数量
    response.writeUInt16BE(0, 10); // 额外信息数量
    response.write(msg.slice(12, msg.length)); // 问题部分
    response.writeUInt16BE(0xc00c, response.length - 4); // 回答部分域名偏移量
    response.writeUInt16BE(1, response.length - 2); // 回答部分类型
    response.writeUInt16BE(1, response.length); // 回答部分类
    response.writeUInt32BE(0, response.length + 2); // 回答部分缓存时间
    response.writeUInt16BE(4, response.length + 6); // 回答部分数据长度
    const addressParts = address.split('.');
    for (let i = 0; i  {
  const address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
});

server.bind(53);

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/241329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:30
下一篇 2024-12-12 12:30

相关推荐

  • CentOS 6如何删除resolv.conf的DNS

    本文将介绍在CentOS 6操作系统下如何删除resolv.conf文件中的DNS配置信息。 一、备份resolv.conf文件 在修改resolv.conf文件之前,建议首先备份…

    编程 2025-04-29
  • DNS配置的重要性及实现方式

    一、DNS配置的背景和意义 DNS,即Domain Name System,将域名和IP地址进行对应转换,是互联网中重要的基础设施之一。DNS的作用是将域名转换为IP地址,方便人们…

    编程 2025-04-23
  • CentOS7 DNS详解

    一、DNS基础 DNS(Domain Name System),域名系统是互联网的一项非常重要的基础设施,它将人类可读的主机名转换成计算机可读的IP地址,DNS系统是一种分布式数据…

    编程 2025-04-22
  • Windows DNS刷新命令详解

    Windows操作系统中,DNS(Domain Name System)是用于将域名映射为IP地址,方便计算机进行网络通信的系统。但是,当网络发生变化时,DNS可能会出现缓存,导致…

    编程 2025-04-12
  • DNS解析流程详解

    一、DNS基本概念 Domain Name System(DNS),即域名系统,是互联网中负责域名解析的系统。在互联网中,每个主机都有一个域名,而能够访问互联网的客户端实际上只认识…

    编程 2025-04-12
  • DNS配置详解

    一、DNS配置异常怎么处理 1、查看是否是DNS服务器出现故障导致的,可以用ping命令测试DNS服务器是否可以连通。 ping DNS服务器IP地址 2、在不改变DNS配置的情况…

    编程 2025-04-02
  • OpenWrt动态DNS配置详解

    一、什么是动态DNS 动态DNS(DDNS)是一种允许你将域名映射到动态IP地址的技术。DDNS 服务通常由第三方提供商提供,用于允许你“指向”你的网络设备,尽管网络设备的IP地址…

    编程 2025-02-25
  • DNS配置文件详解

    一、基础概念 DNS(Domain Name System)是互联网和局域网中解析主机名和IP地址的系统,它能够将用户可读的主机名转化为计算机所使用的IP地址。DNS配置文件是该系…

    编程 2025-02-24
  • Linux配置DNS的详细步骤

    一、Linux配置DNS地址 首先,我们需要在Linux上设置静态IP地址。可以通过编辑网络接口的配置文件来实现。在这里我们以Ubuntu为例,打开终端并输入以下命令: sudo …

    编程 2025-01-20
  • DNS选择

    一、 DNS选择软件 1、什么是DNS选择软件? DNS选择软件是一种工具,通过这种工具你可以便捷地修改DNS服务器地址。选择一个比较好的DNS服务器,可以快速访问互联网,可以提高…

    编程 2025-01-14

发表回复

登录后才能评论