在找工作面试的过程中,面试官非常喜欢考察基础知识,除了数据结构与算法之外,网络知识也是一个非常重要的考察对象。

而网络知识,通常是很抽象,不容易理解的,有很多同学就在这里裁了跟头。为了更好地通过面试,本文讲进行一次网络知识大扫盲,聊一聊网络知识最基本的DNS。

网络知识扫盲,一文搞懂 DNS
DNS 是什么?
DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址。

你可以把它想象成一本巨大的电话本,比如当你要访问域名www.163.com,首先要通过DNS查出它的IP地址是112.48.162.8。

网络知识扫盲,一文搞懂 DNS
域名的层级
由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解

根域名 :.root 或者 . ,通常是省略的

顶级域名,如 .com,.cn 等

次级域名,如 baidu.com 里的 baidu,这个是用户可以进行注册购买的

主机域名,比如 baike.baidu.com 里的baike,这个是用户可分配的

主机名.次级域名.顶级域名.根域名

baike.baidu.com.root

网络知识扫盲,一文搞懂 DNS
DNS 解析过程
咱们以访问 www.163.com 这个域名为例,来看一看当你访问 www.163.com 时,会发生哪些事:

先查找本地 DNS 缓存(自己的电脑上),有则返回,没有则进入下一步

查看本地 hosts 文件有没有相应的映射记录,有则返回,没有则进入下一步

向本地 DNS 服务器(一般都是你的网络接入服务器商提供,比如中国电信,中国移动)发送请求进行查询,本地DNS服务器收到请求后,会先查下自己的缓存记录,如果查到了直接返回就结束了,如果没有查到,本地DNS服务器就会向DNS的根域名服务器发起查询请求:请问老大, www.163.com 的ip是啥?

根域名服务器收到请求后,看到这是个 .com 的域名,就回信说:这个域名是由 .com 老弟管理的,你去问他好了,这是.com老弟的联系方式(ip1)。

本地 DNS 服务器接收到回信后,照着老大哥给的联系方式(ip1),马上给 .com 这个顶级域名服务器发起请求:请问 .com 大大,www.163.com 的ip 是啥?

.com 顶级域名服务器接收到请求后,看到这是 163.com 的域名,就回信说:这个域名是 .163.com 老弟管理的,你就去问他就行了,这是他的联系方式(ip2)

本地 DNS 服务器接收到回信后,按照前辈的指引(ip2),又向 .163.com 这个权威域名服务器发起请求:请问 163.com 大大,请问 www.163.com 的ip是啥?

163.com 权威域名服务器接收到请求后,确认了是自己管理的域名,马上查了下自己的小本本,把 www.163.com 的ip告诉了 本地DNS服务器。

本地DNS服务器接收到回信后,非常地开心,这下总算拿到了www.163.com的ip了,马上把这个消息告诉了要求查询的客户(就是你的电脑)。由于这个过程比较漫长,本地DNS服务器为了节省时间,也为了尽量不去打扰各位老大哥,就把这个查询结果偷偷地记在了自己的小本本上,方便下次有人来查询时,可以快速回应。

总结起来就是三句话:

从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址)

从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址)

从"次级域名服务器"查出"主机名"的IP地址

网络知识扫盲,一文搞懂 DNS网络知识扫盲,一文搞懂 DNS
DNS的缓存时间
上面的几个步骤里,可以看到有两个地方会缓存 DNS 的查询记录,有了缓存,在一定程度上会提高查询效率,但同时在准确率上会有所损失。

因此我们在配置 DNS 解析的时候,会有一个 TTL 参数(Time To Live),意思就是这个缓存可以存活多长时间,过了这个时间,本地 DNS 就会删除这条记录,删除了缓存后,你再访问,就要重新走一遍上面的流程,获取最新的地址。

网络知识扫盲,一文搞懂 DNS网络知识扫盲,一文搞懂 DNS
DNS 的记录类型
当我们在阿里云买了一个域名后,可以配置我们主机域名解析规则,也就是 记录。

网络知识扫盲,一文搞懂 DNS
阿里云 域名云解析

常见的 DNS 记录类型如下

A:地址记录(Address),返回域名指向的IP地址。

NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。

MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。

CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。

PTR:逆向查询记录(Pointer Record),只用于从IP地址查询域名,详见下文。

网络知识扫盲,一文搞懂 DNS
DNS 报文结构
后面我将使用 wireshark 抓取 DNS 的数据包,但是在开始之前 ,得先了解一下 DNS 的报文结构

网络知识扫盲,一文搞懂 DNS
事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。

标志:DNS 报文中的标志字段。

问题计数:DNS 查询请求的数目。

回答资源记录数:DNS 响应的数目。

权威名称服务器计数:权威名称服务器的数目。

附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。

网络知识扫盲,一文搞懂 DNS
Wireshark抓包实战
打开 Wireshark 后,使用 ping 163.com 来发起 DNS 解析请求,使用 DNS 关键字在Wireshark 过滤。

从抓取的报文整体来看,我们可以粗略获取几个信息

DNS 是应用层协议,传输层协议使用的是 UDP

DNS 默认端口是 53

网络知识扫盲,一文搞懂 DNS
请求和应答的报文的截图我放在了下面,接下来我将逐个分析。

请求

网络知识扫盲,一文搞懂 DNS
应答

网络知识扫盲,一文搞懂 DNS
Transaction ID
请求和应答的事务ID应当是一个:0xd0d7

Flags
标志字段里的内容比较多,每个字段的含义如下:

QR(Response):查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。

Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。

AA(Authoritative):授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。

TC(Truncated):表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。

RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。

RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。

Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。

rcode(Reply code):返回码字段,表示响应的差错状态。当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

Answer RRs
回答资源记录数,在应答包里为 2,说明返回了两条查询结果,你可以在 Answer 字段里看到。

Authority RRs
权威名称服务器计数

Additionnal RRs
附加资源记录数

Answers
应答的主要内容,这里返回两条结果,每条结果里的字段有

网络知识扫盲,一文搞懂 DNS

网络知识扫盲,一文搞懂 DNS
DNS 劫持 与 HTTP 劫持
通过上面的讲解,我们都知道了,DNS 完成了一次域名到 IP 的映射查询,当你在访问 www.baidu.com 时,能正确返回给你 百度首页的 ip。

但如果此时 DNS 解析出现了一些问题,当你想要访问 www.baidu.com 时,却返回给你 www.google.com 的ip,这就是我们常说的 DNS 劫持。

与之容易混淆的有 HTTP 劫持。

那什么是 HTTP 劫持呢?

你一定见过当你在访问 某个网站时,右下角也突然弹出了一个扎眼的广告弹窗。这就是 HTTP 劫持。

借助别人文章里的例子,它们俩的区别就好比是

DNS劫持是你想去机场的时候,把你给丢到火车站。

HTTP劫持是你去机场途中,有人给你塞小广告。

那么 DNS劫持 是如何产生的呢?

下面大概说几种DNS劫持方法:

1.本机DNS劫持

攻击者通过某些手段使用户的计算机感染上木马病毒,或者恶意软件之后,恶意修改本地DNS配置,比如修改本地hosts文件,缓存等。

  1. 路由DNS劫持

很多用户默认路由器的默认密码,攻击者可以侵入到路由管理员账号中,修改路由器的默认配置。

3.攻击DNS服务器

直接攻击DNS服务器,例如对DNS服务器进行DDOS攻击,可以是DNS服务器宕机,出现异常请求,还可以利用某些手段感染dns服务器的缓存,使给用户返回来的是恶意的ip地址。

网络知识扫盲,一文搞懂 DNS
工具的使用
dig 命令
dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。

通过 dig (参数:+trace)命令,我们可以看到上面描述的 DNS 解析的详细过程

网络知识扫盲,一文搞懂 DNS
从返回的结果,我们可以看得出几点信息:

我们的本地 DNS 服务器 ip 为 192.168.1.1,端口为53,你可以在 /etc/resolv.conf 里看到这个配置

根域名服务器目前全球一共只有十三台,从a.root-servers.net. 到m.root-servers.net. ,它们对应的ip地址,已经内置在本地DNS服务器中。

如果你只想看到结果,可以使用 +short 参数,可以直接返回 www.163.com 对应着哪几个ip。

网络知识扫盲,一文搞懂 DNS
你也可以加个 @ 参数 ,指定从某个 DNS 服务器进行查询。

网络知识扫盲,一文搞懂 DNS
如果你只想查看指定的记录类型:

网络知识扫盲,一文搞懂 DNS
host 命令
host 命令 可以看作dig命令的简化版本,返回当前请求域名的各种记录。

网络知识扫盲,一文搞懂 DNS
whois命令
whois命令用来查看域名的注册情况。

网络知识扫盲,一文搞懂 DNS
nslookup命令
nslookup也是常用的一个查询 DNS 解析结果的工具

网络知识扫盲,一文搞懂 DNS
网络知识扫盲,一文搞懂 DNS
你也可以指定公网的域名服务器进行查询,比如常见的 114.114.114.114。

网络知识扫盲,一文搞懂 DNS网络知识扫盲,一文搞懂 DNS
手动清理本地缓存
MacOS

$ sudo dscacheutil -flushcache$ sudo killall -HUP mDNSResponder
Windows

$ ipconfig /flushdns
Linux

使用NSCD的DNS缓存$ sudo /etc/init.d/nscd restart# 服务器或者路由器使用DNSMASQ$ sudo dnsmasq restart

网络知识扫盲,一文搞懂 DNS
☞尤雨溪:重头来过的 Vue 3 带来了什么?

☞原来 Kylin 的增量构建,大有学问!| 原力计划

☞可怕!CPU 竟成了黑客的帮凶!

☞如何用NLP辅助投资分析?三大海外机构落地案例详解

☞这 10 个云计算错误,会让你的业务一蹶不振!

☞好扑科技结合区块链行业发展趋势,重磅推出“好扑区块链合伙人”计划

收藏 举报
5 条评论

写下您的评论…
评论

yhgz 9天前
转发了

回复 0

果园村大苹果 2月前
转发了

回复 0

甜心2318 2月前
转发了

回复 0

神话滨 2月前
转发了

回复 0

hh3266719543952 1月前
转发了

回复 0
相关推荐

teamviewer替代品 | 使用vnc代替teamviewer
呐 ⋅ 64评论 ⋅ 相关
不感兴趣

这款网络排查工具,堪称神器
慧眼人生 ⋅ 19评论 ⋅ 相关
不感兴趣

测试必备工具之最强抓包神器 Charles,你会了么?
柠檬班软件测试 ⋅ 6评论 ⋅ 相关
不感兴趣

最简单实用局域网一键共享文件夹–干货教程
河南图奕网云穿 ⋅ 7评论 ⋅ 相关
不感兴趣

想测试HTTP响应不知道如何开展怎么办?
黑马程序员 ⋅ 9评论 ⋅ 相关
不感兴趣

小程序目录结构介绍
代码音乐吧 ⋅ 6评论 ⋅ 相关
不感兴趣

网吧无盘技术无盘服务器管理系统使用手册
农村人与创业 ⋅ 40评论 ⋅ 相关
不感兴趣

20 个 Linux 终端下的生产力工具 | Linux 中国
Linux中国 ⋅ 7评论 ⋅ 相关
不感兴趣

Linux 上无痛文件提取 | Linux 中国
Linux中国 ⋅ 4评论 ⋅ 相关
不感兴趣

Linux 三剑客之 Sed
卧听潇潇暮雨 ⋅ 7评论 ⋅ 相关
不感兴趣

九个常用的网络命令,网络通信人必须懂得
智能安防专委会王明 ⋅ 9评论 ⋅ 相关
不感兴趣

如何抓取网络包?两个方法告诉你
底层软件架构 ⋅ 15评论 ⋅ 相关
不感兴趣

网络编程——协议基础
lee哥说架构 ⋅ 16评论 ⋅ 相关
不感兴趣

贼好用的 Java 工具类库
国科学院 ⋅ 16评论 ⋅ 相关
不感兴趣

BurpCrypto: 万能网站密码爆破测试工具
安界 ⋅ 15评论 ⋅ 相关
不感兴趣

面向政务企业的开发者工具集-逐浪文本大师v0.1正式发布
逐浪字库 ⋅ 0评论 ⋅ 相关
不感兴趣

探究!一个数据包在网络中的心路历程
底层软件架构 ⋅ 40评论 ⋅ 相关
不感兴趣

CAN总线基础精华课程~CAN总线报文
物联网原创帝 ⋅ 2评论 ⋅ 相关
不感兴趣

软件测试基础——Linux常规命令
IT渣 ⋅ 4评论 ⋅ 相关
不感兴趣

用了它,一行代码就能恢复 Windows 误删文件
少数派 ⋅ 26评论 ⋅ 相关
不感兴趣
CSDN
10 款国外实用、有趣的 GitHub 简介 README
全球 IPv4 地址消耗殆尽,苹果主力推进 IPv6
真的,没人能逃开“真香定律”

网络知识扫盲,一文搞懂 DNS相关推荐

  1. 一文搞懂 DNS 基础知识,收藏起来有备无患~

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 juejin.cn/post/6844903497494855687 推荐:ht ...

  2. 一文搞懂 DNS 基础知识,收藏起来有备无患

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Life is just like a journey. Ther ...

  3. 网络协议:一文搞懂Socket套接字

    本篇内容包括:Socket 套接字的简介.Socket 套接字的分类.Java 中的 Socket 即 java.net.ServerSocket.java.net.Socket 的使用,以及Java ...

  4. 【职场必备知识】一文搞懂五险一金(打工人必备)

    社保局电话:12333 五险一金非常重要的是:缴纳基数和缴纳比例! 文章目录 五险一金是什么 五险一金缴纳比例 北京职工社保缴费基数和比例 成都职工社保缴费基数和比例(2022年7月15日) 社保 养 ...

  5. 一文搞懂 Traefik2.1 的使用

    原文链接:一文搞懂 Traefik2.1 的使用 一文搞懂 Traefik2.1 的使用 核心概念 安装 ACME 中间件 灰度发布 流量复制 TCP 简单 TCP 服务 带 TLS 证书的 TCP ...

  6. IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<上网慢?经常掉线?这篇文章告诉你该怎么办!>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注 ...

  7. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

  8. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  9. 一文搞懂 Raft 算法

    一文搞懂Raft算法 正文 raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos.但Paxos是:少数真正理 ...

最新文章

  1. Complex Instance Placement
  2. 2010.12.14 关于decimal和Numeric类型
  3. openfiler setup一,安装
  4. android 根目录缓存,Android系统中内部存储和外部存储(公有目录、私有目录、缓存目录)详解...
  5. CTF(Pwn) Rop + ret2libc 题型 常规解法思路 (初级)
  6. 输出nc数据_气象数据处理的火箭加速器—CDO
  7. C++ Primer ----- 关于初始化
  8. NoSQL分类及ehcache memcache redis 三大缓存的对比
  9. 超硬核!数据库学霸笔记,考试/面试随便秒杀
  10. FreeRTOS及其应用,万字长文,基础入门
  11. 聚类算法:kmeans
  12. linux系统uptime解读,Linux中的uptime命令详解
  13. 如何快速调整图片亮度和对比度?
  14. A goal-driven tree-structured neural model for math word problems论文阅读
  15. 大数据「杀熟」:冤枉,也不冤枉
  16. 华为fusion computer虚拟机存储数据恢复
  17. matlab做TSP,MATLAB TSP问题
  18. 【数据结构】 八大排序实现简析+复杂度及稳定性分析
  19. 新华三“大”结盟 合力推进智慧交通产业升级
  20. 谷歌宣布:上帝的密码防线逐渐崩溃!人工智能有可能是人类文明史的终结!

热门文章

  1. 防火墙策略问题排查思路
  2. 绘图模板1(matplotlib)
  3. linux面试中级面试题
  4. 【数据结构与算法】查找波峰或者波谷
  5. linux网络存储备份,备份基础:Linux异构网络共享光盘刻录(下)
  6. Synopsys SV Lab Guide—lab3
  7. shell date 扩展功能(-d参数)
  8. cad lisp程序大集,超经典CAD lisp程序集锦、CAD快捷键大全
  9. cocoscreator 2.1.0 屏蔽多点触摸
  10. JS的隐式转换与显式转换