聊聊host中ip/域名映射记录的解析规则
今天宝叔突然在群里发了个问题;
host做如下配置,a.com会指向哪里?或者说ping一下a.com结果会是什么?
127.0.0.1 a.com
192.168.4.106 a.com
192.168.4.105 x.com a.com
192.168.4.107 a.com x.com
127.0.0.1 a.com
what?host自上而下解析啊,这不妥妥的127.0.0.1么,一测试,啪啪啪的打脸了。。。输出的是192.168.4.106,为啥?
以下结论仅针对windows系统,linux系统的暂时还未测试,后面补充
先上结论
首先先上一下经过自己测试总结得出的结论,解决你的问题,如果你有兴趣,可以再往后看具体的解决流程(图有点多)
host配置:
ip 域名a 域名b 域名c
先看下基本测试结论
1、host的解析首先是自上而下的
2、同域名多条记录的时候,首域名记录(域名a这种)的优先级高于非首域名记录(域名b/c这种)
3、同样紧邻ip的 多条同域名记录,优先级遵循第一条,且 非127.0.0.1的优先于127.0.0.1的
4、同域名多条记录且均不紧邻ip的,遵循第一条
5、0.0.0.0 会产生主机记录但ping不通,因此不计入优先级计算范围
然后我们在细看一下
首先host文件会解析出多种域名ip的映射记录,大致有“A(主机)记录”记录、“CNAME”别名记录、PTR记录等。前两种用于域名正向解析,即从域名到ip,后面一种用于ip逆向解析即从ip找域名。今天说的主要是正向解析,暂时忽略PTR记录,来看下A主机记录和CNAME别名记录,如下
a.com
----------------------------------------
记录名称. . . . . . . : a.com
记录类型. . . . . . . : 1
生存时间. . . . . . . : 0
数据长度. . . . . . . : 4
部分. . . . . . . . . : 答案
A (主机)记录 . . . . : 192.168.4.106
a.com
----------------------------------------
记录名称. . . . . . . : a.com
记录类型. . . . . . . : 5
生存时间. . . . . . . : 0
数据长度. . . . . . . : 8
部分. . . . . . . . . : 答案
CNAME 记录 . . . . . : b.com
A主机记录即首域名(紧邻ip的域名)映射产生的记录,别名记录即非首域名映射到首域名上的记录。这两类记录大致遵守以下规则:
1、记录生成顺序自上而下且不覆盖,
2、同一域名可能产生多条主机记录和别名记录,
3、主机记录优先级高于别名记录,
4、多条主机记录中,非127.0.0.1和0.0.0.0的ip主机记录优先级最高,其次是127.0.0.1的,最后是0.0.0.0,但是当仅有0.0.0.0的记录时,你会发现是ping不通的;
再回头看一下之前的基本结论就比较容易理解了~~,然后根据这个结论在看前面的问题就很明显了,妥妥的192.168.4.106
再看过程
接着我们聊一下我们的探寻思路。
首先,host文件的作用大家都清楚的,加速及实现域名解析。说加速可以从浏览器解析域名的流程的角度来理解,正常情况下浏览器输入一个url之后会去做域名解析找到对应的IP,这个解析过程一般会经过
- 浏览器DNS缓存
- 本地host配置
- DNS服务器
- 上层root server
等几个流程(前面一个流程解析到了就返回)。在host中配置之后相当于提前了一步域名的解析,也就是我们说的加速。解析就不必说了,实现域名到ip的转换,比如一些内部域名,没有做外网解析,这个时候如果系统内部没有相应的DNS服务器去做解析,那就去配host吧。
日常开发中,改host一般就是新加一条
192.168.4.106 a.com
但是,经常改的话就会出现最前面的问题,一堆重复的配置,最终究竟该解析到哪里?
怎么解?第一个想到的肯定是测试啊,清空host(记得备份。。。),只保留一下配置
127.0.0.1 a.com
这个时候,在命令行窗口输入ipconfig /displaydns,这个命令会显示DNS解析程序缓存的内容(windows下的),下一篇说下相近的几个命令,要不这里太长了。。。
这是可以得到如下结果
这个时候我们ping一下a.com,会发现a.com指向了127.0.0.1。接下来我们再改下host
127.0.0.1 a.com
192.168.4.102 a.com
再命令行先输入ipconfig /flushdns清一下dns的缓存,再ipconfig /displaydns会发现
在ping一下
继续改host
127.0.0.1 a.com
192.168.4.102 a.com
192.168.4.103 a.com
继续清DNS缓存,查DNS缓存
从这几个,我们就可以得出我们的前两条结论
host的解析首先是自上而下的
非127的优先于127.0.0.1的
然后我们继续改,继续打脸。。。
127.0.0.1 a.com
192.168.4.102 test.com a.com
192.168.4.103 a.com
你猜输出啥,上图
这个时候a.com解析到了两个部分里面,一部分是红色圈出的“A(主机)记录”,一部分是“CNAME”记录,主机记录也就是默认解析了。CNAME记录又是啥?CNAME记录意味着多个域名映射到了一个IP上,这时只有ip后面紧邻的域名(首域名)会生成“A(主机)记录”,而其他后续的域名会解析成首域名的别名记录,也就是CNAME记录。而CNAME记录在dns解析中的优先级是低于“A(主机)记录”的。
这也就得出了另一条结论,
同域名多条记录的时候,域名紧邻ip(域名1这种)的优先级高于非紧邻的(域名2/3这种)
然后,继续改host
127.0.0.1 a.com
192.168.4.102 test.com a.com
192.168.4.103 c.om a.com
在改
127.0.0.1 a.com
0.0.0.0 a.com
192.168.4.102 test.com a.com
192.168.4.103 c.om a.com
在改
0.0.0.0 a.com
127.0.0.1 a.com
192.168.4.102 test.com a.com
192.168.4.103 c.om a.com
我就不截图了,有点多,可以发现
0.0.0.0的映射虽然可以产生一条主机记录但是本身不起作用的,只配置0.0.0.0 a.com的时候,是ping不到a.com的
综上我们就大致的出了本文的结论啦,大家有兴趣可以自己在试一下,如有错误欢迎指出~
聊聊host中ip/域名映射记录的解析规则的更多相关文章
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录(转)
http://www.cnblogs.com/LittleHann/p/3828927.html 相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3 ...
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题
首先要做的就是配置域名的MX 记录啦: 先添加一条A记录: mail.abc.com 指向 你的服务器IP! 然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为 ...
- 外网域名映射内网Ip 内网使用外网域名的https证书
用nslookup www.baidu.com nslookup www.qq.com 15.64.64.53 测试了内网的dns可以解析外网域名 那么我买个外网域名,再对这个外网域名买个证书,然后外 ...
- 如何在Mininet中修改host的IP地址
how to update virtual host's IP in mininet? I got it! do like this: mininet> py h1.setIP('10.0.0. ...
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录
相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw ...
- 本地nginx多域名映射
前言: 工作两年多了,一直感觉技术上没有太大的长进,好多东西感觉会但是给别人讲起来的时候又感觉和没学过一样.以后希望能坚持写博客,把看过的东西都一点一滴积累下来.言归正传,今天要说的是nginx与ho ...
- 通过配置host,自定义域名让本地访问
最近服务器这块一直由我来维护,我们开发的项目很多域名根本没有解析,而是仅仅配置了host,就可以本地访问服务器了.感觉很有意思,于是乎,打算试一试.结果弄了许久,最后第二天才解决了.把这个艰辛的旅程记 ...
- Charles系列三:Charles打断点(包含修改请求,修改返回的内容),模拟慢速网络(弱网测试),域名映射,过滤请求,接口调试,打压测试
一:Charles断点的使用(包含修改请求,修改返回的数据) 设置断点来修改请求和返回的数据,在开发过程中可以模拟多种响应.步骤如下: 1.添加断点方法有两种: 方法1:找到Charles中菜单项Pr ...
- win7下IIS配置以及域名映射方法
win7下IIS配置以及域名映射方法 第一步:打开控制面板,选择程序与功能,如下图: 第二步:双击打开程序与功能面板,如下图: 第三步:打开”打开或关闭windows功能”(红线圈起来的地方),如下图 ...
随机推荐
- ansible 回调函数处理
https://www.u3v3.com/ar/1421 https://serversforhackers.com/c/running-ansible-2-programmatically
- D3基础--数轴
转载请注明出处! 概述: 与比例尺类似,D3的数轴实际上也使用来定义参数的函数.但与比例尺不同的是,调用数轴函数并不会返回值,而是会生成数轴相关的可见元素.包括:轴线,标签和刻度. 但是要注意数轴函数 ...
- MVC知识点
一· MVC MVC设计模式->MVC框架(前端开发框架),asp.net(webform) aspx M:Model (模型,负责业务逻辑处理,比如说去db中获取数据) V:View (视图 ...
- OpenGL开发入门
1.OpenGL简介: OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计.该API ...
- java的内存区域
java的内存区域分为程序计数器.java虚拟机栈.本地方法栈.java堆.方法区.运行时常量池. 1.程序计数器 2.java虚拟机栈 3.本地方法栈 4.java堆(新生代和老年代) 5.方法区( ...
- myeclipse 10安装之后该做些什么?
@破解 http://files.cnblogs.com/files/zyuqiang/MyEclipse%E7%A0%B4%E8%A7%A3%E6%96%87%E4%BB%B6.rar @修改字体 ...
- python学习之老男孩python全栈第九期_day019作业
# 计算时间差 import time start_time = time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S' ...
- css 样式加载次序
一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字 4 拥有最高的优先权(本人理解为:先加载1的样式,然后用2的样式覆盖1中的样式,3.4同理) 浏览器缺省设置(浏览器默认的样式 ...
- 使用js在HTML中自定义字符串格式化方法
Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...
- JavaScript如何比较两个数组的内容是否相同【转】
比较2个数组是否相等的. 不能像字符样 简单的用 == === 比较 ([]==[]); // false ([]===[]); // false 都是false -------------- ...