DNS协议(一)
在互联网上要想与另外一台主机通信,要知道对方的IP地址,但是IP地址是很难记忆的,
比如百度的一台服务器的IP地址为115.239.210.27,我们在浏览器中输入http://115.239.210.27/就可以访问百度了,但是如果访问一个网站就要记住它的的IP是很蛋疼的事,人们习惯记住有意义的字符串,比如baidu。
域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。
DNS服务是如何实现的呢?
首先我们的电脑里面都会有一个DNS服务器(Name Server)的IP地址,可以手动设置也可以自动获取,有名的DNS服务器包括google的8.8.8.8 阿里巴巴的223.5.5.5等,查看自己电脑的DNS服务器的IP地址可以在windows命令行下输入ipconfig /all,在linux下面则通过more /etc/resolv.conf查看。
客户端发起访问请求www.163.com:
1.查看本地hosts文件,发现没有www.163.com IP 映射关系,将请求发送给本地DNS服务器( ----递归查询----)
2.本地DNS服务器不包含163.com的权威域,不存在对应的www记录,因此将请求转发到根域名服务器(假如 a.root-servers.net.)
3.根域名DNS服务器会返回负责.com域解析的服务器(假如 a.gtld-servers.net.)给本地DNS服务器,本地DNS服务器再将请求发送给 a.gtld-servers.net
4..com域名服务器只能返回负责163.com域的解析服务器(如 ns1.nease.net.)给本地DNS服务器,本地DNS服务器再将请求发送给ns1.nease.net.
5.由ns1.nease.net.域名服务器返回www.163.com 的 IP映射关系给本地DNS服务器
(2-5过程)----迭代查询----
6.本地DNS服务器将结果保存到本地缓存,并保持TTL时间,同时将结果应答给客户端.
7.当其他客户端再次向本地DNS服务器查询www.163.com时,在TTL时间内,本地DNS服务器不再向根域名服务器转发请求,而是直接从缓存中读取数据应答给客户端. 如果已经超过TTL时间,则本地DNS服务器会再次经历一次上诉2-6的过程.
以后会结合Wireshark分析DNS报文的每个字段详细意思,以及DNS查询的其它细节问题。
【参考文献】
http://magic3.blog.51cto.com/1146917/1354084
http://www.360doc.com/content/11/0809/17/706976_139190573.shtml
http://zh.wikipedia.org/zh/域名系统