DNS协议
0x0 DNS封装和报文格式
- DNS:域名解析协议
- DNS = MAC + IP + UDP + DNS报文
- 事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。
- 标志:DNS 报文中的标志字段。
- QR(Response):查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。
- Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。
- AA(Authoritative):授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
- TC(Truncated):表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。
- RD(Recursion Desired):期望递归。如果该位为 0,且被请求的域名服务器没有一个授权回答,它将返回一个能解答该查询的其他域名服务器列表。这种方式被称为迭代查询。
- RA(Recursion Available):支持递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。
- Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。
- rcode(Reply code):返回码字段,表示响应的差错状态。
- 当值为 0 时,表示没有错误;
- 当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;
- 当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;
- 当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;
- 当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;
- 当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
- 问题计数:DNS 查询请求的数目。
- 回答资源记录数:DNS 响应的数目。
- 权威名称服务器计数:权威名称服务器的数目。
- 附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。
0x1 DNS协议使用的场景(why?)
- DNS和ARP类似,当我要访问的一个域名时,我只知道网址,但是我不知道IP是多少,那我就无法进行IP包头的封装;此时我就要使用DNS协议向DNS服务器请求域名所对应的IP
0x2 DNS如何工作的(how?)
- 当电脑需要使用知道某个域名对应的IP地址时,
- 它会先查询本地的hosts文件,
- 再查看PC本地dns缓存
- 本地域名服务器
- 本地域名服务器的缓存
- 当经过以上步骤都无法找到域名对应的IP后,就会进行迭代查询
- IPV4根域13台(美国):顶级名字+地址
- 顶级域名:二级+地址
- 二级:三级+地址
- 三级:四级+地址
- 四级->记录了www.baidu.com的IP地址
- 当经过迭代查询得到了IP后再返回给主机,称此过程为递归查询
0x3 DNS具体是怎么做的-抓包分析(what?)
0x3-1 正常访问
- 主机访问www.lcy.com的DNS请求
- 本地域名服务器的DNS应答
0x3-2 非正常访问
- 主机访问不存在的域名www.null.com的DNS请求
- 本地域名服务器的DNS应答
0x4 一些补充
- A记录
- 它是域名和IP地址的对应关系,表现形式为 www.contoso.com 192.168.1.1 这就是一个A记录!可以作为低成本的负载均衡的解决方案,比如说,www.contoso.com 可以创建多个A记录,对应多台物理服务器的IP地址,可以实现基本的流量均衡!)
- NS记录
- 哪个服务器可以解析域名,用来迭代的记录,找根域->顶级域名
- 根域名、顶级、二级是NS记录
- 二级没有NS记录吗?
- 针对单个网站的查询,只有最下面一级存在A记录
- SOA记录
- NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器呢,NS并没有说明,这个就要看SOA记录了,SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是主要的服务器!
- 一个IP可以对应多个域名吗?
- 可以,电信的一台数据中心的服务器上,它可能存放了10个网站,但是每个网站的域名是唯一的。
- 安全隐患:旁站攻击
- 一个域名可以对应多个IP吗?
- 可以,财大气粗的阿里巴巴
- 反向DNS:已知IP查域名类似RARP,旁站入侵