互联网应用 -- WEEK.6

复习

上周学习了关于TELNET协议的内容,这是一种利用终端进行远程登录主机的协议。而telnet是基于这种协议的具体应用,我们需要学会telnet发送数据包的方式,包括指令和数据,以及他这种协商的方式。

Brief introduction to DNS

DNS就是用来ip地址和域名互相转化

我们之前学过的 gethostbyname 和 gethostbyaddr 本质就是利用DNS服务器进行查询

这是一个应用层的服务

域名(也就是通过ascii string组成的)一般被主机上的应用所用,这种也易于人读

但是网络只认识二进制地址,也就是ip,所以要互相转化

tip一下,还有mac地址和ip地址转化,这个一般存储在本地路由的APB表中

对于DNS的历史

最初的域名和IP的对应关系保存在一个叫做hosts.txt的文件中,每当有一个新的计算机想接入网络,或者某个计算机IP变更都需要来修改这个文件,其他计算机也需要更新才能上网。

随着ip数量不断变多,这样显然是不可行的,所以诞生了DNS

而DNS的数据是存储在分布式的数据库中,全世界都可以访问,至于为什么是分布式的待会说

但其实hosts.txt依然存在,计算机也会优先查询这个文件再使用DNS,我们使用cat可以看到

Elements of the DNS

Domain namespace

其实也就是域名的层次性结构,这样就可以达到唯一性
1. 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成
2. 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)
3. 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。
4. 级别最低的域名写在左边,级别最高的域名写在右边。
域名服务主要是基于UDP实现的,服务器的端口号为53。

 eg :我们熟悉的,www.baidu.com
1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
2. baidu: 二级域名,指公司名。
3. www: 只是一种习惯用法。

域名系统是一个树状的结构,他们被存储在分布式的数据库中,我们可以理解为一个地理上的区域对应他本地的域名,而本地又从属某个城市,某个国家,一层一层的分布存储。

顶级域名被简称为TLD(top level domain)

有几个顶级域名需要记一下,分为三种:国家,通用,和反向域名(arpa,用于ip获得域名,后面会提)

resource records

还记得上周的TLV吗,最后被填充在DHCP报文中的option字段

rr同样是一种编码形式,会在后面看到被填充到DNS报文中,我们先简单了解一下rr的格式及内容

反正我们需要知道一个域名对应多种资源:ipv4地址,ipv6,邮箱地址等等等等

具体看看例子

 

Name Service

我们刚刚提过,这个树状的结构,通过一个分布式的数据库来存储数据

域名服务器,就是运行这些数据库的服务器,也就是数据的仓库,域名是分层的,所以域名服务器也有好几种类型,参照下面的比喻理解一下,然后就可以理解DNS查询的过程

我们把DNS服务比喻成我去图书馆查一条信息(比如就是一个单词),同时要代入CS结构,我是client,图书馆就是server

Name resolvers:DNS解析器,解析器可以理解为特定图书馆的图书管理员,它会询问你的要求,然后传递给服务器。DNS本身也是一个服务器,它通过接受client使用的web浏览器发出的查询,发出其他请求,来实现client的dns查询。所以它相当于DNS的client

Root name server:根域名服务器可以理解为图书馆的索引或者导航,告诉你不同类型的书架在哪里,这是ip查询的第一步

TLD name server:顶级域名服务器,可以看作一个特殊的书架,这个书架上是一种类型的书,这是ip查询的下一步

Primary server / Authoritative server:权威服务器,可以看作这就是书架上你要找的那本书,里面就有你需要的信息。权威服务器是IP解析的最后一步,如果成功查询,就会返回给发出初始请求的Name resolver

Secondary server:维护权威服务器数据库的副本,可能就是为了数据安全吧

Caching server:如果一些ip经常查询,就会被缓存下来。但这种查询的结果不是权威的

简单梳理一下DNS查询过程:

1.首先搜索浏览器自身的DNS缓存,如果存在,则域名解析到此完成。
2.如果浏览器自身的缓存里面没有找到对应的条目,那么会尝试读取操作系统的hosts文件看是否存在对应的映射关系,如果存在,则域名解析到此完成。
3.如果本地hosts文件不存在映射关系,则查找本地DNS服务器(ISP服务器,或者自己手动设置的DNS服务器),如果存在,域名到此解析完成。
4.如果本地DNS服务器还没找到的话,它就会向根服务器发出请求,进行递归查询。

后面提了一句话:TLD服务器通常缓存在本地名称服务器中,所以根服务器很少用到

DNS Services

这里主要理解一下递归查询和迭代查询的区别

递归可以看到,local服务器会一直等到结果出来才给你回应

迭代则是踢皮球一样,告你接下来去找谁

 

当然,DNS也可以反向查询,也就是用资源来查域名,有两种方式:

Inverse query vs. Pointer query

区别就是 Inverse利用的是跟标准查询一样的域,可能需要搜索整个服务集

pointer用的是 IN-ADDR.ARPA domain

DNS Protocols

我们主要看一下DNS的报文结构,后面需要跟前面提到的RR关联一下,这里需要理解到,域名对应很多资源,且一次查询也可以同时查好几个(问好几个问题,所以这里面有answer count等等)

 

 

 

DNS tools

一个是 nslookup 正向查询

一个是 dig 反向查询(pointer)

最后给了一些例子

我们看一下这个,要查询的是BRL.MIL,但是如果发送给了C.ISI.EDU,得到的响应如下

首先他们是不对应的,所以没有answer

但是他给出了权威服务器的记录,可以看到有一个包含EDU的,也就是和我们问的问题相关的权威服务器

在addtition区域将权威服务器的信息给了出来 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值