dns域名解析
前言:DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
- socket
- C/S模式
- Clients:发起应用请求的程序
- Server:相应请求(提供服务)的程序
- 服务器端的程序必须监听在一个socket上(Socket=IP+Port),且套接字必须在客户端和服务端都有
- 传输层协议:TCP , UDP , SCTP
- TCP :transmission control protocol 面向连接的协议,双方在互相通信的时候,需要建立虚链路,虚连接
- UDP:user datagram protocol 无连接的协议,双方在互相通信的时候,不需要建立虚链路,虚连接
- C/S模式
- DNS(domain name service)应用层协议
- 属于C/S模式
- 监听的端口:53/udp, 53/tcp
- www.baidu.com: FQDN( full qualified damain name )
- top level domain
- 组织域:.com , .net , .org , gov , edu , mil
- 国家域:.cn , hk , tw , .jp
- DNS查询类型
- 递归查询:从客户机到本地设置的DNS服务器
- 迭代查询:从根服务器到各个子服务器
- 通常的DNS查询过程
(1)当用户在浏览器输入域名的时候,首先会在本地的hosts文件中查找,如果hosts文件中没有对应域名的IP地址,那么就会发起一个DNS协议的网络请求,对DNS根服务器的53号端口发起一个UDP请求,根服务器在解析浏览器发送的DNS请求之后,会查找本地的DNS数据库,在本地的数据库查找完毕之后会通过网络响应给客户端。那么,这个时候客户端就拿到了域名对应的IP地址,就可以访问服务器了。
(2)对于用户第一次输入一个域名的时候,先会查找本地的hosts文件,如果hosts文件没有找到,那么将会在本地的DNS缓存中查找,如果本地缓存中没有找到,那么就会去找DNS服务器了。那么当DNS服务器返回解析到的IP地址给用户的时候,将会先将域名对应的IP地址暂存至缓存
- DNS的查询分类
- 递归查询和迭代查询的区别
- (1)递归查询
递归查询是客户端面向本地的DNS服务器的一种查询方式,在该模式下运营商的DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
- (2)迭代查询
迭代查询是运营商的DNS 服务器代理用户的DNS请求,面向全球的DNS服务器进行的查询。当客户机发送查询请求时是递归查询,而运营商的DNS服务器会首先请求根DNS 服务器,而根DNS服务器并不直接回复查询结果,而是告诉运营商DNS服务器另一台DNS 服务器地址,运营商DNS服务器再向这台DNS 服务器提交请求,依次循环直到拿到查询的结果为止。
DNS解析
- DNS名称解析方式
- 名称—>IP:正向解析
- IP—>名称:反向解析
- 注意:二者的名称空间,非为同一个空间,非同一颗树,因此,也不是同一个解析库
- DNS服务器类型
- 负责解析至少一个域
- 主名称服务器
- 辅助名称服务器
- 不负责域解析:缓存名称服务器
- 负责解析至少一个域
一次完整的DNS查询请求所经过的流程
Client--->hosts文件--->DNS Local Cache--->服务商的DNS server (recursion) ---> DNS服务器
- 自己负责解析的域:直接查询数据库并返回答案
- 不是自己负责的解析域:server cache —> iteration(迭代)