Linux ,c/c++, web,前端,php,js
分类: 系统运维
2014-03-12 09:58:22
原文地址:简单聊聊Dns如何工作的 作者:up哥大号
随便聊聊
我们知道,网络上传输的数据包是一层一层的包起来的
(典型的是mac地址层,ip层,tcp/udp层,应用层数据 这么几个层)
那用户在浏览器中打开的后端服务器呢?
我们这个数据包没有ip层的目标ip啊,http请求怎么知道往哪里发?
这个时候,dns系统就介入了,dns系统首先会把这个地址给找出来!
Dns系统主要是依靠权威dns,和递归dns来工作的,那权威dns和递归dns都是干嘛的呢?
权威dns(Authority dns)
首先我们来聊一聊权威dns。
权威dns做的事情主要是管理某个或多个特定域的dns服务。
一般大一点的公司,都有自己的权威dns
比如所有”.alipay.com”结尾的域名都由alipay来管理
所有”.alibaba.com”结尾的域名都由alibaba来管理(alipay和alibaba实际又是同一家公司来管理)
所有“.baidu.com”结尾的域名都由baidu来管理
Alibaba和baidu各管各的,没有交互。
那整个域名系统,如何跑起来的呢,不然你说你管理alibaba.com的所有域名,我说我也管理alibaba.com的所有域名,不就乱套了么。
光说是没有用的,必须要到相关注册局机构去注册。
(1) 最上面是根域。
(2) 一级域要去根上注册,像com域,net域就属于一级域
Com域(也就是所有以“.com”结尾的老祖com域)要去根上注册com域的域名服务器(nameserver)列表。
Net域(也就是所有以”.net”结尾的老祖net域)要去根上注册net域的域名服务器(nameserver)列表。
….
那你说a.b.c这个域名的一级域是谁,当然是“c”了,但是c域就没有在根上面去注册,所以这个域名是个无效的域名。
(3) 二级域一般要到一级域上去注册
alibaba.com要到com域去注册自己的域名服务器nameserver列表
Baidu.com也要到com域去注册自己的域名服务器nameserver列表
这样的一些实际管理域名系统的dns都是权威dns
就这样一级一级的注册。整个域名系统就连起来了,就变成了这么个东西
所以dns叫做分布式的域名系统,分布在世界上面的各个管理域名的公司或机构
(有些情况用户只想简单的把自己的ip转化为某个域名,而不想管理整个域,那这个时候他就可以去买域名,有些公司是专门卖域名的。比如alibaba.com完全可以卖任何以“.alibaba.com”结尾的域名,只是alibaba.com不会这么干,这样做一些钓鱼网站来挂自己的网站,也以alibaba.com结尾的话,用户不就很容易被钓鱼了么,,比如我支付宝付款的时候我只看跳转后的域名是否是以alipay.com结尾的,如果不是我就不敢付款)
递归DNS(Recursion DNS)
那用户访问,请求又是如何到alibaba的权威dns服务器上面找到的ip呢?
这个时候递归dns(我们一般叫做local dns)就介入了。
用户首先要直接配置自己的dns服务器,一般你拨号上网,或者在公司里面上网,我们windows系统都已经预想配置好了递归dns服务器的ip地址,当然自己也可以修改
RHEL Linux系统是/etc/resolv.conf配置文件来配置。
一个用户访问的过程如下(可放大图片观察)
其中有几点补充
聊聊dns攻击
我们顺便聊聊dns攻击问题,典型的有拒绝服务攻击,dns劫持等。
如有错误,欢迎指正。