TCP/IP详解——DNS 流量分析

发布时间:2023年12月17日

1. DNS 流量分析

1.1 DNS 基本概念

域名(Domain Name):是由一串用点分隔的名字组成的interne 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

DNS(网域名称系统,Domain Name System,有时也简称为域名):是因特网的一项核心服务,它作为可将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的巧问互联网,而不用去记住能够被机器直接读取的IP地址数串。提供主机名字和IP地址之间的转换

  • DNS提供了允许服务器和客户程序相互通信的协议。

  • 对DNS的访问是通过一个地址解析器(resolver)来完成的。

  • 解析器通常是应用程序的一部分。解析器并不像TCP/IP协议那样是操作系统的内核

域名服务主要是基于UDP实现的,服务器的端口号为==53==。

作用:为客户机提供域名解析,根据域名查出对应的 IP 地址。

DNS 系统

  • 作个比喻:域名是名字,IP地址是电话号码,域名服务器是电话簿。
  • 网络中的主机是使用IP地址来进行定位的。
  • IP地址难以记忆,需要用名称(www.baidu.com)来表示lP地址:220.181.111.188
  • IP化址改变后,域名不变,仍可访问。

1.2 DNS 系统特性

  • NIC负责分配顶级域和委派其他指定地区的域的授权机构。
  • 一个独立管理的DNS子树称为一个区域(zone)。一个常见的区域是一个二级域,如noao.edu。
  • 一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域中时,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将它们加到名字服务器的数据库中。这就是授权机构存在的必要性。
  • 一个区域的管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器。主、辅名字服务器的主要区别在于主名字服务器从磁盘文件中调入该区域的所有信息,而辅名字服务器则从主服务器调入所有信息。我们将辅名字服务器从主服务器调入信息称为区域传送
  • 当一个名字服务器没有请求的信息时,它将如何处理?它必须与其他的名字服务器联系。并不是每个名字服务器都知道如何同其他名字服务器联系。相反,每个名字服务器必须知道如何同根的名字服务器联系
  • 这样一个反复的过程:正在处理请求的名字服务器与根服务器联系,根服务器告诉它与另一个名字服务器联系。
  • DNS的一个基本特性是使用超高速缓存。

1.3 DNS 效率问题

随着互联网的快速扩张,主机数量迅速增加,导致域名的数量也急速增加,接踵而来的问题:

  1. 如何管理域名数据?
    • 超大规模的域名到IP的映射表,如何避免冲突?数据更新?
  2. 如何保证域名容易记忆?(用域名表示IP地址的初衷)

答案:树状的名字空间

  • 名字如同地址,机构,文件夹一样,由大到小,由整体到局部。
  • 通过某种机制,划分管理区块。

1.4 域名的组成

例:www.colasoft.com 级别最低的域名写在左边,级别最高的域名写在右边。.com为顶级域名,.colasoft是二级域名,www是三级域名。

image-20231115094126019

  • 国家顶级域名:cn,jp…

  • 商业顶级域名:com

  • 政府顶级域名:gov

  • 军事顶级域名:mil

  • 教育顶级域名:edu

1.5 域名解析系统

有域名结构还不行,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。

image-20231115095611593

1.5.1 域名解析过程

域名解析过程

  1. 主机向本地域名服务器的查询一般都是采用递归查询
  2. 本地域名服务器向根域名服务器的查询采用迭代查询

image-20231115095926570

如果本机的host中没有,就会去本地的DNS服务器查找,如果本地的DNS服务器中有就会告诉客户机。

如果本地的DNS服务器中没有就会去根服务器查找,根服务器并不会告诉ip地址是什么,而是会让你去查找,会去**.com的服务器中去查找。因为.com的服务器是查不到的所以要去baidu.com服务器中查找。找到后本地服务器会把www.baidu.com**域名所解析的ip地址存到本地的DNS缓存中,再向客户机发送地址。

image-20230713200245440

对于流量分析来讲,一般是在客户端抓包,可以看到递归查询的步骤。

1.6 DNS 记录种类

image-20231115102624397

1.7 DNS 的报文格式

1.7.1 DNS 报文中的基础结构部分

image-20231121162104297

这个报文是由12字节的首部4个长度可变的字段组成。

整个 DNS 格式主要分为 3 部分内容,即基础结构部分、问题部分、资源记录部分。

每个字段的含义:

  • 标识(identification):DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。

  • 标志(Flags):DNS 报文中的标志字段。

  • 问题数(Questions):DNS 查询请求的数目。

  • 资源记录数(Answer RRs):DNS 响应的数目。

  • 授权资源记录数(Authority RRs):权威名称服务器的数目。

  • 额外资源记录数(Additional RRs):额外的记录数目(权威名称服务器对应 IP 地址的数目)。

标志字段之后的4个16bit字段说明最后4个变长字段中包含的条目数。

  • 查询问题(Question):所查询的问题。
    • 对于查询报文,问题数通常是1,而其他3项为0。
    • 对于应答报文,回答数(即资源记录数)至少为1,之后的授权资源记录(即其他获取到的权威名字服务器)数和额外信息(即获取到的其他权威名字服务器对应的IP地址)数可以是0或非0。
  • 回答/资源记录部分(Answer):资源记录部分是指 DNS 报文格式中的最后三个字段,包括回答问题区域字段、权威名称服务器区域字段、附加信息区域字段。

基础结构部分中的标志字段(Flags)又分为若干个字段。

image-20231121201123540

标志字段中每个字段的含义如下:

  • QR(Response):1bit字段,查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。
  • Opcode:4bit字段。操作码。其中,0 表示标准查询(域名到IP地址);1 表示反向查询(IP地址到域名);2 表示服务器状态请求。
  • AA(Authoritative):1bit字段。授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
  • TC(Truncated):1bit字段。表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。
  • RD(Recursion Desired):1bit字段。期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
  • RA(Recursion Available):1bit字段。可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。
  • Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。
  • rcode(Reply code):4bit字段。返回码字段,表示响应的差错状态。
    • 当值为 0 时,表示没有错误;
    • 当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;
    • 当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;
    • 当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;
    • 当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;
    • 当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

1.7.2 DNS 查询报文中的问题部分

image-20231121201141803

该部分中每个字段含义如下:

  • 查询名(Domain Name):一般为要查询的域名,有时也会是 IP 地址,用于反向查询。

  • 查询类型(Type):DNS 查询请求的资源类型。通常查询类型为 A 类型,表示由域名获取对应的 IP 地址。

  • 查询类(Class):地址类型,通常为互联网地址,值为 1。

    image-20231121171321276

查询名是要查找的名字,它是一个或多个标识符的序列,每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符,计数字节的值必须是0~63的数,因为标识符的最大长度仅为63,如:

image-20231121170907017

1.7.3 DNS 响应报文中的资源记录部分

image-20231121170741418

资源记录格式中每个字段含义如下:

  • 域名(Domain Name):DNS 请求的域名。
  • 类型(Type):资源记录的类型,与问题部分中的查询类型值是一样的。
  • 类(Class):地址类型,与问题部分中的查询类值是一样的。
  • 生存时间(Time to Live):以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。它同时也可以表明该资源记录的稳定程度,稳定的信息会分配一个很大的值。
  • 资源数据长度(Data Length):资源数据的长度。
  • 资源数据:表示按查询段要求返回的相关资源记录的数据。

1.7.4 示例

下图显示,此DNS响应报文被封装在UDP数据报中,返回的两个回答除了IP地址不同外,其余是一样的,每个指针值为12,表示从DNS首部开始的偏移量:

image-20231121172041000

1.8 DNS 数据流量包

使用Wireshark抓包查看

发现只有两个包,是递归查询。

image-20231115102050448

DNS请求包

image-20231115102338639

DNS应答包

image-20231115102555410

使用OmniPeek抓包查看

image-20231121194945196

DNS请求包

image-20231121200343347

DNS应答包

image-20231121200555205
在这里插入图片描述

1.9 思考

DNS可以使用TCP作为传输协议进行交互吗

  • DNS名字服务器使用的熟知端口号无论UDP还是TCP都是53端口号。这意味着DNS均支持UDP和TCP访问。

  • 可以使用TCP,衡量效率后在查询时使用UDP,效率高速度快,使用TCP查询话打开网页速度慢三次握手四次挥手开销大。但在域名服务器同步数据时使用TCP更加可靠。因此DNS协议可以根据需要选择使用UDP或者TCP作为传输协议,以满足不同的网络环境的需求。

  • 区域传送使用TCP(因为数据量大,使用TCP效率高)。

文章来源:https://blog.csdn.net/weixin_58783105/article/details/135041318
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。