zoukankan      html  css  js  c++  java
  • DNS(转载)

    最近帮朋友注册域名配置主机,碰到一些DNS上的一些概念,惭愧于有一些东西已经忘记是啥意思,于是决定重新学习一下DNS方面的基本概念。

    常用概念:

    TTL:

    TTL为Time to live的缩写,网络相关地方存在于两个地方,一个是IP协议里,一个是DNS服务器上。

    TTL in IP

    IP协议里表示存活的时间,比如说TLL为126表示,这个IP包最大的存活时间为126秒。但是!IP包每经过一个路由器都会减一,也就是说一个IP包有可能因为两种情况而超时。一个是时间超时,一个是经过的路由太多(每经过一个路由叫做hop,中文貌似叫跳)。

    这个值是发送数据包的那方设置的,也就是说我们每个人的系统里都有这么一个默认的TLL数。我们可以通过ping命令来做一下实验。

    >ping 127.0.0.1
    
    正在 Ping 127.0.0.1 具有 32 字节的数据:
    来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
    来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
    来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
    来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
    
    127.0.0.1 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 0ms,平均 = 0ms
    

    可以看到我目前系统的TLL默认数为128

    那我们ping一下一个网址

    >ping www.zhengyi.me
    
    正在 Ping urls61.xundns.cn [174.139.132.211] 具有 32 字节的数据:
    来自 174.139.132.211 的回复: 字节=32 时间=350ms TTL=115
    来自 174.139.132.211 的回复: 字节=32 时间=359ms TTL=115
    来自 174.139.132.211 的回复: 字节=32 时间=369ms TTL=115
    来自 174.139.132.211 的回复: 字节=32 时间=354ms TTL=115
    
    174.139.132.211 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 350ms,最长 = 369ms,平均 = 358ms
    

    我们发现这个TLL不是128,说明这个数据包经过了一些hop以后才到达最终的服务器。(128-115=13)。用tracert命令跟踪了一下具体有那几次转发,结果是经过了13个路由到达了最终目的地,正好符合我的猜想。

    但是,真的如此么?其实不然,这个TLL是从服务器往我电脑上发包,到达我系统时剩余的TLL,至于为什么这么巧,因为对方系统的TLL设置和我系统是一样的。如何证明我是对的?

    那我们ping一下自己家的路由器看看。

    >ping 192.168.1.1
    
    正在 Ping 192.168.1.1 具有 32 字节的数据:
    来自 192.168.1.1 的回复: 字节=32 时间=1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间=1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间=2ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间=1ms TTL=64
    
    192.168.1.1 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 1ms,最长 = 2ms,平均 = 1ms
    

    只剩下64了,说明俺家路由器的TLL是64。

    不同的操作系统默认的TTL是不同的,Linux系统的TTL值为64或255,Windows NT系统为128,Windows 98系统为32,UNIX为255。

    TLL在DNS中的含义

    TTL为Time To Live缩写(生存时间),也就是域名记录的有效更新时间,简单的说它表示DNS记录在DNS服务器上缓存的时间。

    举个例子,我在浏览器中输入www.zhengyi.me,于是浏览器就向我当前网络连接的DNS服务器发一个询问,然后这个DNS服务器也找不到于是又向它的上一级DNS服务器发询问,就这么一层一层发送直到根域名服务器(实际情况还要复杂一点,不是根域名服务器就知道的一切),最后终于得到这个网址对应的IP,于是又一级一级返回。但是这个返回结果中有一个TLL的东西来告诉这个服务器应该缓存这个结果多久,比如说400,就是意味着接下来的400秒钟如果有人再次来询问就直接返回这个结果。超过400秒则重新去询问。

    这个对于网站的访问速度会有一点点的影响,在配置的时候也需要根据实际情况。DNS.LA有一个推荐的配置:https://www.dns.la/support/art_324.aspx

    A Record

    A代表Address,A记录将你的域名映射到某个IP地址上。通过这个配置可以将不同的子域名转到不同的地址上去。而且同一个域名也是有办法配成多个IP的,这样DNS服务器会在被询问的时候挨个的返回不同的IP,这也是一种负载均衡的办法。

    比如配置

    www.zhengyi.me     -->  10.124.12.123
    dream.zhengyi.me   -->  10.124.52.120
    

    用nslooukup或Linux下的host可以查看一个域名对应的主机,我们试试看Google.com的。可以看到Google就搞了好多不同的主机,当然还有更多。

    >nslookup google.com
    服务器:  hangzhou.zjhzptt.net.cn
    Address:  202.101.172.35
    
    非权威应答:
    名称:    google.com
    Addresses:  173.194.127.32
          173.194.127.40
          173.194.127.46
          173.194.127.39
          173.194.127.36
          173.194.127.38
          173.194.127.41
          173.194.127.34
          173.194.127.35
          173.194.127.33
          173.194.127.37
    

    CNAME Record

    Canonical Name的缩写,叫做别名记录或者规范名字。这个允许我们将多个子域名指向随意的的主机上。那个和A记录有啥区别的,这个别名记录映射的是另一个域名而不是IP。那么为什么有了A记录还需要这个东西呢?

    加入我们有两个子域名,www.zhengyi.me和dream.zhengyi.me,但我们只有一台主机。我们可以通过A记录配置成这样,

    www.zhengyi.me     -->  10.124.124.124
    dream.zhengyi.me   -->  10.124.124.124
    

    但是万一我们需要更改主机的时候就需要将两个都修改掉,那么会需要更多的时间去生效,所以就可以这么设置。这样子就需要更改一个A记录而不需要改所有的记录。

    www.zhengyi.me     -->  10.124.124.124
    dream.zhengyi.me   -->  www.zhengyi.me
    

    MX Record

    Mail Exchange的缩写。作用是将自己域名下的邮件服务器配置到自己的邮件服务器上去。我们发邮件到i@zhengyi.me的时候就会查询回来这个主机。配一个自己的域名的邮箱看起来感觉还是挺爽的。。。

    未完待续。。。

    作者:imjustice
    出处:http://imjustice.cnblogs.com/

    本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但未经作者同意必须保留此段声明,且在文章页面出原文链接,如有问题可通过i@zhengyi.me联系我。

     
  • 相关阅读:
    关于【最小生成树】
    题目1096:日期差值 (2009年上海交通大学计算机研究生机试真题)
    题目1432:叠筐 题目1126:打印极值点下标
    利用栈解决一些基本问题
    Redis与Python交互
    MongoDB与python 交互
    MongoDB安装
    mongodb基本操作
    MySQL与Python交互
    C++11 bind和function用法
  • 原文地址:https://www.cnblogs.com/sunfan1988/p/3566385.html
Copyright © 2011-2022 走看看