DNS协议分析
DNS(Domain Name System,域名系统), DNS通过域名和IP地址相互映射的一个分布式数据库,使易记的域名替代了枯燥的IP地址。在因特网中向主机提供域名解析服务的机器即为DNS服务器。DNS是基于IP协议中的UDP协议,端口号为53。目前,DNS分布式查询方式一般采用递归或递归迭代相结合的方法获得域名和对应的IP。
首先通过nslookup命令进行DNS查询工作:
这里可以看到,我的本地DNS服务器为ns.jxncppt.net.cn(江西南昌电信),IP地址为202.101.224.69。我所搜索的百度(www.baidu.com)真实域名为www.a.shifen.com(但这一域名地址无法ping通,也不能直接访问),IP地址有119.75.217.56和119.75.218.77,别名仍为www.baidu.com。
通过Wireshark获得的DNS数据包如下:
其中有几个帧完成了DNS工作:
(1)我向本地DNS服务器发送了一个请求帧,
源端口:64459,我电脑上的端口号;
目的端口:domain(53),DNS默认端口哈号;
请求:69.224.101.202.in-addr.arpa:type PTR,class IN,反向域名解析,请求获得本地DNS服务器域名;
(2)本地DNS服务器返回一个响应帧,
响应:最后一行数据即显示了响应帧的回复内容,本地DNS服务器域名为:ns.jxncppt.net.cn。
(3)我向服务器请求获得www.baidu.com的IP地址,
请求:请求获得www.baidu.com的主机IP地址;
(4)本地DNS服务器返回一个响应帧,
此时,本地DNS服务器并未直接返回www.baidu.com的地址,而是回复了一个“Authoritative nameservers(权威域名服务器?)”,这是一个SOA(原始权威服务器)类型的内容,其中包含了Time to live(生命周期),Data length(数据长度),Primary name server(主域名服务器),Responsible authority‘s mailbox(负责的授权邮箱?),Serial number(版本号),Refresh interval(刷新间隔),Retry interval(重试间隔),Expiration limit(超时限制),Minimum TTL(最小生命周期)。
于是,我再次发送请求帧,并最终得到了我想要的IP地址,
百度(www.baidu.com)别名:www.a.shifen.com,尽管由于安全问题,这一域名并不能成功登陆百度;
百度IP地址:119.75.217.56和119.75.218.77,IP地址均为北京,我使用的百度的服务器在北京啊~
记得当年键入的百度超长域名“妈妈说就算你注册的域名再长百度都能搜索出来”(http://www.mamashuojiusuannizhucedeyumingzaichangbaidudounengsousuochulai.cn/),于是便也nslookup了一下,探探究竟。
百度超长域名的IP地址:49.247.252.57(韩国),这个IP并不能登陆,应该是非官方作为了。
DNS协议看似简单,其中却包括了大量的信息,对各种TYPE,CLASS的了解还有待时日~~