DNS Project
2018-05-09
From DNS Protocol to DNS Program
• DNS系统的Hierarchicalstructure程序中的实体 • DNS解析过程实体间的通信过程
• ResourceRecord定义server维护的数据结构
• DNS packet format定义packet的数据结构定义
DNS系统的Hierarchical structure 程序中的实体
Domain Namespace – the hierarchical structure Unnamed root
Top level arpa domains
2nd level domains in-addr
59
64
166
com
edu gov
mit
cs
int
mil
net
org
ae
… cn … zw
edu
bupt
cs
xx xx.cs.mit.edu Generic domains
cs.bupt.edu.cn
Country domains
200
4
200.166.64.59.in-addr.arpa
Name Servers
- Name servers are the repositories of information that make up the domain database.
- The database is divided up into sections called zones, which are distributed among the name servers. A zone may be one or more domains or even a sub-domain
- Each name server handles one or more zones. And the essential task of a name server is to answer queries using data in its zones.
• 实验要求
– 至少支持4个顶级域,至
少实现三级域名的解析。
– 4个顶级域名:中国、组 织、商业、美国
– 二-三级域名:自定义 (例如:教育.中国,北 邮.教育.中国)
– DNSserver的部署架构 可参考右图的示例
root
中国 美国 商业 组织
互联网 教育 政府 微软 工程任
务组
5
DNS解析过程 实体间的通信过程
Mapping Domain Names to Addresses – example of iterative resolution
7
DNS Resolver
1 2
3
UDP
4
8 TCP
UDP
7
Local DNS Server
6
UDP
5
Root DNS Server
这是不存在cache的情况,每一步都可能由于cache了查 询结果而得到优化
2nd DNS Server
• 实验要求
– 传输层协议:
- – client与local DNS server之间:TCP;
- – DNS server之间:UDP;
TLD DNS Server
每一段的通信,请参考 课程中关于Socket编程 的课件和实验
127.0.0.3: 53
127.0.0.5: 53
127.0.0.2: 临时端口
UDP
DNS Resolver
127.0.0.1: 临时端口 TCP
127.0.0.2: 53
127.0.0.2: 临时端口
Local DNS Server
127.0.0.2:
临时端口
UDP
127.0.0.4: 53
UDP
Root DNS Server
TLD DNS Server
TLD DNS Server
Local DNS Server的流程示例
开始
创建DNS请求 报文
初始化localserver (建立、绑定socket)
向其他server 发送 U DP报文
监听DNS服务端口
采用 迭代查 询方 式,逐级查询, 直到 域名被 解析 为止 (rootDnsServer -> tldDnsServer -> 2ndDnsServer -> ……)
是
等待接收响应 报文
否
接受TCP连接请求 接收并解析DNS报文 提取QueryName和QueryType 查询本地缓存
从其他server接 收UDP报文
关闭TCP连接
创建查询失败 DN S报文
否 是否获取到其他 server的IP地址
解析DNS报文
否 是否为请求的 查询结果?
本地缓存 查询到?
是
创建查询成功 DNS响应报文
是
向客户端发送 DNS响应报文
Resource Record定义 server维护的数据结构
Resource Record
- Each domain in the DNS has one or more Resource Records (RRs), which are fields that contain information about that domain
- Each RR has the following information
- – Owner: the domain name where the RR is found
- – Type: specifies the type of the resource in this RR
• A – Host Address ; MX – Mail Exchanger; … – Class: specifies the protocol family to use
• IN – the Internet system
- – TTL: specifies the Time To Live (in unit of second) of the cached RRs
- – RDATA: the resource data
• 实现中文域名的解析
• 例如:主页.北邮.教育.中国(与www.bupt.edu.cn对应);
• 数据库记录示例:
– 主页.北邮.教育.中国,86400,IN,A,192.168.1.25
- – 北邮.教育.中国,86400,IN ,MX,邮件服务器.北邮.教育.中国
- – 邮件服务器.北邮.教育.中国,86400,IN ,A,192.168.1.37
• 支持的Resource Record类型:A、MX、CNAME;对于MX类型的 查询,要求在Additional Section中携带对应IP地址;
13
DNS packet format定义 packet的数据结构定义
DNS Message Format (from RFC 1035)
• Query and Response messages, both with same message format
0 15 16 31
ID |
QR |
OPCODE |
AA |
TC |
RD |
RA |
Z |
Rcode |
Question count |
HeaderAnswer count |
|||||||
Authority count |
Additional count |
|||||||
Question Section (variable number of questions) |
||||||||
Answer Section (variable number of RRs) |
||||||||
Authority Section (variable number of RRs) |
||||||||
Additional Section (variable number of RRs) 15 |
Question Section Format
0 15 16 31
QEURY DOMAIN NAME (变长) (variable number of domain names) |
|
QUERY TYPE (定长) |
QUERY CLASS (定长) |
QUERYTYPE:16-bitfieldusedtospecifythetypeofthequery A–Hostaddress
MX – Mail exchanger for the domain
…
QUERYCLASS:16-bitfieldusedtospecifytheclassofthequery IN–Internetsystem
…
16
DNS packet的数据结构定义(仅供参考)
struct DNS_Header { unsigned short id;
unsigned short tag; (包含QR到Rcode的定义) unsigned short queryNum;
unsigned short answerNum;
unsigned short authorNum;
unsigned short addNum;
};
struct DNS_Query{
unsigned char *name;
};
unsigned short qtype; unsigned short qclass;
具体定义可根据编 程技术做优化
Resource Record Format
0 15 16 31
DOMAIN NAME (变长。根据Wireshark抓包分析看: 对于未出现过的name,是可变长度的字符串;
对于出现过的name,采用压缩指针的方式,在这个field给出 domain name字符串在整个DNS packet中的偏移量,即相对 header起始位置的偏移量字节数)
TYPE (定长,2字节)
CLASS(定长,2字节)
TTL(定长,4字节)
RESOURCE DATA LENGTH
(定长,2字节)
RESOURCE DATA(变长,由length指定长度) 18
DNS Packet中RR的结构体定义(仅供参考) 处理方式一:结构体定义中,只定义定长的field,变长的field,
在构造DNS packet的时候,直接填写进buffer;
struct DNS_RR{
unsigned short type; unsigned short class; unsigned int ttl; unsigned short length;
};
DNS Packet中RR的结构体定义(仅供参考) 处理方式二:结构体定义中,变长的field,定义成指针,其指
向的空间临时分配,填写内容后copy进buffer;
struct DNS_RR {
unsigned char *name;
unsigned short type; unsigned short _class; unsigned int ttl; unsigned short data_len; unsigned char *rdata;
};