DNS查询
本文最后更新于12 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com

这三题答案分别是:

第 10 题:B,1 条,多条
第 11 题:A,1 条,1 条
第 12 题:C,0 条,4 条

这三题看起来都在问 DNS 查询次数,但考点其实不完全一样。第 10、11 题重点考“递归查询和迭代查询下,谁负责继续查”;第 12 题重点考“迭代查询下,按域名层次最多要查几级,同时是否考虑缓存”。


第 10 题的关键句是:

用户主机采用递归查询向本地域名服务器查询;本地域名服务器采用迭代查询向其他域名服务器查询。

这里分成两段看。

用户主机只负责问本地域名服务器一次:

“请帮我查出这个域名对应的 IP。”

所以用户主机发送的 DNS 请求是 1 条。

但是本地域名服务器没有缓存,又采用迭代查询。迭代查询的特点是:被问的服务器如果不知道最终答案,不会替你继续查,而是告诉你“下一步应该问谁”。因此本地域名服务器要自己一层一层问:

本地域名服务器 → 根域名服务器
本地域名服务器 → 顶级域名服务器
本地域名服务器 → 权限域名服务器
……

所以本地域名服务器发送的是多条 DNS 请求。

因此第 10 题选 B:1 条,多条。

这题考的是“主机到本地 DNS 是递归,本地 DNS 到外部 DNS 是迭代”这种实际中最常见的组合。


第 11 题的关键句是:

若本地域名服务器无缓存,则在采用递归方法解析另一网络某主机域名时……

这里和第 10 题最大的区别在于:第 11 题说的是“采用递归方法解析”,不是“本地域名服务器采用迭代查询”。

递归查询的特点是:查询者只问一次,然后等待最终结果。被询问的服务器如果不知道,会继续向其他服务器查询,最后把结果返回给查询者。

所以用户主机还是只向本地域名服务器发 1 条请求。

本地域名服务器如果也采用递归方式向其他服务器查询,它也只需要向下一级域名服务器发 1 条请求。后续如果还需要继续查,是由后面的域名服务器继续递归完成,而不是本地域名服务器反复逐级查询。

所以第 11 题选 A:1 条,1 条。

这里最容易错的地方是把“解析过程经过多个域名服务器”误认为“本地域名服务器一定发多条请求”。其实要看查询方式。如果是迭代,本地域名服务器自己逐级问,所以多条;如果是递归,本地域名服务器只把问题交给下一级,所以它自己只发一条。


第 12 题和前两题又不一样。

题干说:

假设所有域名服务器均采用迭代查询方式进行域名解析。当主机访问规范域名 www.abc.xyz.com 的网站时,本地域名服务器在完成该域名解析的过程中,可能发出 DNS 查询的最少和最多次数分别是?

这题不再问“用户主机和本地域名服务器分别发几条”,而是只问:

本地域名服务器可能发出多少次 DNS 查询。

并且题目没有说“本地域名服务器无缓存”。所以最少次数要考虑缓存。

如果本地域名服务器中已经缓存了 www.abc.xyz.com 对应的 IP 地址,那么它不需要再向外部域名服务器发查询请求,直接返回给主机即可。

所以最少是 0 次。

最多次数要按域名层次来数。www.abc.xyz.com 的完整层次可以理解为:

根域 .
顶级域 com
二级域 xyz.com
三级域 abc.xyz.com
主机名 www.abc.xyz.com

在最不利情况下,本地域名服务器没有任何缓存,并且每一级都需要逐级迭代查询,那么本地域名服务器可能依次查询:

  1. 问根域名服务器:谁负责 com
  2. com 顶级域名服务器:谁负责 xyz.com
  3. xyz.com 域名服务器:谁负责 abc.xyz.com
  4. abc.xyz.com 权限域名服务器:www.abc.xyz.com 的 IP 是什么?

所以最多是 4 次。

因此第 12 题选 C:0,4。

这题容易错选 A:0,3。错因通常是漏数了“根域名服务器”这一层,或者把最后一次向权限域名服务器查询主机 IP 的过程漏掉了。


这三类题可以这样区分:

题型看题干关键词解题重点典型结论
第 10 类“主机递归,本地域名服务器迭代”本地 DNS 要自己逐级问主机 1 条,本地 DNS 多条
第 11 类“采用递归方法解析”每一级只把请求交给下一级主机 1 条,本地 DNS 1 条
第 12 类“所有服务器迭代”“最少和最多次数”“具体域名”考缓存 + 域名层次最少看缓存,最多按层次数

做这类题时,先不要急着数根、顶级域、权限域,而是先判断题目问的是哪一种对象。

如果问“用户主机发送几条”,通常是 1 条,因为用户主机一般只问本地域名服务器。

如果问“本地域名服务器发送几条”,就要看本地域名服务器向外部采用什么方式。采用递归,一般是 1 条;采用迭代,一般是多条,需要逐级查询。

如果问“最少、最多”,一定要看有没有说“无缓存”。题目没有明确无缓存时,最少可能是 0,因为本地域名服务器可能已经缓存了结果。题目明确“本地域名服务器无缓存”时,就不能再把最少算成 0。

最后再看是不是给了具体域名。如果给了 www.abc.xyz.com 这种域名,通常就要按层次计算最大迭代次数:

根服务器 → 顶级域服务器 → 二级域权限服务器 → 更下级权限服务器 → 目标主机记录

所以第 12 题的最多次数是 4,而不是 3。

第14题的关键不是“只考虑 Web 请求的 TCP 三次握手”,而是要分清两类过程:

一类是 DNS 域名解析过程,通常按 UDP 查询/响应 计算,不建立 TCP 连接,所以不需要 TCP 三次握手。

另一类是 HTTP 访问 Web 服务器过程,HTTP 运行在 TCP 之上,所以访问 www.abc.com 的 Web 页面时,需要先建立 TCP 连接,再发送 HTTP 请求并接收响应。

本题答案应为:

D. 20ms,50ms

具体理解如下。

浏览器点击超链接 http://www.abc.com/index.html 后,首先要知道 www.abc.com 对应的 IP 地址,这一步靠 DNS 查询完成。普通 DNS 查询默认使用 UDP 53 端口,不是 TCP 连接,因此不会出现“和根域名服务器、com 顶级域名服务器、abc.com 域名服务器分别进行 TCP 三次握手”的过程。

但是,虽然 DNS 不进行 TCP 三次握手,DNS 查询本身仍然有往返时延 RTT。题目说:

本地域名服务器只提供递归查询服务,其他域名服务器只提供迭代查询服务。

意思是主机 H 把查询请求交给本地域名服务器,本地域名服务器再依次去问:

根域名服务器
→ com 顶级域名服务器
→ abc.com 域名服务器

如果本地域名服务器没有缓存,最长情况下要经过 3 次 Internet 上的 DNS 查询,每次 RTT 为 10ms,所以 DNS 解析最长耗时:

3 × 10ms = 30ms

然后浏览器才能访问真正的 Web 服务器 www.abc.com

访问 Web 页面时,因为 HTTP 基于 TCP,所以要考虑:

TCP 三次握手:1 个 RTT = 10ms
HTTP 请求并接收响应:1 个 RTT = 10ms

所以 Web 访问阶段耗时:

2 × 10ms = 20ms

因此最长时间为:

DNS 解析 30ms + Web 访问 20ms = 50ms

最短情况下,本地域名服务器已经缓存了 www.abc.com 的 IP 地址,本地查询时延题目一般忽略,因此 DNS 解析可以认为不经过 Internet 查询。此时只需要考虑 Web 访问阶段:

TCP 三次握手 10ms + HTTP 请求/响应 10ms = 20ms

所以最短时间是 20ms,最长时间是 50ms。

你理解的方向是对的:DNS 查询不等同于传统意义上的 TCP 三次握手连接。408/统考这类题里,除非题目特别说明 DNS 使用 TCP,否则普通 DNS 查询默认按 UDP 查询/响应处理,只计算 DNS 查询的 RTT,不额外计算 TCP 建立连接时间。

这类题最容易错在两点:第一,把 DNS 查询也当成 TCP 连接,错误地给每个 DNS 服务器都加三次握手时间;第二,只算 TCP 三次握手,不算 HTTP 请求到响应的那 1 个 RTT。记法可以直接压缩为:

总时间 = DNS 解析 RTT 数 + TCP 建立连接 1RTT + HTTP 请求响应 1RTT

本题:

最短:0 + 1RTT + 1RTT = 20ms
最长:3RTT + 1RTT + 1RTT = 50ms
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇