Windows下模拟dns迭代查询过程

news/2024/11/8 15:30:54/

目录

dns解析过程

迭代与递归


dns解析过程

        当在浏览器的搜索栏输入URL(统一资源定位符)时,浏览器的解析过程

        

 完整解析

当在浏览器输入某一IP地址时

(1)浏览器查看查看缓存表里有没有对应的域名解析记录,查看是否能够命中

(2)同时查看本地文件主机文件里有没有对应记录 windows中(c:\windows\system32\drivers\etc\hosts)Linux中(/etc/hosts)

(3)浏览器为了进行域名解析,会调用解析器,若用c语言代码来表示会有这样的代码段

gethostbyname("www.baidu.com")     #后跟需要解析对应IP的域名

解析器(代码,程序)可以帮助浏览器调用系统的网络功能,然后解析器就相当于DNS客户端,向DNS服务器查询IP地址,则解析器就会向本地DNS服务器发送请求,如何向我们的DNS服务器取得联系呢?

可以在电脑的网络设置里查询到自己的DNS服务地址

 也就是说电脑里存在这个本地DNS服务器IP地址,可以直接联系,在实际生活中 最近的DNS服务器往往是家里的路由器,而本地服务器(路由器)一般有ISP(中国电信,中国联通等等)管理,本地dns服务器收到请求后会先查看自己的缓存,如果有,就会返回对应的IP地址,并且会标注非权威(non-authoritative) 因为本地域名服务器不像.com等控管域名,若是.com等管控域名返回对应的ip则会标记为(authoritative)

接下来步骤由本地dns服务器独立完成,在这里用cmd命令行模仿一下后面的迭代查询过程

假设www.baidu.com 在本地中没有被缓存,我们模仿下后面如何查询到对应的IP地址

nslookup
set type=ns   ###设置查询类型,为名称服务器(name server)
.            ###查询根服务器的域名

查询出根服务器的域名共13个,接下来需要知道对应的IP地址才可以进行通话,于是

set type=a   ###设置查询对应的IP地址格式为IPV4
b.root-servers.net.    ###得到b域名对应的IP地址

 于是我们就和这个b根域名服务器建立会话,进行联系

server 199.9.14.201   ###与b服务器建立会话连接
set type=ns           ###设置在根域名服务器下的查询模式
com.                  ###向根域名服务器自选com域名服务器的IP地址

 此时gtld表示(通用顶级域名) 从这么多个顶级域名服务器选取一个b继续询问二级域名信息

 这里可以看到baidu.com.的域名服务器有五个,为ns1,2,3,4,7 接下来与ns2这个域名服务器建立会话

 这里有个cannoical name 也为cname 常常表示为域名的跳转 也就是访问www.baidu.com会跳转到www.a.shifen.com. 于是想要得到www.baidu.com对应的IP地址则

 就这样得到了我们最后的结果 也就是www.baidu.com对应的IP地址,然后本地dns服务器得到这个IP地址后会返回给我们的解析器,当然也会把对应的解析记录给缓存起来,解析器接着把地址给浏览器,最后浏览器就可以通过IP地址去进行网页的连接了 这就是整个解析过程

迭代与递归

        递归查询是浏览器与本地dns服务器之间采用递归,而迭代查询则是由本地dns服务器与三层服务器用的是迭代查询

 

 递归查询与迭代查询类似于a学生问题     

递归查询:a学生问b学生,b学生不知道问老师,老师回答b学生,b学生回答老师  

        在这个过程中a学生只问了一次

迭代查询: a学生问b学生,b学生不知道,a学生又问老师,老师解答a学生 

        这个过程中全程是a学生在问  

而a学生就类似于本地域名服务器

 


http://www.ppmy.cn/news/853831.html

相关文章

联通132通话详单查询 js滚动表头 原理分析

今天查了下我132手机的通话话费记录, 方法:初始你联通手机的密码,发送短信y977480x000000 到1063381234 来初始化查询的密码 977480换为你手机的后六位,000000换为你要修改的密码。发送完短信后,你会立马收到一条修改密…

北京联通sip话机安装指导

前几天去营业厅交宽带费,顺便把固化也开通了,北京联通的固化是没有月租的,给个固化号码,还挺好记的。 当天师傅就上门了,在APP上设置了几下,也就5分钟倒腾好了,安上话机后拨打接听都没有问题。…

uni-app获取通话记录 自定义基座打包能成功获取

// 获取通话记录var CallLog = plus.android.importClass("android.provider.CallLog");var main = plus.android.runtimeMainActivity();var obj = main.getContentResolver();plus.android.importClass(obj);//查询var cursor = obj.query(CallLog.Calls.CONTENT_U…

获取通讯录、通话记录、短信

获取通讯录&#xff1a; private ArrayList<String> getPhoneNum(Context context) {ArrayList<String> numList new ArrayList<String>();ContentResolver cr context.getContentResolver();Cursor cursor cr.query(ContactsContract.Contacts.CONTENT_U…

API对接实战:外呼接口及通话记录推送

在白码低代码开发平台上对接七陌外呼接口,实现选择客户进行外呼,并保存通话记录的功能。 外呼接口实现 官方接口文档:http://developer.7moor.com/v2docs/dialout/ 1、对接数据查询 向七陌商务索取到七陌用户中心账号密码,在查询页面查询到三个参数 let accountId = &q…

大数据实战-callLog项目(通话记录数据分析)之数据分析

文章目录 前言mysql表结构设计db_telecom.tb_contactsdb_telecom.tb_calldb_telecom.tb_dimension_date 建表语句导入基础数据姓名手机号映射时间维度表 Meaven依赖 HBaseMaven依赖mapperreducer自定义输出OutputFormatMyRecordWriter私有属性初始化操作 设置job运行 博客链接 …

Git 常见问题

Git 常见问题 Git 常见问题分支没有跟踪信息通常错误信息提示如下&#xff1a;解决方案 Git 常见问题 分支没有跟踪信息 如果在执行 git pull 时出现这个错误信息,通常是因为当前分支没有设置跟踪信息,Git不知道应该去哪个远程分支拉取代码。 通常错误信息提示如下&#xff…

javascript提取联通个人信息和通话记录的代码

由于一些巨大的困难&#xff0c;一些后端爬虫改成了前端爬虫。 前端爬虫是只有js语言&#xff0c;后端爬虫有python java nodejs php这些语言。 前端爬虫有window.document对象&#xff0c;在浏览器端的爬虫即使是二次发送ajax&#xff0c;也不需要学后端爬虫来构造一堆请求头&…