DNS
RFC 1034
- 无状态性:DNS设计之初为了考虑到传输的性能,采用UDP协议,带来高效性能的同时也因其缺乏验证机制,导致DNS服务器容易受到缓存中毒攻击。
- 分区:DNS将域名空间划分为多个区域,每个区域由一个或多个DNS服务器负责管理,实现分布式管理。
- 域名解析:DNS通过递归查询和迭代查询两种方式实现域名解析,其中递归查询由客户端发起,迭代查询由DNS服务器之间相互协作完成。
RFC 1035
- TCP 回退:当响应包超过512字节时,DNS服务器会自动切换到TCP协议进行传输,以确保数据完整性和可靠性。
DNS 服务器分类
- 递归域名解析服务器:用户首先接触到的DNS服务器,例如Google的8.8.8.8
- 根域名服务器:互联网根服务器,负责管理顶级域名的DNS服务器
- 顶级域名服务器:负责管理顶级域名的DNS服务器,例如.com、.org等。
- 权威域名服务器:负责管理特定域名的DNS服务器,例如www.example.com的DNS服务器
DNS 报文结构
| 组成部分 | 描述 |
|---|---|
| Header | 固定12字节,包含报文标识、标志位及资源记录数量统计。 |
| Question | 可变长度,定义查询目标(域名、类型和类)。 |
| Answer | 资源记录(RR),直接回答查询问题的结果(如IP地址)。 |
| Authority | 资源记录,指向权威DNS服务器(如NS记录)。 |
| Additional | 资源记录,提供补充信息(如权威服务器的IP地址)。 |
Header
| 字段名 | 长度 | 描述 |
|---|---|---|
| ID | 16位 | 随机生成的交易ID,用于匹配请求与响应。 |
| QR | 1位 | 报文类型:0表示查询,1表示响应。 |
| OPCODE | 4位 | 查询类型:0(标准查询)、1(反向查询)、2(服务器状态请求)等。 |
| AA | 1位 | 仅响应有效,表示响应来自权威服务器。 |
| TC | 1位 | 截断标志:若为1,表示报文因超长被截断,需改用TCP传输。 |
| RD | 1位 | 递归请求:若为1,要求服务器递归解析。 |
| RA | 1位 | 递归可用:响应中指示服务器是否支持递归。 |
| Z | 3位 | 保留位,必须置0。 |
| RCODE | 4位 | 响应码:0(无错误)、1(格式错误)、2(服务器故障)等。 |
| QDCOUNT | 16位 | 问题部分的问题数量(通常为1)。 |
| ANCOUNT | 16位 | 回答部分的资源记录数。 |
| NSCOUNT | 16位 | 权威部分的资源记录数。 |
| ARCOUNT | 16位 | 附加部分的资源记录数。 |
名词解释
- TLD:顶级域名(Top-Level Domain)