java 单机接口限流处理方案
773
2022-10-12
【网络基础知识】DNS协议及服务介绍(详细)(DNS网络协议)
1. 简介
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。DNS是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统。DNS系统采用递归查询请求的方式来响应用户的查询,为互联网的运行提供关键性的基础服务。目前绝大多数的防火墙和网络都会开放DNS服务,DNS数据包不会被拦截,因此可以基于DNS协议建立隐蔽信道,从而顺利穿过防火墙,在客户端和服务器之间传输数据。DNS允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址。Internet Engineering Task Force(IETF)标准组对HTTP和DNS进行了标准化定义。原始的DNS标准是在1987年发布的,因为用户在使用网络浏览器的同时需要使用其他应用程序,例如将电子邮件地址转换为IP地址。
2. DNS应用层协议
2.1 DNS资源记录
在介绍DNS层协议之前,先了解一下DNS服务器存储的资源记录(Resource Records,RRs),一条资源记录(RR)记载着一个映射关系。每条RR通常包含如下表所示的一些信息:
字段 | 含义 |
NAME | 名字 |
TYPE | 类型 |
CLASS | 类 |
TTL | 生存时间 |
RDLENGTH | RDATA所占的字节数 |
RDATA | 数据 |
NAME和RDATA表示的含义根据TYPE的取值不同而不同,常见的:
若TYPE=A,则name是主机名,value是其对应的ip;若TYPE=NS,则name是一个域,value是一个权威DNS服务器的主机名。该记录表示name域的域名解析将由value主机名对应的DNS服务器来做;若TYPE=CNAME,则value是别名为name的主机对应的规范主机名;若TYPE=MX,则value是别名为name的邮件服务器的规范主机名;……
TYPE实际上还有其他类型,所有可能的type及其约定的数值表示如下:
TYPE | value | meaning |
A | 1 | a host address |
NS | 2 | an authoritative name server |
MD | 3 | a mail destination (Obsolete - use MX) |
MF | 4 | a mail forwarder (Obsolete - use MX) |
CNAME | 5 | the canonical name for an alias |
SOA | 6 | marks the start of a zone of authority |
MB | 7 | a mailbox domain name (EXPERIMENTAL) |
MG | 8 | a mail group member (EXPERIMENTAL) |
MR | 9 | a mail rename domain name (EXPERIMENTAL) |
NULL | 10 | a null RR (EXPERIMENTAL) |
WKS | 11 | a well known service description |
PTR | 12 | a domain name pointer |
HINFO | 13 | host information |
MINFO | 14 | mailbox or mail list information |
MX | 15 | mail exchange |
TXT | 16 | text strings |
2.2 整体及Header部分
DNS请求与响应的格式是一致的,其整体分为Header、Question、Answer、Authority、Additional5部分,如下图所示:
Header部分是一定有的,长度固定为12个字节;其余4部分可能有也可能没有,并且长度也不一定,这个在Header部分中有指明。Header的结构如下:
下面说明一下各个字段的含义:
ID:占16位。该值由发出DNS请求的程序生成,DNS服务器在响应时会使用该ID,这样便于请求程序区分不同的DNS响应。QR:占1位。指示该消息是请求还是响应。0表示请求;1表示响应。OPCODE:占4位。指示请求的类型,有请求发起者设定,响应消息中复用该值。0表示标准查询;1表示反转查询;2表示服务器状态查询。3~15目前保留,以备将来使用。AA(Authoritative Answer,权威应答):占1位。表示响应的服务器是否是权威DNS服务器。只在响应消息中有效。TC(TrunCation,截断):占1位。指示消息是否因为传输大小限制而被截断。RD(Recursion Desired,期望递归):占1位。该值在请求消息中被设置,响应消息复用该值。如果被设置,表示希望服务器递归查询。但服务器不一定支持递归查询。RA(Recursion Available,递归可用性):占1位。该值在响应消息中被设置或被清除,以表明服务器是否支持递归查询。Z:占3位。保留备用。RCODE(Response code):占4位。该值在响应消息中被设置。取值及含义如下:
0:No error condition,没有错误条件;1:Format error,请求格式有误,服务器无法解析请求;2:Server failure,服务器出错。3:Name Error,只在权威DNS服务器的响应中有意义,表示请求中的域名不存在。4:Not Implemented,服务器不支持该请求类型。5:Refused,服务器拒绝执行请求操作。6~15:保留备用。
QDCOUNT:占16位(无符号)。指明Question部分的包含的实体数量。ANCOUNT:占16位(无符号)。指明Answer部分的包含的RR(Resource Record)数量。NSCOUNT:占16位(无符号)。指明Authority部分的包含的RR(Resource Record)数量。ARCOUNT:占16位(无符号)。指明Additional部分的包含的RR(Resource Record)数量。
2.3 Question部分
Question部分的每一个实体的格式如下图所示:
QNAME:字节数不定,以0x00作为结束符。表示查询的主机名。注意:众所周知,主机名被"."号分割成了多段标签。在QNAME中,每段标签前面加一个数字,表示接下来标签的长度。比如:api.sina.com.cn表示成QNAME时,会在"api"前面加上一个字节0x03,"sina"前面加上一个字节0x04,"com"前面加上一个字节0x03,而"cn"前面加上一个字节0x02;QTYPE:占2个字节。表示RR类型,见以上RR介绍;QCLASS:占2个字节。表示RR分类,见以上RR介绍。
2.4 Answer、Authority、Additional部分
Answer、Authority、Additional部分格式一致,每部分都由若干实体组成,每个实体即为一条RR,之前有过介绍,格式如下图所示:
NAME:长度不定,可能是真正的数据,也有可能是指针(其值表示的是真正的数据在整个数据中的字节索引数),还有可能是二者的混合(以指针结尾)。若是真正的数据,会以0x00结尾;若是指针,指针占2个字节,第一个字节的高2位为11。TYPE:占2个字节。表示RR的类型,如A、CNAME、NS等,见以上RR介绍;CLASS:占2个字节。表示RR的分类,见以上RR介绍;TTL:占4个字节。表示RR生命周期,即RR缓存时长,单位是秒;RDLENGTH:占2个字节。指定RDATA字段的字节数;RDATA:即之前介绍的value,含义与TYPE有关,见以上RR介绍。
3. DNS域名结构
域名系统必须要保持唯一性。
为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:
1. 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成
2. 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)
3. 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。
4. 级别最低的域名写在左边,级别最高的域名写在右边。
域名服务主要是基于UDP实现的,服务器的端口号为53。
关于域名的层次结构,如下图所示:
图注:因特网的域名空间结构
eg :我们熟悉的,baidu.com
1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
2. baidu: 二级域名,指公司名。
3. 只是一种习惯用法。
4. DNS域名的分级
域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。
如下图所示:
其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。
国家顶级域名 | 中国:cn, 美国:us,英国uk… |
通用顶级域名 | com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织… |
反向域名 | arpa,用于PTR查询(IP地址转换为域名) |
5. 域名服务器
域名是分层结构,域名服务器也是对应的层级结构。
有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。
由高向低进行层次划分,可分为以下几大类:
分类 | 作用 |
根域名服务器 | 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助 |
顶级域名服务器 | 负责管理在该顶级域名服务器下注册的二级域名 |
权限域名服务器 | 负责一个区的域名解析工作 |
本地域名服务器 | 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器 |
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区。
我们需要注意的是:
1. 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器。
2. 每一级域名服务器都知道下级域名服务器的IP地址。
3. 为了容灾,每一级至少设置两个或以上的域名服务器。
6. 域名解析过程
域名解析总体可分为一下过程:
(1) 输入域名后,先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据;
(2) 如果没有, 就向上级域名服务器进行查找, 依次类推;
(3) 最多回溯到根域名服务器,肯定能找到这个域名的IP地址;
(4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来,可以加速查找过程;
具体可描述如下:
1. 主机先向本地域名服务器进行递归查询;
2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询;
3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址;
4. 本地域名服务器向顶级域名服务器进行查询;
5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址;
6. 本地域名服务器向权限服务器进行查询;
7. 权限服务器告诉本地域名服务器所查询的主机的IP地址;
8. 本地域名服务器最后把查询结果告诉主机。
如图所示:
DNS域名查询方式:递归查询、迭代查询和反向查询:
(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机。
(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
(3)反向查询:反向查询时通过DNS客户端提供的IP地址来查询主机完整域名,但是域名与IP地址之间无法建立直接对应关系,所以要在DNS服务器内创建一个反向型查询的区域。
☛ 以上部分图片显示异常,详细图文内容!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~