ARTS 06 - 当你更新 DNS 时发生了什么?

Posted by Calvin on 2020-06-28

前言:什么是ARTS?

ARTS 源于耗子叔在极客时间的专栏《左耳听风》打卡活动。

Algorithm:每周至少做一个 Leetcode 的算法题。主要是为了编程训练和学习。

Review:阅读并点评至少一篇英文技术文章。主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。

Tip:学习至少一个技术技巧。主要是为了总结和归纳你在日常工作中所遇到的知识点。

Share:分享一篇有观点和思考的技术文章。主要是为了建立你的影响力,能够输出价值观。

Algorithm

7. 整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [$-2^{31}$, $2^{31}$ − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

int reverse(int x)
{
int max = 0x7fffffff, min = 0x80000000; // int的最大值最小值
long rs = 0;
for(;x;rs = rs*10+x%10,x/=10); // 逆序
return rs>max||rs<min?0:rs;
}

Review

Easy way to detect a retain cycle in a view controller

循环引用导致的内存泄漏问题是 iOS 开发者最经常碰到的性能问题之一,通常我们可以使用苹果官方的性能检测工具 Instruments - Leaks 帮助我们排查和定位。最原始的方式可能是在 VC 的 dealloc 方法中输出打印页面已经被释放的日志。社区中也有开发者提供了便利的第三方工具,如微信读书出品的较为广为人知的 MLeaksFinder 通过在 VC 被 pop 或 dismiss 时检测其自身及其子视图是否正确释放来实现,再比如 PLeakSniffer 在 VC 释放后利用心跳机制来推测子视图是否被正常释放。

本文则提供了简单使用符号断点的方式来辅助检测 VC 是否被释放。这个方式无侵入性,也不需要编写任何代码,但局限性在于只能在跑工程的使用。

Tip

命令行获取外网 IP

curl -L tool.lu/ip

20200628001.png

Share

What happens when you update your DNS?

本文用通俗的语言和例子,解释了 DNS 的原理,权威服务器和递归服务器的区别,以及更新 DNS 记录是怎么回事。

顺带推荐一篇极客时间专栏《趣谈网络协议》里面一篇写 DNS 的文章,第18讲 | DNS协议:网络世界的地址簿 文章主要讲述了 DNS 原理,DNS 解析以及负载均衡等,推荐阅读。

DNS 服务器

在网络世界,也是这样的。你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地址簿,就是 DNS 服务器。

由此可见,DNS 在日常生活中多么重要。每个人上网,都需要访问它,但是同时,这对它来讲也是非常大的挑战。一旦它出了故障,整个互联网都将瘫痪。另外,上网的人分布在全世界各地,如果大家都去同一个地方访问某一台服务器,时延将会非常大。因而,DNS 服务器,一定要设置成高可用、高并发和分布式的。

于是,就有了这样树状的层次结构。

20200628002.jpg

  • 根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址
  • 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址
  • 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址

DNS 解析流程

为了提高 DNS 的解析性能,很多网络都会就近部署 DNS 缓存服务器。于是,就有了以下的 DNS 解析流程。

  1. 电脑客户端会发出一个 DNS 请求,问 www.163.com 的 IP 是啥啊,并发给本地域名服务器 (本地 DNS)。那本地域名服务器 (本地 DNS) 是什么呢?如果是通过 DHCP 配置,本地 DNS 由你的网络服务商(ISP),如电信、移动等自动分配,它通常就在你网络服务商的某个机房。

  2. 本地 DNS 收到来自客户端的请求。你可以想象这台服务器上缓存了一张域名与之对应 IP 地址的大表格。如果能找到 www.163.com,它就直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大,能告诉我 www.163.com 的 IP 地址吗?”根域名服务器是最高层次的,全球共有 13 套。它不直接用于域名解析,但能指明一条道路。

  3. 根 DNS 收到来自本地 DNS 的请求,发现后缀是 .com,说:“哦,www.163.com 啊,这个域名是由.com 区域管理,我给你它的顶级域名服务器的地址,你去问问它吧。”

  4. 本地 DNS 转向问顶级域名服务器:“老二,你能告诉我 www.163.com 的 IP 地址吗?”顶级域名服务器就是大名鼎鼎的比如 .com、.net、 .org 这些一级域名,它负责管理二级域名,比如 163.com,所以它能提供一条更清晰的方向。

  5. 顶级域名服务器说:“我给你负责 www.163.com 区域的权威 DNS 服务器的地址,你去问它应该能问到。”

  6. 本地 DNS 转向问权威 DNS 服务器:“您好,www.163.com 对应的 IP 是啥呀?”163.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。

  7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。

  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

20200628003.jpg

课程推荐

20200628004.jpg

深入浅出现代 Web 编程

赫尔辛基大学推出的在线全栈公开课 2020,提供了一站式学习 React, Redux, Node.js, MongoDB, GraphQL 以及 TypeScript 的课程内容!

这门课程会向你介绍基于 JavaScript 的现代 Web 编程技术。重点是利用 ReactJS 搭配Node.js开发的 REST API,来搭建 Web 应用程序。

本课程免费。无需报名即可在线学习。提供官方中文版。

https://fullstackopen.com/zh/

课程信息来源:Telegram 值物志 Channel