zoukankan      html  css  js  c++  java
  • 详解DNS,你真的懂吗?

    what`s  this ?

    概念

    域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。


    DNS如何实现IP查找

    为了后面说清楚CDN,这里先介绍DNS的解析过程。当然此类文章网络上已经极多。但是我还是想按照我的理解来说一下DNS是如何工作的。

    在整个DNS过程中有四个重要概念,下面解释下。

    DNS Resolver - 递归解析器,主要是接收客户端发出的域名解析请求,并发送 DNS query 查询请求。对于客户端来说它不需要任何操劳,等待 DNS Resolver 告诉自己域名转IP的结果就好。

    Root Server - 这是转换IP执行的第一步查询,根服务器并不会保存具体的域名IP映射信息。它就像一个索引服务器,会告诉你下一步该去那台 TLD Server 查询。

    TLD Server - 这是顶级域名服务器,是执行IP查询的第二步,这里会告诉 DNS Resolver 权威域名服务器的地址。

    Authoriative Server - 权威域名服务器就是包含了完整的机器名的域名,例如:www.example.com ,在这台机器上保存了这个具体域名对应的IP地址。

    下面根据图中的十个步骤说一下每一步都在干嘛。

    1.一个用户在浏览器输入了:example.com,这时会产生一个 DNS 查询,从而进入到 DNS Resolver中;

    2.Resolver 会进入到 root server 根服务器进行查询;

    3.root server 返回了 TLD server 顶级域名服务器的地址,查询请求转向顶级域名服务,这里是 .com 服务器。

    4.递归解析器向 .com 服务器发送一个请求;

    5.TLD server 收到请求后会返回 example.com 权威服务器的地址;

    6.递归解析器又发了一个向权威服务器查询的请求,至此权威服务器查询自己的映射表拿到IP;

    7.返回查询到的IP给了 DNS Resolver;

    8.DNS Resolver返回IP给浏览器,浏览器将会用这个IP来建立tcp连接,发起http request请求;

    9.客户端通过这个IP地址,发起一个 HTTP 请求;

    10.服务器解析请求,并返回数据到浏览器。

    这里需要补充一点是,上面每一步其实都有DNS缓存的设计。比如:浏览器会缓存DNS的结果,(chrome://net-internals/#dns)操作系统的DNS模块会缓存,后面的每一层级也都有缓存.

    所以很多时候,我们的解析过程并不是要顺序执行完这8个步骤。这就跟我们自己开发的应用服务一样,层层缓存,有缓存就读取缓存结果,缓存实现就执行完整流程。

    DNS的解析分类:

    DNS有多种解析记录可以设置,我这里介绍三个很常用的记录。

    A记录 - 被称为IP指向,用户设置自己域名指到对应的IP主机上。如果想要利用A记录实现 负载均衡 需要主机商的支持。

    CNAME记录 - 它相当于为一个主机名设置一个别名,而且该记录不能直接使用IP,只能是另一个主机的别名。CDN主要就是利用该记录来完成的。如果有A记录与CNAME记录同时存在,A记录会被优先使用,换句话说CNAME记录不会生效。

    NS记录 - 用来设置一个域名的权威服务器路径,该记录只会对子域名生效。这个地方可以设置IP也可以设置另外一个权威服务器的域名。需要重点指出的是它的优先级高于A记录,并且它在DNS解析过程中,会跳过2,3,4,5步。

    注:文章如有疑问或错误之处,请留言评论指出,必将学习之.

  • 相关阅读:
    requests.session()发送请求 和使用requests直接发送请求的区别
    axios请求接口如何将data转换formdata?
    yaml简单使用
    Appium-send_keys 无法写入?
    Appium-滑动操作
    Appium -appium desktop工具使用
    Appium学习笔记(2)adb常用命令
    Appium学习笔记(1)appium配置-起步
    Django学习笔记(20)celery_tasks 异步任务初识
    Django学习笔记(19)HttpResponse/JsonResponse /render /redirect/Http404
  • 原文地址:https://www.cnblogs.com/jokej/p/10923743.html
Copyright © 2011-2022 走看看