|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
DNS组件 更多...
类 | |
| class | dns_client |
| DNS客户端类 更多... | |
| struct | dns_record |
| DNS资源记录结构 更多... | |
| struct | dns_query_result |
| DNS查询结果结构 更多... | |
| struct | dns_header |
| DNS消息头部结构 更多... | |
枚举 | |
| enum class | dns_opcode : uint8_t { dns_opcode::QUERY = 0 , dns_opcode::IQUERY = 1 , dns_opcode::STATUS = 2 , dns_opcode::NOTIFY = 4 , dns_opcode::UPDATE = 5 } |
| DNS操作码枚举 更多... | |
| enum class | dns_query : uint16_t { dns_query::INTERNET = 1 , dns_query::CHAOS = 3 , dns_query::HESIOD = 4 , dns_query::ANY = 255 } |
| DNS查询类型枚举 更多... | |
| enum class | dns_response : uint8_t { dns_response::NON_ERROR = 0 , dns_response::FORMAT_ERROR = 1 , dns_response::SERVER_FAILURE = 2 , dns_response::NAME_ERROR = 3 , dns_response::NOT_IMPLEMENTED = 4 , dns_response::REFUSED = 5 } |
| DNS响应码枚举 更多... | |
DNS组件
本模块提供了 DNS(域名系统)协议的完整客户端实现,支持消息构建、查询发送、 响应解析、缓存管理以及多种记录类型的查询。
本实现严格遵循以下 IETF RFC 规范与相关标准:
DNS 核心协议规范:
DNS 扩展与更新:
DNS 记录类型定义:
DNS 传输协议:
IPv6 地址记录:
邮件交换记录:
服务定位记录:
根据 RFC 1035 §4.1,DNS 消息由以下部分组成:
| 部分 | 大小 | 说明 |
|---|---|---|
| Header | 12 字节 | 包含 ID、标志位、各段计数 |
| Question | 可变 | 查询的域名、类型、类 |
| Answer | 可变 | 回答的资源记录 |
| Authority | 可变 | 指向权威名称服务器的资源记录 |
| Additional | 可变 | 附加信息记录(如 EDNS0) |
**头部标志位**(RFC 1035 §4.1.1):
| 位偏移 | 名称 | 说明 |
|---|---|---|
| 0 | QR | 0=查询,1=响应 |
| 1-4 | OPCODE | 操作码:0=QUERY, 1=IQUERY, 2=STATUS, 4=NOTIFY, 5=UPDATE |
| 5 | AA | 权威回答 |
| 6 | TC | 截断标志(响应被截断,需使用 TCP 重试) |
| 7 | RD | 期望递归查询 |
| 8 | RA | 递归可用 |
| 9-11 | Z | 保留位(必须为0) |
| 12-15 | RCODE | 响应码:0=无错误, 1=格式错误, 2=服务器失败, 3=名称错误等 |
根据 IANA DNS 参数注册表,本模块支持以下常见记录类型:
| 类型 | 值 | RFC 引用 | 说明 |
|---|---|---|---|
| A | 1 | RFC 1035 | 主机地址(IPv4) |
| NS | 2 | RFC 1035 | 权威名称服务器 |
| CNAME | 5 | RFC 1035 | 规范名称(别名) |
| SOA | 6 | RFC 1035 | 授权区域起始 |
| PTR | 12 | RFC 1035 | 域名指针(反向查询) |
| MX | 15 | RFC 1035 | 邮件交换 |
| TXT | 16 | RFC 1035 | 文本字符串 |
| AAAA | 28 | RFC 3596 | IPv6 地址 |
| SRV | 33 | RFC 2782 | 服务定位器 |
**操作码(OPCODE)**(RFC 1035 §4.1.1,RFC 1996,RFC 2136):
| 值 | 名称 | 说明 |
|---|---|---|
| 0 | QUERY | 标准查询 |
| 1 | IQUERY | 反向查询(已废弃) |
| 2 | STATUS | 服务器状态请求 |
| 4 | NOTIFY | 区域变更通知 |
| 5 | UPDATE | 动态更新 |
**响应码(RCODE)**(RFC 1035 §4.1.1,RFC 6891 扩展):
| 值 | 名称 | 说明 |
|---|---|---|
| 0 | NoError | 无错误 |
| 1 | FormErr | 格式错误 |
| 2 | ServFail | 服务器失败 |
| 3 | NXDomain | 不存在的域名 |
| 4 | NotImp | 未实现 |
| 5 | Refused | 拒绝查询 |
根据 RFC 1035 §3.2.4:
| 值 | 名称 | 说明 |
|---|---|---|
| 1 | IN | Internet(最常用) |
| 3 | CH | CHAOS 类 |
| 4 | HS | Hesiod |
| 255 | ANY | 任何类(通配) |
根据 RFC 1035 §4.2 和 RFC 7766:
根据 RFC 1035 §7.2 的 TTL 规范:
根据 RFC 1035 §3.5,PTR 记录用于 IP 地址到域名的映射:
|
strong |
DNS操作码枚举
定义DNS消息的操作类型,指定查询或响应的目的。
| 枚举值 | |
|---|---|
| QUERY | 标准查询 |
| IQUERY | 反向查询 |
| STATUS | 服务器状态请求 |
| NOTIFY | 区域通知 |
| UPDATE | 区域更新 |
在文件 dns_message.hpp 第 181 行定义.
DNS查询类型枚举
定义DNS查询的类别,指定查询的协议族或类型。
| 枚举值 | |
|---|---|
| INTERNET | Internet类 |
| CHAOS | CHAOS类 |
| HESIOD | HESIOD类 |
| ANY | 任何类 |
在文件 dns_message.hpp 第 195 行定义.
|
strong |
DNS响应码枚举
定义DNS服务器返回的响应状态码。
| 枚举值 | |
|---|---|
| NON_ERROR | 无错误,查询成功 |
| FORMAT_ERROR | 格式错误,服务器无法解析查询 |
| SERVER_FAILURE | 服务器失败,无法处理查询 |
| NAME_ERROR | 名称错误,域名不存在 |
| NOT_IMPLEMENTED | 未实现,服务器不支持该查询类型 |
| REFUSED | 拒绝,服务器拒绝执行查询 |
在文件 dns_message.hpp 第 208 行定义.