DNS协议

介绍

IP地址对于人来说很难记忆区分,但域名却很方便记忆,所以要将域名与IP地址对应起来,就催生了DNS。DNS不仅提供域名到IP的映射服务,还能提供主机别名、邮件服务器识别、负载均衡服务。

协议

DNS属于应用层协议,通常由HTTP、SMTP、FTP等协议使用,占用53端口。

交互流程

dns_protocol

  • 客户端发送一个包含域名的请求给DNS服务器(DNS查询报文)
  • DNS服务器查询到域名对应的IP地址后,给客户端一个应答回复(DNS应答报文),回复中包含客户端所请求域名对应的IP地址
  • 客户端收到回复后,取出IP地址,与该地址服务器建立链接

协议格式

DNS协议分为查询协议和应答协议,这两种协议的格式是一样的。

dns-protocol-format

DNS协议包括两部分,协议头和协议体

协议头

DNS协议头由固定的12个字节组成

  • ID
    由程序分配的16位标识符,该标识在查询时产生,应答报文中该ID与对应的查询请求ID相同。
  • QR
    表示该报文类型,“0”表示查询,“1”表示应答
  • OPcode
    表示查询种类,只在查询协议中作用。“0”为标准查询(QUERY),“1”为反相查询(IQUERY),“2”为服务器状态请求(STATUS),“3”~“15”为保留
  • AA
    授权应答的标志位。该位在应答报文中有效,“1”表示名字服务器是权限服务器
  • TC
    截断标志位。1表示响应已超过512字节并已被截断。(截断和UDP协议有关)
  • RD
    期望递归标志,作用在查询报文中,该位为“1”表示客户端希望得到递归应答
  • RA
    递归可用标志,作用在应答报文中,该位为“1”表示可以得到递归应答
  • zero
    用“0”占位,保留字段
  • Rcode
    返回码,在应答报文中出现,“0”表示无差错,“1”表示格式差错,“2”表示问题在域名服务器上,“3”表示域参照问题,“4”表示查询类型不支持,“5”表示在管理上被禁止,“6”~“15”预留
  • QD Count
    查询信息的数量
  • AN Count
    应答信息的数量
  • NS Count
    授权信息的数量
  • AR Count
    附加信息的数量

协议体

查询段

描述查询信息

  • QNAME
    表示需要查询的域名,该字段为变长字段,用标签序列表示域名(如:www.baidu.com 显示为 03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 00)
  • QTYPE
    表示查询资源的类型,详细请见下文资源类型列表
  • QCLASS
    表示查询网络类别,“1”表示Internet互联网系统(助记“IN”),“CH”表示Chaos

应答段、授权段、附加段

对应答信息、授权信息、附加信息的描述

  • NAME
    资源记录对应的域名,该字段为变长字段,格式同QNAME
  • TYPE
    同QTYPE
  • CLASS
    同QCLASS
  • TTL
    表示资源记录的生命周期(以秒为单位),一般用于当地址杰西程序读取资源记录后决定保存及使用缓存数据的时间
  • RDLENGTH
    表示资源数据的长度
  • RDATA
    资源数据,按查询段要求返回的相关资源记录数据。
    若其TYPE为A,则返回4字节的IP地址;
    若其TYPE为NS,则返回授权域名服务器的域名;
    若其TYPE为CNAME,则返回规范名或与别名对应的真实名称。

资源类型列表

助记符 说明
A 指定主机名(或域名)对应的IPv4地址记录
AAAA 指定主机名(或域名)对应的IPv6地址记录
CNAME 别名 如:dig www.baidu.com, www.baidu.com.的cname就是www.a.shifen.com.
PTR 指针记录,用于将一个IP地址映射到对应的主机名,也可以看成是A记录的反向,通过IP访问域名
MX 邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置
TXT 一般指为某个主机名或域名设置的说明,没啥用,可忽略
SRV 记录了哪台计算机提供了哪个服务
NS 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录
  • SRV
    格式:优先级 权重 端口 服务的名字.协议的类型.域名
    eg:
    1
    2
    3
    4
    5
    6
    _http._tcp.example.com. SRV 10 5 80. www.example.com
    _http - 服务名
    _tcp - 协议
    10 - 优先级
    5 - 权重
    80 - 端口

内部流程

dns-work-flow

参考&鸣谢