什么是域名
域名是什么,域名就是 IP 地址
,IP 地址是一个很大的数字,通常使用点分十进制来书写,例如:127.0.0.1,但是这并不方便人们记忆,你想要用百度搜索就要访问百度的服务器,可是让你记住这样一串魔幻数字,真的很困难,因此域名就诞生了
什么是DNS协议
DNS是域名系统
(Domain Name Service)的缩写,我们通常用来识别主机的方式
有两种,一种是通过主机名
,另外一种是通过IP地址
。主机名/域名便于我们的记忆
,而路由器则更喜欢定长的、有着层次结构的IP地址
。
所以需要一个能将域名转变到IP地址
的目录服务,这就是域名服务器存在的意义。
1. DNS domain name system 主要作用就是将主机域名转换为ip地址
2. 所有DNS请求和回答报文使用的 UDP 数据报经过端口53发送
3. DNS是应用层协议,client端(一般指浏览器)构建DNS查询请求,依次被传输层,网络层,数据链路层等封装传送到达DNS服务器端,最终client端接收到DNS响应消息
因特网的域名结构
1、 因特网采用了层次树状结构的命名方法。
2、 任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
3、 域名的结构由标号序列组成,各标号之间用点隔开
从域名后面到域名前面
域名分级
(1)国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。
(2)通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
我们不可能为每一级域名都配备一个相对应的域名服务器,这样的话域名服务器数量太多,效率会很低
实际上一个DNS服务器的管辖范围并不是以域为单位,而是以区为单位,区是DNS服务器的实际管辖范围,区可能小于域,但一定不可能大于域。
举例下图:
一个公司abc,下属部门x和y,部门x下又有u和v,y下又有t
图a中:abc公司只设定了一个区abc.com,区abc.com和域abc.com指的是同一件事
图b中:公司设定了两个区abc.com和区y.abc.com,这两个区都隶属于域abc.com,两个区都设置相应的权限域名服务器,可以看出区是域的子集
域名解析步骤
例1
当用户在浏览器中输入www.baidu.com的时候,DNS解析大概会有以下过程:
- 首先浏览器会检查
自身缓存是否解析过这个域名的IP地址
,如果有即缓存命中
,那么解析结束; - 如果浏览器缓存中没有,那么浏览器会检查
操作系统缓存中
是否有相应的解析过的结果。而操作系统也有一个域名解析的过程。像我们熟悉的hosts文件,如果用户在这里定义了一个域名对应的IP地址
,那么浏览器会首先使用这里定义的IP地址; - 如果此时还没有命中域名,才会真正地去请求
本地域名服务器(LDNS)
来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不是很远,并且这台服务器的性能很好,一般这里会缓存域名解析的结果。大约80%的域名解析到这里就完成了; - 如果
本地域名服务器仍然没有命中
,告诉LDNS根域名服务器地址
,让LDNS向根域名服务器发起访问。 - LDNS就会向根域名服务器(Root Server)发起域名请求解析;
根域名服务器没有命中
,则返回给LDNS一个所查询域的顶级域名服务器(gTLD Server,如.com、.cn、.org等)地址
;- 此时LDNS再发送请求到上一步返回的顶级域名服务器的IP地址;
- 接受请求的gTLD查找
并返回这个域名对应的Name Server的地址
,这个Name Server就是网站注册的域名服务器
; - Name Server根据映射关系表找到目标IP地址,并将其返回给主机;
本地域名服务器缓存这个域名和对应的IP
;LDNS把解析的结果返回给用户,用户根据缓存到本地系统缓存
中,域名解析过程至此结束。
例2
假设域名为m.xyz.com的主机想要知道域名为y.abc.com的IP地址,步骤如下
1) 主机m.xyz.com先向本地域名服务器dns.xyz.com进行递归查询
2) 本地域名服务器采用迭代查询,首先向根域名服务器查询
3) 根域名服务器告诉本地域名服务器,下一次应该到顶级域名服务器dns.com查询
4) 本地域名服务器向顶级域名服务器dns.com查询
5) 顶级域名服务器dns.com告诉本地域名服务器,下一次应该到权限域名服务器dns.abc.com进行查询
6) 本地域名服务器向权威域名服务器dns.abc.com查询
7) 权威域名服务器dns.abc.com告诉本地域名服务器所查询的IP地址
8) 本地域名服务器将IP地址告诉主机m.xyz.com
为提高效率的高速缓存
为了提高DNS的查询效率,减轻根域名服务器的负荷,并减少因特网上DNS查询数据报的数量,在域名服务器中使用了高速缓存
,高速缓存是用来存放最近查询过的域名以及从何处获取域名映射信息的记录
例如:在上述查询过程中,假设不久前已经有其他用户查询过域名为y.abc.com的IP地址,那么当我查询的时候,本地域名服务器就不必要向根域名服务器重新查询,只需要将高速缓冲中上次的查询结果告诉我。
高速缓存存在着一定的声明周期,一旦超过了声明周期,就需要向根域名服务器重新请求
DNS的传输层协议-TCP/UDP
DNS主要作用就是将主机域名转换为IP地址
。当用户主机的DNS客户端接收到应用程序的这种转换请求时
,那么就会向网络中发送一个DNS查询报文
。
需要了解的是,DNS请求
和回答报文
的都是使用UDP数据报经过53端口
发送的。
为什么用UDP
使用UDP(User Datagram Protocol)这样的无连接的
,尽最大能力交付
的不可靠数据连接
,而不是使用TCP(Transmission Control Protocol 传输控制协议)这样的面向连接的可靠数据连接
。
一次UDP名字服务器交换可以短到两个包:一个查询包、一个响应包
。一次TCP交换则至少包含9个包:三次握手初始化TCP会话、一个查询包、一个响应包以及四次分手的包交换
。
所以考虑到效率的原因,TCP连接的开销更大
,故而采用UDP作为DNS的传输层协议。
区域传送使用了TCP
DNS 的规范规定了 2 种类型的 DNS 服务器
, 一个叫主 DNS 服务器
, 一个叫辅助 DNS 服务器
。 在一个区中主 DNS 服务器
从自己本机
的数据文件中读取该区的 DNS 数据信息
, 而辅助 DNS 服务器
则从区的主 DNS 服务器中
读取该区的 DNS 数据信息。 当一个辅助 DNS服务器启动时, 它需要与主 DNS 服务器通信, 并加载数据信息, 这就叫做区传送
(zonetransfer)。
区域传送时使用 TCP
, 主要有以下两点考虑:辅
域名服务器会定时(一般时 3 小时) 向主
域服务器进行查询以便了解数据是否有变动。
如有变动
, 则会执行一次区域传送
, 进行数据同步
。 区域传送将使用 TCP 而不是 UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多
。TCP 是一种可靠的连接, 保证了数据的准确性