什么是 DNS

DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址。能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。

传统的基于 UDP 协议的公共 DNS 服务极易发生 DNS 劫持,从而造成安全问题。

DNS(域名系统),Internet上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上的。

UDP协议不是可靠的传输协议,会丢包的。

DNS 域名系统结构

Root 域名:DNS 域名使用时,规定由尾部句号来指定名称位于根或更高级别的域层次结构

Top Level 顶级域名:用来指示某个国家、地区或组织使用的名称的类型名称。如 .com

Second Level 域名:个人或组织在 Internet 上使用的注册名称。如 linkedkeeper.com

Third Level 域名:已注册的二级域名派生的域名。如 misc.linkedkeeper.com

DNS 解析过程

1. 浏览器中输入 www.linkedkeeper.com,发出解析请求。

2. 本机的域名解析器 resolver 程序查询本地缓存和 host 文件中是否为域名的映射关系,如果有则调用这个 IP 地址映射,完成解析。

3. 如果 hosts 与本地解析器缓存都没有相应的网址映射关系,则本地解析器会向 TCP/IP 参数中设置的首选 DNS 服务器(我们叫它 Local DNS 服务器)发起一个递归的查询请求。

4. 服务器收到查询时,如果要查询的域名由本机负责解析,则返回解析结果给客户机,完成域名解析,此解析具有权威性。如果要查询的域名,不由 Local DNS 服务器解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析,此解析不具有权威性。

5. 如果 Local DNS 服务器本地区域文件与缓存解析都失效,则根据 Local DNS 服务器的设置(是否递归)进行查询,如果未用开启模式,Local DNS 就把请求发至13台 Root DNS。如果用的是递归模式,此 DNS 服务器就会把请求转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环。

6. Root DNS 服务器收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP。

7. Local DNS 服务器收到 IP 信息后,将会联系负责 .com 域的这台服务器。

8. 负责 .com 域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com 域的下一级 DNS 服务器地址给本地 DNS 服务器。

9. 当 Local DNS 服务器收到这个地址后,就会找 linkedkeeper.com 域服务器,10、11重复上面的动作,进行查询。

10. 最后 www.linkedkeeper.com 返回需要解析的域名的 IP 地址给 Local DNS 服务器。

11. Local DNS 服务器缓存这个解析结果(同时也会缓存,6、8、10返回的结果)。

12. Local DNS 服务器同时将结果返回给本机域名解析器。

13. 本机缓存解析结果。

14. 本机解析器将结果返回给浏览器。

15. 浏览器通过返回的 IP 地址发起请求。

递归查询和迭代查询

  • 递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。

  • 迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:你下一步应当向哪一个域名服务器进行查询。然后让本地域名服务器进行后续的查询,而不是替本地域名服务器进行后续的查询。

由此可见,客户端到 Local DNS 服务器,Local DNS 与上级 DNS 服务器之间属于递归查询;DNS 服务器与根 DNS 服务器之前属于迭代查询。

实际环境中,因为采用递归模式会导致 DNS 服务器流量很大,所以现在大多数的 DNS 都是迭代模式。

结合 Wireshark 分析 DNS 协议

HttpDns 是什么

HTTPDNS 利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。另外,由于 DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。

HttpDns 主要解决的问题

  • Local DNS 劫持:由于 HttpDns 是通过 IP 直接请求 HTTP 获取服务器 A 记录地址,不存在向本地运营商询问 domain 解析过程,所以从根本避免了劫持问题。

  • 平均访问延迟下降:由于是 IP 直接访问省掉了一次 domain 解析过程,通过智能算法排序后找到最快节点进行访问。

  • 用户连接失败率下降:通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。

如何进行改造支持 HttpDns

目前,国内有一部分厂商已经提供了这个解析服务,可以直接使用第三方服务。目前,提供 HttpDns 解析服务的有:阿里云HttpDNS

阿里云的 HttpDNS 服务的 API 比较标准,直接发一个 Get 请求,带上请求参数,返回结果以 json 返回。

1

http://203.107.1.1/d?host=www.linkedkeeper.com

请求成功时,返回结果如下:

1

2

3

4

5

6

7

8

{

  "host""www.linkedkeeper.com",

  "ips": [

    "115.238.23.241",

    "115.238.23.251"

  ],

  "ttl": 57

}

在移动端,将由 HttpDns 获得的 IP 地址在原有 URL 的基础上,将域名替换为 IP,然后用新的 URL 发起 HTTP 请求。

本文转载自 linkedkeeper.com (文/张松然)  ©著作权归作者所有

HTTPDNS基礎知識相关推荐

  1. stm32h7内存分配_【STM32H7教程】第25章 STM32H7的TCM,SRAM等五塊內存基礎知識

    第25章       STM32H7的TCM,SRAM等五塊內存基礎知識 本章教程為大家介紹STM32H7帶的ITCM,DTCM,AXI SRAM,SRAM1,SRAM2,SRAM3,SRAM4和備份 ...

  2. 文明5新手的基礎知識

    文明玩到現在也累積了一些經驗.由於功力不夠,只能提供一些基礎中的基礎,盼能拋磚引玉,還請高手們不吝指正. 一.        坐城: 移民坐城的規則,應該已經是常識了.當一座城建立時,就會產生4紅臉( ...

  3. 關於電腦鍵盤的基礎知識

    在Microsoft Windows 98中,键盘和鼠标是两个标准的使用者输入来源,在一些连贯操作中常产生互补作用.当然,鼠标在今天的应用程序中比十年前使用得更为广泛.甚至在一些应用程序中,我们更习惯 ...

  4. USB 1~3.0 基礎知識

    USB版本 傳輸速度 (bit) 理論速度 (Byte) 目前官方版本名 官方市場代號 原名 USB 2.0 LowSpeed 低速 Low Speed USB 1.0 1.5Mbps 0.1875M ...

  5. Remoting學習(三)----Reomoting 基楚知識

    Remoting基礎 基本原理 當用戶端創建遠端remotableclass的一個實例,.net框架在用戶端應用程式域中產生一個代理.該代理看起來就像實際物件.代理收到調用後,通過通道連接到遠端的物件 ...

  6. vs2017c语言图像界面库,C語言中在VS2017中構建圖形界面基礎知識點

    一.initgraph函數(講解)轉自:https://blog.csdn.net/zhao_fu_lu/article/details/23961111 1.initgraph():初始化圖形系統 ...

  7. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 3 烏龜繪圖 所需之Python基礎

    "Talk is cheap. Show me the code." ― Linus Torvalds 老子第41章 上德若谷 大白若辱 大方無隅 大器晚成 大音希聲 大象無形 道 ...

  8. JS基礎:void冷知識

    JS 基礎:void 冷知識 文章目錄 JS 基礎:void 冷知識 簡介 參考 正文 語法 Usage 作用 Application `` IIFE(Immediately Invoked Func ...

  9. 自行車基本知識 (zz)

    一. 自行車基本知識 1.自行車發展簡史: //z 2017-02-08 18:03:05 L.326'21415 BG57IV3 T3795962035.K.F134211643  自行車的發展是一 ...

最新文章

  1. Android Studio查看代码行数和删除注释空行等
  2. 关于perl中变量内插问题的讨论
  3. 1、lombok的初始使用
  4. Intent 匹配规则
  5. SonarQube4.4+Jenkins进行代码检查实例之三-单元测试分析
  6. 用以太坊区块链保证Asp.Net Core的API安全(上)
  7. Python并发编程之线程中的信息隔离(五)
  8. Zdal分库分表、超详细一步一步实现使用zdal搭建框架
  9. Lumen开发:结合Redis实现消息队列(3)
  10. vue+vuex初入门
  11. 百度日语输入法快捷键(baidu type)
  12. 计算机程序班搞笑口号,集搞笑自创的运动会口号?
  13. 计算机软件工程电脑配置,软件工程专业所需电脑配置。
  14. jink remote server(远程调试)
  15. 网页打开慢的服务器网络原因,网页打开很慢的原因有哪些 如何处理
  16. Flutter 苹果原生拼音键盘在TextField上输入异常 | 拼音输入过程回调问题
  17. linux命令解压文件到指定目录并覆盖,linux当前目录下解压zip文件并覆盖原文件如何实现?...
  18. html当前窗口打开页面,JavaScript 在本窗口打开网页
  19. [SCOI2012]喵星球上的点名——堪称十种方法做的题
  20. Python - faker

热门文章

  1. Spring框架的起源
  2. LeetCode70. 爬楼梯(Java解法——使用完全背包求解)
  3. 【Java进阶营】一个资深Java架构师告诉你我们是如何将一个项目做烂的
  4. android 進度條_Android ProgressBar 反向進度條/進度條從右到左走
  5. 面试后说hold什么意思_面试快结束时,如果面试官对你说这几句话,说明你被淘汰了!...
  6. 如何用计算机录麦克风的声音,电脑内部与麦克风的声音怎么同时录制?详细教程在此...
  7. 计算机画大熊猫教案,三年级上册信息技术教案-第2课 画大熊猫|冀教版 (1)
  8. 串行器 MAX96717F 芯片介绍
  9. 变频器LED显示灯闪烁_东莞变频器常见故障维修华中伺服驱动器维修
  10. 【教程】【技术向】将博客批量导出为markdown或html格式