很多人没有dns的概念,或者仅仅知道dns负责解析从域名到ip地址,这对普通人来说,也许是够的,但对于开发者来说,就远远不够了。

很多中高级开发者的眼中的DNS是这样的(以百度为例):

读取hosts文件(位于C:\Windows\System32\drivers\etc)--->isp-dns

总的过程是没有问题,但忽略了很多细节。下面我们就深入的探讨一下:

1.dns的访问过程

(以window为例)

浏览器-->window缓存-->hosts文件-->DNS服务

1.1.浏览器(以chrome为例)dns

chrome://net-internals/#dns

1.2 window 本身缓存

1.3 hosts文件

位于C:\Windows\System32\drivers\etc,不再赘述。注意,一个域名可以配置多个ip地址,一个ip也可以配置多个域名上。

1.4. ISP-DNS

nslookup解析

C:\Users\dell>nslookup www.baidu.com
服务器: ns-pd.online.sh.cn
Address: 202.96.209.133 非权威应答:
名称: www.a.shifen.com
Addresses: 115.239.210.27
115.239.211.112
Aliases: www.baidu.com

>>上海电信的服务,ip地址为202.96.209.133

>>百度的别名为:www.a.shifen.com

>>对应的ip地址为

115.239.210.27
115.239.211.112
两个ip地址起到灾备和负载均衡的作用

更多详细的信息可以使用dig +trace命令(window本身不支持dig命令,需要额外安装,请自行搜索windows下的dig安装过程,不再赘述)

2.dns报文深度解析

浏览器访问www.baidu.com,使用wireshar进行抓包,并保存。

Wireshark(前称Ethereal)是一个网络报文分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

单独分析抓取的dns报文:

2.1 请求报文

request报文:

报文的详细内容如下:

0000   00 00 5e 00 01 d4 48 8a d2 9d d9 29 08 00 45 00   ..^...H....)..E.
0010 00 3b 38 d4 00 00 40 11 ac 50 ac 10 4d 97 ca 60 .;8...@..P..M..`
0020 d1 85 ca d1 00 35 00 27 ed 5d f5 ac 01 00 00 01 .....5.'.]......
0030 00 00 00 00 00 00 03 77 77 77 05 62 61 69 64 75 .......www.baidu
0040 03 63 6f 6d 00 00 01 00 01 .com.....

响应报文

报文详情:

0000   48 8a d2 9d d9 29 48 8e ef e1 c2 05 08 00 45 00   H....)H.......E.
0010 00 76 38 d4 00 00 2e 11 be 15 ca 60 d1 85 ac 10 .v8........`....
0020 4d 97 00 35 ca d1 00 62 fc a4 f5 ac 81 80 00 01 M..5...b........
0030 00 03 00 00 00 00 03 77 77 77 05 62 61 69 64 75 .......www.baidu
0040 03 63 6f 6d 00 00 01 00 01 c0 0c 00 05 00 01 00 .com............
0050 00 01 ec 00 0f 03 77 77 77 01 61 06 73 68 69 66 ......www.a.shif
0060 65 6e c0 16 c0 2b 00 01 00 01 00 00 01 2c 00 04 en...+.......,..
0070 73 ef d2 1b c0 2b 00 01 00 01 00 00 01 2c 00 04 s....+.......,..
0080 73 ef d3 70 s..p

2.2.数据封装过程

数据封装一般分五层,第一层是应用层协议的数据,第二层分别是TCP封装,第三层IP封装,第四层以太网封装,最后转成二进制的物理报文

2.2.1 dns报文协议

分析一下请求报文

详细信息可以参考附录【3】

2.2.2 UDP协议封装

udp报文格式

其对应的封装如下

2.2.3 ip报文封装

ip报文格式

2.2.3 以太网协议

源mac+源mac地址+协议类型

3.总结

  dns是上层协议,和http,ftp等协议是一层的,如下图所示

  dns报文的封装是基于UDP的,udp之下是ip的封装,ip又基于以太网的封装,最终转成二进制信号发送出去。

参考资料

【1】https://www.howtogeek.com/197804/how-to-clear-the-google-chrome-dns-cache-on-windows/

【2】https://www.cnblogs.com/liyuanhong/articles/7353974.html

【3】https://blog.csdn.net/tianxuhong/article/details/74922454

【4】https://blog.csdn.net/kernel_jim_wu/article/details/7447377

你所忽略的DNS---DNS实战及深度解读的更多相关文章

  1. [Tensorflow实战Google深度学习框架]笔记4

    本系列为Tensorflow实战Google深度学习框架知识笔记,仅为博主看书过程中觉得较为重要的知识点,简单摘要下来,内容较为零散,请见谅. 2017-11-06 [第五章] MNIST数字识别问题 ...

  2. Reading | 《TensorFlow:实战Google深度学习框架》

    目录 三.TensorFlow入门 1. TensorFlow计算模型--计算图 I. 计算图的概念 II. 计算图的使用 2.TensorFlow数据类型--张量 I. 张量的概念 II. 张量的使 ...

  3. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  4. 1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)

    学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节. 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https:/ ...

  5. 【书评】【不推荐】《TensorFlow:实战Google深度学习框架》(第2版)

    参考书 <TensorFlow:实战Google深度学习框架>(第2版) 这本书我老老实实从头到尾看了一遍(实际上是看到第9章,刚看完,后面的实在看不下去了,但还是会坚持看的),所有的代码 ...

  6. TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤

    一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...

  7. 学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

    TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用.<TensorFlow:实战Google深度学习框架(第2版)>为TensorFlow入门参考书,帮助快速. ...

  8. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...

  9. 【转载】深度解读 java 线程池设计思想及源码实现

    总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...

随机推荐

  1. PHP开发者常用的正则表达式及实例【长期更新收录】

    正则表达式在程序开发中是非常有用的,用好正则我们可以搜索.验证及替换文本或任何类型的字符.在这篇文章中,UncleToo为大家搜集了15个开发过程中常用的PHP正则表达式.函数及PHP示例,学习这些你 ...

  2. Spark学习之Spark Streaming

    一.简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用,还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它 ...

  3. eShopOnContainers 知多少[7]:Basket microservice

    引言 Basket microservice(购物车微服务)主要用于处理购物车的业务逻辑,包括: 购物车商品的CRUD 订阅商品价格更新事件,进行购物车商品同步处理 购物车结算事件发布 订阅订单成功创 ...

  4. CSS 圣杯布局 / 双飞翼布局的实现

    工作的越久,有些基础知识我们可能就逐渐淡忘了,今天我们来回顾一下css的圣杯布局和双飞翼布局, 这两个名词你可能不熟, 那三栏布局你肯定就非常熟悉了, 就是两边定宽, 中间自适应 的 布局 1 , 圣 ...

  5. DownEditTextView【自定义Edittext对Android 软键盘向下的监听】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录自定义EditText控件实现监听软键盘隐藏事件的功能.基本上和参考资料相同. 效果图    代码分析 自定义EditText子 ...

  6. 十问 JVM

    今天我们来讨论下 Java 虚拟机,通过一系列常见的问题来逐渐深入了解 JVM 创建对象过程,内存布局,类加载以及 GC 回收算法等机制. 十问 JVM 问题整理: Java虚拟机创建对象的过程 (使 ...

  7. Python进阶:设计模式之迭代器模式

    在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...

  8. [深度应用]·实战掌握Dlib人脸识别开发教程

    [深度应用]·实战掌握Dlib人脸识别开发教程 个人网站--> http://www.yansongsong.cn/ 项目GitHub地址--> https://github.com/xi ...

  9. asp.net core 系列之并发冲突

    本文介绍如何处理多个用户并发更新同一实体(同时)时出现的冲突 . 主要是两种:一种,检查属性并发冲突,使用 [ConcurrencyCheck] ;另一种,检测行的并发冲突,使用 rowversion ...

  10. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...