一,概括介绍:
dns是互联网的一项服务。它作为将域名和ip地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。dns使用tcp和udp端口53.对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
二,dns什么时候使用tcp,什么时候使用udp?
一般区域传送用tcp ,域名解析时使用udp协议。dns的规范规定了2中类型的dns服务器,一个叫主dns服务器,一个叫辅助dns服务器。在一个区中主dns服务器从自己本机的数据文件中读取该区的dns数据信息,而辅助dns服务器则从区的主dns服务器中读取该区的dns数据信息。当一个辅助dns服务器启动时,它需要与主dns服务器通信,并加载数据信息,这就叫做区传递(就是所谓需要用tcp进行传输)。还是就是当传输的字节超过512个字节的时候,会用tcp进行传输。
所以可以归纳就是在dns服务器之间数据同步用tcp,而进行域名解析的时候用udp。
三,dns 报文格式
”需要注意的地方就是请求报文已经响应报文具有统一的格式“。
Header报文头 (共12个字节)
Question查询的问题
Answer应答
Authority授权应答
Additional附加信息。
具体里面字段含义请参考:
https://zhuanlan.zhihu.com/p/104136066
http://c.biancheng.net/view/6457.html
四,dns执行流程:
(1)本地需要域名解析的程序(例如浏览器)会调用本地的host文件进行查询,如果没有会调用本机的dns客户端(一般操作系统都会默认安装的)并且传入需要查询的域名。
(2)dns客户端向dns服务器端发送一份查询报文,报文中包含要访问的主机名字段。(这里的dns服务器就是你配置ipv4中首先的域名服务器地址)
(3)dns客户端会收到一份回答报文,其中包含有该主机名对应的ip地址。
(4)dns客户端会把结果返回给调用域名解析程序(一般指浏览器)
补充:一般为了加速访问dns服务器,我们一般会自己在网关服务器上面搭建本地的dns服务器(例如linux 用bind9软件),一般我们本地搭建的服务器会缓存域名和ip的映射关系。如果本地dns服务器没命中,那么会继续透传到互联网dns服务器上。
补充1:混合压缩
答:当你解析dns的answer部分的时候,name项有的时候会是2个字节指针,有的时候会字符串,有的时候,会一部分是字符串和2个字节(指针)的结尾。在解析的时候需要根据不同的情况解析。
补充2:在dns的answer多条记录中,往往第一条记录会处理CNAME.,而不是具体的ip地址。这是因为你请求的域名和真实的域名之间还需要进行一次映射导致的。
还在学习研究中,先记录对应的网址。待补充