域名系统(Domain Name System, DNS):一个分层的由DNS服务器实现的分布式数据库+一个使得主机能够查询分布式数据库的应用层协议
DNS服务器通常是运行BIND (Berkeley Internet Name Domain) 软件的UNIX机器。
DNS提供的服务主要包括:
  • 进行主机名到IP地址的转换
用户主机上运行着DNS应用的客户端,浏览器从URL中抽取出主机名,并将这台主机名传给DNS应用的客户端。
DNS客户端向DNS服务器发送一个包含主机名的DNS查询报文;DNS客户端最终会收到一份DNS回答报文,其中含有对应于该主机名的IP地址。DNS请求和回答报文都用UDP数据报经端口53发送。
一旦浏览器接收到来自DNS的该IP地址,它能够向位于该lP地址80端口的HTTP服务器进程发起一个TCP连接。
  • 主机别名
  • 邮件服务器别名
  • 负载分配
 
考虑到单点失败问题、流量问题、距离问题、维护性问题, 采用的是分布式层次式数据库
DNS查询分为迭代查询和递归查询(默认)
根DNS服务器:全球共13个,每个实际都是一个冗余服务器的网络
顶级域(Top-Level Domain, TLD)DNS服务器:负责顶级域名如com、org、net、edu、gov以及所有国家的顶级域名
权威DNS服务器:组织的域名解析服务器,提供组织内部服务器的解析服务
本地DNS服务器:严格来说不属于层级系统,每个ISP都有一台本地DNS服务器。当主机与某个ISP相连时,ISP会通过DHCP服务为其提供IP地址和一台或多台DNS服务器地址。 本地DNS服务器作为代理(proxy),会将查询转发给层级式域名解析服务器系统
只要域名解析服务器获得域名—IP映射,即缓存这一映射,一段时间过后,缓存条目删除失效。本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问。
 
DNS 服务器存储了资源记录(Resource Record ,RR),RR提供了主机名到IP地址的映射。
每个DNS回答报文包含了一条或多条RR,每条RR有Name、Value、Type、TTL四个字段:
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。
Name 和Value 的值取决于Type:
  • Type=A,Name为主机域名、Value为IP地址
  • Type=NS,Name为域(如edu.cn)、Value为该域权威域名解析服务器的主机域名。这个记录用于沿着查询链来路由DNS查询。
  • Type=CNAME,Name为某一真实域名的别名、Value为真实域名
  • Type=MX,Value是别名为Name的邮件服务器的规范主机名。通过使用MX记录,一个公司的邮件服务器和其他服务器(如Web服务器)可以使用相同的别名
如果一台DNS服务器是用于某特定主机名的权威DNS服务器,那么该DNS服务器会有一条包含该主机名的类型A记录(即使该DNS 服务器不是其权威DNS 服务器,它也可能在缓存中包含有一条类型A 记录);
如果一台DNS服务器不是用于某主机名的权威服务器,那么该服务器将包含一条类型NS记录,该记录对应于包含主机名的域;还包括一条类型A记录,该记录提供了在NS记录的Value字段中的DNS服务器的IP地址。
 
DNS查询报文和DNS回答报文有相同的格式:
前12 个字节是首部区域,其中有几个字段:
  • 标识符
是一个16比特的数,用于标识该查询。这个标识符会被复制到回答报文中,以便让客户用它来匹配发送的请求和接收到的回答。
  • 标志字段
1比特的RQ(查询/回答)标志位指出报文是查询报文(0) 还是回答报文(1) 。
AA(Authoritative Answer,权威回答)标志位只在应答的时候才有意义,指出给出应答的服务器是被查询域名的授权解析服务器。 
如果客户(主机或者DNS 服务器)在该DNS 服务器没有某记录时希望它执行递归查询,将设置1比特的RD(Recursion Desired,希望递归)标志位。
如果该DNS服务器支持递归查询,在它的回答报文中,将设置1比特的RA(Recursion Available,递归可用)标志位。
  • 问题数
  • 回答RR数
  • 权威RR数
  • 附加RR数
首部后的4类数据区域出现的RR数量,与首部中的4个有关RR数量的字段相对应
  • 问题区域:包含着正在进行的查询信息
查询名字段,指出正在被查询的域名(如果是反向查询,则为指出IP地址反查域名)
类型字段,它指出正在进行查询的问题类型,可以是A、NS、CNAME等
查询类字段,通常为1 ,表面是Internet数据
  • 回答区域
在来自DNS服务器的回答中,回答区域包含了对最初查询的问题进行回答的资源记录。每个资源记录中有Type字段、Value字段和TTL字段。
在回答报文的回答区域中可以包含多条RR,因此一个主机名能够对应多个IP地址(例如冗余Web 服务器) 
  • 权威区域
包含了其他权威服务器的记录。
  • 附加区域
包含了其他有帮助的记录。例如,对于一个MX请求的同答报文的回答区域包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域包含一个类型A记录,该记录提供了用于该邮件服务器的规范主机名的IP地址。
 
注册域名的步骤:
(1)因特网名字和地址分配机构(ICANN)向各种注册登记机构(Network Solutions)授权。
(2)向注册登记机构提供自己的基本和辅助权威域名解析服务器的名字和IP地址
(3)对每个新添加的权威域名解析服务器,注册登记机构向com顶级域名解析服务器中插入一条TYPE A记录和一条TYPE NS记录
(4)确保用于Web服务器的TYPE A记录和用于邮件服务器的TYPE MX记录被输入自己的权威域名解析服务器中

计算机网络-应用层(4)DNS协议的更多相关文章

  1. 计算机网络-应用层之HTTP协议

    1.概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). ...

  2. 计算机网络——DNS协议的学习与实现

    1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...

  3. TCP/IP(六)应用层(DNS和HTTP协议)

    前言 到这一篇我已经把TCP/IP五层模型详细的说明了一遍,大体的从物理层到最上层的应用层做了一个大概的了解,其实总体学下来东西非常的多,我们需要经常的去系统性的去学习它.不然过一段时间就忘记了! 回 ...

  4. 应用层协议FTP、DNS协议、HTTP协议分析

    分析所用软件下载:Wireshark-win32-1.10.2.exe 一.阅读导览 1.分析FTP协议 2.分析DNS协议 3. 分析HTTP协议 二.分析要求 (1)ftp部分: 学习 Serv- ...

  5. 简单谈谈DNS协议

    DNS协议也可以称为DNS服务,全称是Domain Name System,即域名系统,和HTTP协议一样,也是一个位于应用层的协议(服务),它是基于运输层的UDP协议的,关于网络协议的分层介绍,见这 ...

  6. DNS协议详解

    DNS协议详解 简介 DNS(Domain Name System)域名系统,主要实现的功能是将域名转换成ip地址的一个服务.它是由一个分层的DNS服务器实现的分布式数据库,同时.他也是一个使得主机能 ...

  7. 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议

    摘要:     本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS      ...

  8. 自己动手实现DNS协议

    1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...

  9. 为什么 DNS 协议使用 UDP?只使用了 UDP 吗?

    尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...

  10. 利用WireShark进行DNS协议分析

    一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...

随机推荐

  1. jmeter控制器入门笔记一

    @@@@@@@@@@@@@@@ 千里之行 今天记录一下个人才使用控制器时的一些心得.逻辑控制器在jmeter中有很多种,个人根据官方解释理解的作用就是:通过控制器可以更好地控制请求的执行顺序.jmet ...

  2. string类型 C++

    (C++递归预习到了string类型,这个是处理字符串的一个非常好用的东西,在C里面没有.今天来学习一下) 顺便推荐一个很不错的网站:http://c.biancheng.net/view/400.h ...

  3. OpenFeign使用步骤

    1. 新建 cloud-consumer-feign-order80 2. pom.xml <?xml version="1.0" encoding="UTF-8& ...

  4. Python file() 函数

    描述 file() 函数用于创建一个 file 对象,它有一个别名叫 open(),更形象一些,它们是内置函数.参数是以字符串的形式传递的.每组词 www.cgewang.com 更多文件操作可参考: ...

  5. PHP array_intersect_uassoc() 函数

    实例 比较两个数组的键名和键值(使用用户自定义函数比较键名),并返回交集: <?phpfunction myfunction($a,$b){if ($a===$b){return 0;}retu ...

  6. PHP rsort() 函数

    实例 对数组 $cars 中的元素按字母进行降序排序: <?php$cars=array("Volvo","BMW","Toyota" ...

  7. C/C++编程笔记:C++入门知识丨认识C++的函数和对象

    一. 本篇要学习的内容和知识结构概览 二. 知识点逐条分析 1. 混合型语言 C++源文件的文件扩展名为.cpp, 也就是c plus plus的简写, 在该文件里有且只能有一个名为main的主函数, ...

  8. 【02python基础-函数,类】

    1.函数中的全局变量与局部变量全局变量:在函数和类定义之外声明的变量.作用域为定义的模块,从定义位置开始到模块结束.全局变量降低了函数的通用性和可读性,要尽量避免全局变量的使用.全局边个两一般作为常量 ...

  9. CF1349F 【Slime and Sequences】part1

    由于本文过长,\(\LaTeX\) 炸了,分两篇,part2 题目描述 定义一个正整数序列为好序列,当且仅当如果某个数 \(k\) 出现过,那么一定有 \(k-1\) 在最后一个 \(k\) 的前面出 ...

  10. Surface Pro 6 遇到的一系列问题

    当屏幕很烫的时候,触摸屏会部分失灵,越烫越明显,但是 Surface Pen 仍然可以使用,建议这个时候关机,等它冷静了再开机 不过不排除更新导致的触控失灵(新的更新没有考虑到老的硬件,微软也许之后永 ...