首先思考一个问题: 为什么需要DNS解析域名为IP地址?
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能识别认识域名。所以需要DNS解析域名为IP地址。
1、什么是DNS?
域名系统(Domain Name System,[缩写](DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53,是应用层协议。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
简单来说:域名到IP地址的映射,DNS解析请求采用UDP数据报,且是明文传输。
2、DNS解析过程
客户端向服务端发送请求之前,需要先经过一个网络请求的过程,也就是域名到IP地址映射的过程,client会通过DNS协议向DNS服务器请求相应域名的解析,DNS服务器讲解析结果IP传给client,再由client向sever端发送请求。如下图:
DNS解析过程
3、DNS解析查询方式
主要有两种方式:
3.1递归查询
3.2迭代查询
递归查询
就是我去问下,client项域名服务器发送请求的时候,首先询问本地的DNS,如果本地的DNS不知道对应域名的IP的时候,会向根域名DNS询问,就这样一直向上,直到询问权限DNS服务器,找到对应的IP之后,再一层层的返回结果,最终到client,这种方式就叫递归查询。
递归查询
迭代查询
简单说就是我告诉你谁可能知道。client发送到本地DNS,本地DNS不知道就会询问顶级DNS,顶级DNS不知道,会告诉你跟域DNS可能知道,本地DNS再去询问跟域DNS,跟域DNS如果不知道,会告诉本地DNS权限DNS可能知道,本地DNS再去询问权限DNS,然后再将对应域名的IP返给本地DNS,再返给client。如下图:
迭代查询
4、DNS解析常见的问题
4.1DNS劫持问题
4.2DNS解析转发的问题
DNS劫持
client向DNS服务器查询IP,由于DNS使用的是UDP数据报且是明文传输,明文传输就很容易被窃听,如果此时有一个钓鱼DNS服务器劫持了我们的请求,那么就会返回一个错误的IP。那么我们的client就会请求一个错误的网站。
DNS劫持
延伸问题:DNS劫持和HTTP是怎样的关系呢?
这个很有迷惑性,答案是没有任何关系,因为DNS解析是在HTTP请求发生之前啊,且DNS解析请求使用UDP数据报,端口号53 。
DNS 解析转发主要是为了节省资源,比如client向“移动DNS”发送请求,如果是小的运营商为了节省资源,会转发到某个DNS服务器,比如电信DNS服务器,电信DNS服务器会向权威DNS服务器发送请求。最终返回的是电信的IP,这就涉及到跨网访问的情况。
DNS解析转发
5、怎样解决DNS劫持
5.1、httpDNS
5.2、长连接
httpDNS
使用DNS协议是使用UDP向DNS服务器的53端口进行请求。
使用HTTP协议向DNS服务器的80端口进行请求,这样的话就不会有正常的DNS解析,也就不会有DNS劫持了。
NDS服务器通过HTTP的相应返回一个IP地址,这样的话client就可以拿IP进行网络访问,这样就规避掉了DNS劫持。
61560340836_.pic.jpg
长连接
创建一个长连接的server(代理服务器),client和长连server建立一个长连接通道,可以将client的HTTP请求通过长连通道传给server,长连server对于API server可以通过内网专线对HTTP进行请求和相应。由长连server通过内网专线进行DNS的解析,这样也就规避了公网DNS解析的劫持问题。
长连接













网友评论