计算机网络协议分析 第11课 DNS
第10章域名系统DNS
10.3 Nslookup命令
Nslookup [- option] [hostname] [server]
向某个DNS服务器发送DNS查询报文
跟浏览器访问网站区别,nslookup命令可以用server一项改变目标服务器,若这项不填,默认是本地服务器。
例如:
- nslookup www.baidu.com(向百度的DNS服务器发送报文)
- nslookup(查看本地DNS服务器)
- nslookup -qt=ns www.baidu.com
- nslookup -qt=ptr 210.34.80.1
- nslookup -qt=mx www.baidu.com(查询其他资源类型资源记录)
10.4 DNS报文
- 使用UDP:
- 使用A类型查询某个域名时
- DNS响应报文长度小于512字节时
- 使用TCP:
- DNS查询报文长度大于512字节时
- 主/辅域名服务器之间进行区域传输
DNS报文结构
- 问:用于匹配查询报文和响应报文的字段是?
- 答:标识字段可以唯一地标识一个DNS报文并匹配请求和响应
- 问:查询报文中“回答数”字段的值是?
- 答:查询只有首部、问题区,其他部分都为0,于是这里的回答数为0
- 问:响应报文中“回答数”=“问题数”吗?
- 答:不对,这个问题类似于1个域名可以对应多个IP
- 问:响应报文中“问题区”=查询报文中“问题区”吗?
- 答:对,这里的内容一对的查询响应报文是完全相同的
- 问:如何区分是查询报文还是响应报文?
- 答:可以有多种方式,比如查看回答数等字段是否有值,参数、标识字段的值也可以看出
参数
- 0操作位(QR):查询为0,响应为1
- 1-4查询类型(Option):标准查询为0,反向查询为1,还有很多空间暂时还没使用
- 5授权(AA仅应答):0响应由授权服务器返回,1响应由非授权服务器返回(例如DNS缓存服务器)
- 6截断(TC仅应答):超过512字节时有用,当为1时,于是让源主机从UDP报文改为重新发一个TCP报文
- 7需要递归(RD):当为1时表示客户希望得到递归回答,不需要一层层服务器查询过去,直接拿到结果
- 8递归结果(RA仅应答):当为1时表示DNS服务器支持递归
- 9-11未使用,全0
- 12-15查询结果(Rcode):表示响应中的差错状态
问题区
查询域名Name:长度+字符串
例如:3www5baidu3com0
问:这个问题区的长度?
答:20字节
回答区
- 生存时间TTL:资源记录信息在缓存中的有效秒数
- 长度Data Length:指“资源数据区”的长度
- 资源数据区Data:对查询的回答
问1:回答数是多少?
答:3个
问2:是否存在重复数据?
答:是,最后一行以及下面没显示的数据于第2个回答重复了
域名压缩
- 回答区的域名是问题区中域名的重复
- 重复部分用偏移指针(2字节)表示
- 如果回答区前2位是
- 11(压缩):接下来14位为偏移指针,指向域名的存放位置(指重复部分从何开始)
- 00(无压缩):接下来6位为域名计数值(域名第1部分字符长度)
管理机构区和附加信息区
- 管理机构区:包含一个或多个权限域名服务器信息
- 附加信息区:提供附加信息,如:管理机构中域名服务器对应的IP地址
10.5 有关DNS的讨论
- 域名注册
域名注册需提交域名和IP地址,且每年缴费(例如腾讯云,阿里云) - DDNS:动态更新DNS服务器上域名和IP地址的对应关系
- DNS缓存污染
- 攻击方可假冒任何一个应答方:递归服务器——根服务器——com.顶级服务器——baidu.com.的权限服务器,给请求方发送一个伪造的响应(含伪造的IP地址)
- DNS缓存中错误的记录将随着攻击者设定的TTL进行存活
- 客户端无法正常访问网站,或客户端请求重定向到伪造的网站
- DNSsec(DNS安全扩展):采用基于公钥的数字签名,由数据所有者对DNS资源记录进行签名
- 每一个DNS区均包含一个公钥私钥对
- DNS区所有者使用该驱虎的私钥对区域内的DNS数据进行签名
- 该区域的公钥在区域内公开发布
- 既能验证数据来源,也可以确保数据完整性
上一课:第10课 DHCPv6
下一课:第12课 TCP