DNS projet代写

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;

};