DNS基础DNS协议学习
- 理解dns报文的IP封装格式:
IP Head+ UDP Head+DNS Date
2. 理解dns服务器的对客户端链接请求的监听端口 53:DNS是应用层协议,数据单元封装在UDP的数据报文中 DNS 53:DNS是UPD的应用协议,使用53端口监听链接请求
3. DNS报文=DNS报文头+正文(查询段+应答段+授权段+附加段)
查询段用于主机(客户端)向DNS域名服务器发出地址解析请求;
应答段、授权段、附加段用于DNS域名服务器向主机返回地址解析结果
4.DNS 报文头
ID:这是由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,
申请者利用这个标志将应答和原来的请求对应起来。
QR:该字段占1位,用以指明DNS报文是请求(0)还是应答(1)。
OPCODE:该字段占4位,用于指定查询的类型。值为0表示标准查询,值为1表示逆向查
询,值为2表示查询服务器状态,值为3保留,值为4表示通知,值为5表示更
新报文,值6~15的留为新增操作用。
AA:该字段占1位,仅当应答时才设置。值为1,即意味着正应答的域名服务器是所查询域名的管理机构或者说是被授权的域名服务
TC:该字段占1位,代表截断标志。如果报文长度比传输通道所允许的长而被分段,该
位被设为1。
RD:该字段占1位,是可选项,表示要求递归与否。如果为1,即意味 DNS解释器要DNS
服务器使用递归查询。
RA:该字段占1位,代表正在应答的域名服务器可以执行递归查询,该字段与查询段无关。
Z:该字段占3位,保留字段,其值在查询和应答时必须为0。
RCODE:该字段占4位,该字段仅在DNS应答时才设置。用以指明是否发生了错误。
0:无错误情况,DNS应答表现为无错误;
1:格式错误,DNS服务器不能解释应答;
2:严重失败,因为名字服务器上发生了一个错误,DNS服务器不能处理查询;
3:名字错误,如果DNS应答来自于授权的域名服务器,意味着DNS请求中提到的名字不存在;
4:没有实现。DNS服务器不支持这种DNS请求报文;
5:拒绝,由于安全或策略上的设置问题,DNS名字服务器拒绝处理请求;
6~15:保留;
QDCOUNT:该字段占16位,指明DNS查询段中的查询问题的数量。
ANCOUNT:该字段占16位,指明DNS应答段中返回的资源记录的数量,在查询段中该值为0。
NSCOUNT 该字段占16位,指明DNS应答段中所包括的授权域名服务器的资源记录的数量,
在查询段中该值为0。
NSCOUNT 该字段占16位,指明附加段里所含资源记录的数量,在查询段中该值为0。
- DNS查询报文总结:
QR=0 表示是查询字段
OPCODE=0000表示为标准查询
AA=0表示未要求授权
TC=0表示未截断
RD=1表示为要求递归查询
RA=0与应答相关与查询无关所以为0
Z=000属于保留位
RCODE=0000与应答相关与查询无关所以为0
QDCOUNT=1表示只有一条查询信息
ANCOUNT=1应答时返回资源记录数量,由于是查询报文所以此值设置为 0
NSCOUNT=1应答时返回授权服务器资源记录数量,由于是查询报文所以此值设置为0
ARCOUNT=1应答时返回附加的授权服务器资源记录数量,由于是查询报文所以此值设置0
QNAME=www.zduozhu.com该项给出了要求查询的域名
QTYPE=A表示要查询域名的ipv4地址
QCLASS=IN表示查询的是互联网的IP地址
- 为什么只有13个根:
DNS报头= 16 x 6 = 96字节
UDP包大小限制是512字节
一个ipv4地址是32字节
512 – 96 = 416 字节
32 x 13 = 416 字节
可见如果@的NS地址超过13个
ipv4时,DNS应答报文就会接
近512字节限制