第14章 DNS:域名系统
14.1 引言
DNS提供主机名和IP地址之间的转换。
- 分布式数据库
- 解析器(resolver)处理查询
- BIND是最常用实现
14.2 DNS基础
域名结构
- 根(root)
- 顶级域(.com、.edu、.org等)
- 二级域(noao.edu)
- 子域(tuc.noao.edu)
顶级域
| 域 | 用途 |
|---|---|
| .com | 商业 |
| .edu | 教育 |
| .gov | 政府 |
| .mil | 军事 |
| .org | 组织 |
| .net | 网络 |
| .int | 国际 |
授权区域(Zone)
- 独立管理的DNS子树
- 主名字服务器 + 辅助名字服务器
14.3 DNS的报文格式
首部(12字节)
| 字段 | 说明 |
|---|---|
| 标识 | 匹配请求和响应 |
| 标志 | QR、opcode、AA、TC、RD、RA、rcode |
| 问题数 | 通常为1 |
| 回答数 | - |
| 授权数 | - |
| 附加数 | - |
标志字段
- QR:0=查询,1=响应
- RD:期望递归
- RA:可用递归
- AA:授权回答
问题部分
- 查询名(QNAME):可变长度,以0结尾
- 查询类型(QTYPE)
- 查询类(QCLASS)
资源记录(RR)
- 域名
- 类型(A、NS、CNAME、PTR、MX等)
- 类(IN=Internet)
- 生存时间(TTL)
- 资源数据长度
- 资源数据
14.4 一个简单的例子
1 0.0 client > server: 1+ A? gemini.tuc.noao.edu. 2 0.29 server > client: 1* 2/0/0 A 140.252.1.11
text
- 1+:标识符1,RD标志
- A?:查询类型A
- 1*:授权回答
14.5 指针查询
- 给定IP地址返回域名
- 使用
in-addr.arpa域 - 示例:
34.13.252.140.in-addr.arpa
主机名检查
- 收到查询后,解析器自动验证
- gethostbyaddr 返回前验证地址
14.6 资源记录
| 类型 | 说明 |
|---|---|
| A | IP地址 |
| PTR | 指针记录 |
| CNAME | 规范名字(别名) |
| HINFO | 主机信息 |
| MX | 邮件交换记录 |
| NS | 名字服务器 |
MX记录示例
foo.com MX 10 relay1.uu.net foo.com MX 20 relay2.uu.net
text 优先值越小越优先
14.7 高速缓存
- 名字服务器维护高速缓存
- 减少DNS通信量
- 生存时间(TTL)控制缓存时间
14.8 用UDP还是用TCP
- 默认使用UDP(端口53)
- 响应超过512字节时使用TCP
- 区域传送使用TCP
14.9 另一个例子
Rlogin连接时的DNS查询序列:
- A查询(客户→根服务器)
- 授权NS记录(根→客户)
- A查询(客户→授权服务器)
- A应答(授权服务器→客户)
- TCP连接建立
- PTR查询(服务器→根)
- PTR授权(根→服务器)
- PTR查询(服务器→客户NS)
- PTR应答
- A查询(验证主机名)
- A应答
14.10 小结
DNS提供主机名↔IP地址转换。使用层次结构和分布式数据库,支持高速缓存和多种资源记录类型。