【协议基础】DNS协议概述&DNS抓包分析

目录

 

1.DNS(Domain Name System,域名系统)

1.1产生背景:

1.2.DNS概述

1.3域:

1.4域名结构:

2.DNS的工作原理:

2.1DNS的工作模式

递归解析---

迭代解析

2.2DNS工作原理示例

 

3.DNS常见的记录及作用

SOA:

A:

NS:

MX:

CNAME:

PTR:

4.DNS报文格式

4.1Header 报文头

4.2Question 查询字段

4.3Answer/Authority/Additional

5.抓包分析

5.1准备工作:

5.2查看数据包


1.DNSDomain Name System,域名系统)

1.1产生背景:

Internet网中连接着数量众多的主机,要让这些主机进行通信,需要有一套名字标识体系,让主机之间能够彼此找到对方,我们可以用多种方式进行主机标识,如使用主机名标识一台主机,当然,我们更多是用IP地址来标识计算机,主机在互联网上靠IP地址进行位置标识。

                 ▲ip地址于方便记忆的域名进行对应

internet的前身ARPAnet的年代,整个网络中只有几百台主机,所有主机信息以及主机名与地址的映射记录都存放在一个名为HOSTS.TXT的文件中。HOSTS.TXT从一台名为SRI-NIC的主机上分发到整个网络,这台主机由斯坦福研究院的网络信息中心负责维护。ARPAnet的管理员们通过电子邮件的方式将变更信息通知NIC,同时定期FTPSRI-NIC上,获得最新的HOSTS.TXT文件。

                ▲起初主机信息及主机名对应关系是人手动更新(HOSTS.TXT)

20世纪70年代束,整个ARPAnet只有200台主机。

 但是到了80年代,ARPAnet主机数量飞速增长,到80年代末期主机总数增加到10万台,这种人工更新的方式显然不再适用了。频繁更新HOSTS.TXT造成了网络流量和处理器负载增加,并且名字冲突和数据一致性维护越来越困难。

为了解决这一问题,网络管理者们希望找到一种合理的方法来解决主机信息的维护问题,既能分散管理,又能及时进行全网更新和同步,并且采用层次化的名字空间,保证主机名的全网唯一性。1984年,南加州大学信息科学所的Paul Mockapnris发布了描述DNS(英文全称为Domain Name System,中文意思是域名系统)RFC 882RFC 883,就是最初的DNS规范,DNS系统诞生了。

                   ▲DNS产生发展过程

1.2.DNS概述

DNSDomain Name System,域名系统)是互联网上是一种层次结构的基于域的命名方式和实现这种命名方式的分布式数据库,其中记录了各种主机域名与 IP 地址的对应关系,能够使用户更加方便的访问网站。用户可以直接输入域名登录网站,DNS会将域名解析成IP地址,然后用户根据这个IP地址找到相应的网站,从而访问到域名对应的网站,通过主机名获取到主机名对应IP地址的过程叫作域名解析。

 

1.3域:

  • 域是一个逻辑上的概念,在初始瓜分互联网的时候,Internet组织将世界上的计算机划分为了若干个大类,如comgovorgneteducnus等等
  • 每一个大类我们称之为一个域
  • 在每个大类里面划分出比较小一点的,成为子域,域是可以嵌套的,大域包含小域,小域可以包含更小的域
  • 域名:在每个域里面都有很多主机,每个主机都有一个主机名,我们在这个主机名后面冠上主机所在域的名称成为该主机在Internet网络上的域名。

 

  • DNS协议建立在UDP协议之上,在某些情况下可以切换到TCP,使用端口号53,是一种客户/服务器服务模式。

1.4域名结构:

域名是一个树状层次结果,联机分布式数据库系统,最高的根域名服务器维护最高级别域名服务器记录,后者维护下一级域名服务器的记录。

                                                 ▲分层式DNS结构 

域名服务器:负责名字到地址的解析。

域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。

根据域名结果可以把域名服务器划分为以下四种类型:

(1)根域名服务器;

(2)顶级域名服务器;

(3)权威域名服务器;

(4)本地域名服务器。

 

每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)

如果根据DNS服务器管理的区域地址数据的来源不同,DNS 系统可以分为不同的类型。在同一台 DNS服务器中,相对于不同的区域来说,也拥有不同的身份。常见的几种类型如下

  • 主域名服务器:维护某一个特定 DNS 区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。
  • 从域名服务器:与主域名服务器提供完全相同的 DNS 解析服务,通常用于 DNS 服务器的热备份。对客户机来说,无论使用主域名服务器还是从域名服务器,查询的结果都一样的。关键区别在于,从域名服务器提供的解析结果不是由自己决定的, 而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置, 以便服务器能自动同步区域的地址数据库。
  • 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定其他 DNS 服务器作为解析来源。

2.DNS的工作原理:

2.1DNS的工作模式

       DNS 查询以各种不同的方式进行解析,客户机可通过使用从以前查询获得的缓存信息就地应答查询,DNS 服务器也可使用其自身的资源记录信息缓存来应答查询。但更多是使用下列两种方式:

  • 递归解析---

逐层解析----

DNS服务器收到一个域名解析请求时,如果所要检索的资源记录不在本地,DNS服务器将和自己的上一层服务器交互,获得最终的答案,并将其返回给客户;

  • 迭代解析

本地服务没有,告诉客户可以解析的DNS服务器地址---

DNS服务器收到解析请求,首先在本地的数据库中查找是否有相应的资源记录,如果没有,则向客户提供另外一个DNS服务器的地址,客户负责把解析请求发送给新的DNS服务器地址;

 

2.2DNS工作原理示例

1. 当在浏览器中输入 URL 时,浏览器会先检查自己的缓存是否有域名 IP 的映射关系,有则直接使用 IP 进行通信;
2. 如浏览器没有缓存,则操作系统检查本地 Hosts 文件是否有域名 IP 的映射关系,有则使用 IP 进行通信;
3. 如果 hosts 没有这个域名的映射,则查找本地 DNS 解析器缓存是否有映射关系,有则直接返回完成域名解析;
4. 如果还未找到映射关系,首先会找 TCP/IP 参数中设置的首选 DNS 服务器,也就是常称的本地 DNS 服务器,如果服务器已缓存了映射关系,则使用这个 IP 地址映射返回完成域名解析,此时解析不具有权威性;
5. 如果本地 DNS 服务器缓存已经失效,进行递归查询。

 

3.DNS常见的记录及作用

DNS记录类型

域名和IP之间的对应关系,称为“记录”(record)。根据记录使用的目的不同,又分为不同的类型,常见的DNS记录类型如下:

SOA

Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;

A

地址记录(Address),返回域名指向的IP地址。----域名和IP的绑定记录

NS

域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。---想解析这个域名去找另外一个域名可解析,另外一个域名的记录为A格式;

MX

邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。

CNAME

规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。---两个域名对应的是同一个主机,可以把A域名指向B,搭配A记录使用;

PTR

逆向查询记录(Pointer Record),只用于从IP地址查询域名。

 

4.DNS报文格式

请求报文以及响应报文具有统一的格式

  • Header 报文头
  • Question 查询的问题
  • Answer 应答
  • Authority 授权应答
  • Additional 附加信息
  +--+--+--+--+--+--+--+
  |        Header      |
  +--+--+--+--+--+--+--+
  |      Question      |
  +--+--+--+--+--+--+--+
  |      Answer        |
  +--+--+--+--+--+--+--+
  |      Authority     |
  +--+--+--+--+--+--+--+
  |      Additional    |
  +--+--+--+--+--+--+--+

4.1Header 报文头

ID2个字节(16bit),标识字段,客户端会解析服务器返回的DNS应答报文,获取ID值与请求报文设置的ID值做比较,如果相同,则认为是同一个DNS会话。
FLAGS2个字节(16bit)的标志字段。包含以下属性:

  • QR0表示查询报文,1表示响应报文;
  • opcode: 通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求),[3,15]保留值;
  • AA: 表示授权回答(authoritative answer)-- 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器;
  • TC: 表示可截断的(truncated)--用来指出报文比允许的长度还要长,导致被截断;
  • RD: 表示期望递归(Recursion Desired) -- 这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的;
  • RA: 表示支持递归(Recursion Available) -- 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询;
  • Z : 保留值,暂未使用;
  • RCODE: 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下:
    • 0 : 没有错误。
    • 1 : 报文格式错误(Format error) - 服务器不能理解请求的报文;
    • 2 : 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求;
    • 3 : 名字错误(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在;
    • 4 : 没有实现(Not Implemented) - 域名服务器不支持查询类型;
    • 5 : 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答.比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer);
    • [6,15] : 保留值,暂未使用。


QDCOUNT: 无符号16bit整数表示报文请求段中的问题记录数。
ANCOUNT: 无符号16bit整数表示报文回答段中的回答记录数。
NSCOUNT: 无符号16bit整数表示报文授权段中的授权记录数。
ARCOUNT: 无符号16bit整数表示报文附加段中的附加记录数。

    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                      ID                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |QR|  opcode   |AA|TC|RD|RA|   Z    |   RCODE   |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QDCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    ANCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    NSCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    ARCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

4.2Question 查询字段

  • QNAME 无符号8bit为单位长度不限表示查询名(广泛的说就是:域名).
  • QTYPE 无符号16bit整数表示查询的协议类型.
  • QCLASS 无符号16bit整数表示查询的类,比如,IN代表Internet.
    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                     ...                       |
  |                    QNAME                      |
  |                     ...                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QTYPE                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QCLASS                     |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

4.3Answer/Authority/Additional

这3个字段的格式都是一样的。

  • NAME 资源记录包含的域名.
  • TYPE 表示DNS协议的类型.
  • CLASS 表示RDATA的类.
  • TTL 4字节无符号整数表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存。
  • RDLENGTH 2个字节无符号整数表示RDATA的长度
  • RDATA 不定长字符串来表示记录,格式根TYPE和CLASS有关。比如,TYPE是A,CLASS 是 IN,那么RDATA就是一个4个字节的ARPA网络地址。
    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    NAME                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    TYPE                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    CLASS                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    TTL                        |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    RDLENGTH                   |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    RDATA                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 
 

5.抓包分析

5.1准备工作:

(1)在window系统cmd输入 ping www.baidu.com;

(2)开启wirshark找到正在访问互联网的网卡,筛选DNS包,开始抓包;

(3)然后在命令行输入回车确定ping,等待过程完毕,停止抓包;

(4)已知主机的私有IP为:      DNS服务器为:   ;

5.2查看数据包

使用DNS过滤器后可看到两个DNS包,如下;

打开第一个包(请求) 

分析:

1.可以看到DNS是基于UDP-53端口的/DNS使用UDP协议,是传输层协议;

2.网络层可以看到,源IP为主机IP,目标IP为本地DNS服务器IP;

3.Heander--报文头,

4.Question--请求:

打开第二个包(回应):

头部与请求已近分析过了,这里仅做展示,不做分析,重点分析应答部分;

分析:可以看到百度的应答了三个,IA--表示英特网;

第一个:type:CNAME(规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,就是告诉你向解析www.baiu.com这个域名的ip,去访问www.a.shifen.com这个域名);

第二个:type:A(地址记录(Address),返回域名指向的IP地址,域名与IP对应),www.a.shifen.com这个域名的IP是:36.152.44.95;liangg

第三个:type:A(地址记录(Address),返回域名指向的IP地址,域名与IP对应),www.a.shifen.com这个域名的IP是:36.152.44.96;

经过验证:www.a.shifen.com无法访问到www.baidu.com;

但36.152.44.95/36.152.44.96均可访问到www.baidu.com;

如有错误,欢迎评论区指正,交流学习将万分感谢;

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值