Q&A

用字符串方便人记忆,而机器喜欢一个32位的ip address

这就是DNS设计的初衷:提供域名到IP address的转换。
运行在UDP端口53,为应用服务。


DNS需要解决的问题

  • 问题1:如何命名设备
    • 方便机器维护与管理
    • 如何解决命名的重名问题:层次化命名
  • 问题2:如何完成名字到IP地址的转换
    • 分布式的数据库维护和响应名字查询
  • 问题3:如何维护

    • 增加或者删除一个域,需要在域名系统中做哪些工作?

      DNS的结构(如何命名设备)

      Q: 一个层面命名设备会有很多重名
      A: NDS采用层次树状结构的命名方法 , 一个域名会是 xxx.edu(toplever).cn(2level).xxxx345level的形式
  • Internet 根被划为几百个顶级域(top lever domains)

  • 通用的(generic):

.com; .edu ; .gov ; .int ; .mil ; .net ; .org
.firm ; .hsop ; .web ; .arts ; .rec ;

  • 国家的(countries)

.cn ; .us ; .nl ; .jp

  • 每个(子)域下面可划分为若干子域(subdomains)
  • 树叶是主机

    如何完成domain name 到 IP的转换

    2.4 DNS - 图1
    https://cs144.github.io/ 以这个地址为例,HTTP会首先将 dot io 交给根服务器,它会回复 dot io DNS服务器的地址,然后将.github.io交给.io的根服务器,可以得到.github.io的DNS服务器地址。最后将cs144.github.io交给.github.io的DNS服务器地址,它会回复我们需要的那个服务器的地址。
    除此之外,还有本地DNS,它会截获你的dot io请求,并且由他转发给以上服务器,它的作用主要是一个记忆化的作用(维护资源记录),减少查询的深度。
    Local DNS 会利用字典(resource record)维护domain name与ip address的映射关系。
    c <br /> class ResourceRecord(Object):<br /> def __init__(self,name,value,rtype,ttl):<br /> self.class = IN # 对于Internet而言,这个值是IN<br /> self.ttl = ttl # time to live 生存时间,也就是这个[domain]==>IP的有效时间<br /> self.type = rtype # rtype=>{A,CNAME,NS,MX}<br /> self.name = name # NS: name = domain name value是该域名的权威服务器的域名<br /> self.value = value # CNAME: name = alias value is 规范名字<br /> # A: name = host name value = IP<br /> # MX: name = domain name value = name对应的邮件服务器的名字<br />

    递归查询与迭代查询

    递归查询的话,根的负担太重了,各级查询都需要通过根来给本地服务器。
    而迭代查询的话,由本地dns负责联系各级dns,各级只负责返回下一级dns的IP地址

    DNS的维护问题==>新增一个域

    ## 攻击DNS ==> dns 还是挺耐草的
    image.png
    image.png
    image.png