写点什么

带你熟悉云网络的“电话簿”:DNS

  • 2022 年 7 月 26 日
  • 本文字数:2125 字

    阅读完需:约 7 分钟

带你熟悉云网络的“电话簿”:DNS

本文分享自华为云社区《《跟唐老师学习云网络》 - DNS电话簿》,作者: tsjsdbd 。


由于 TCP/IP 网络协议在通信的时候,双方都是用 IP 地址的。所以整个报文来回过程中,并没有 DNS 什么事情的。只要双方 IP 都知道,那么系统中有没有 DNS 都无所谓的。


DNS 的最大作用就是把:“名字”==》翻译为==》“IP 地址”。

手机地址簿


DNS 等于是一个大号版的“地址簿”。跟你手机打电话一样,你最终拨打出去的肯定是手机号。



而你查找联系人,只是为了获得对方手机号码而已。假如你脑袋里已经默记了号码,那是可以直接拨号通话的,并不需要先打开"联系人 or 地址簿"的。



DNS 域名解析,是我们在网络中很容易接触到的通信过程。有时候网络不通,并不是你和对方无法连通,只是你无法根据名字"翻译"为对方的实际 IP 地址,千万不要被主次问题给困惑了。很多时候,如果可以查询到实际 IP,实际网络则是通的。(当然,知道了 IP,网络还是不通的话,可以复习下唐老师之前的网络课程)。

域名的来源


两台电脑在通信的时候,是使用之前介绍过的网络协议栈(即 TCP/IP)的。



但是,有时候,IP 地址属实不好记忆。别说是 IPV4 了,后面 IPV6 地址,根本就不是给人记的。就跟电话号码一样,多了就是不好记,必须得把号码关联到一个"人名"上,用来助记。

于是,这个世界上就有了“域名”一词,用来助记 IP 地址。你想:github.com 总比 20.205.243.166 好记吧?所以大家都爱记名字,然后在通信之前,不闲麻烦的先翻译一次。


怎么把名字变成 IP,就是 DNS 解析过程了。这个时候就得有个“专门记录名字=>IP”的服务器。

DNS 服务器


搞协议的那帮人,为了解决名字==》IP 的问题。引入了一个叫做域名服务器的东西。



这个 DNS 服务器,就是一个 key-value 的大号 map 表。大概就是 :


Key[名字] --> Value(IP 地址)


所以 DNS 服务器,都挺小巧的。它的复杂是在于 DNS 服务器之间可以级联, 这个后面再细说。总之它就是一台很小的 key-value 的 Server。

本地快速解析


有时候,局域网里面,还得自己搭建一台 DNS 服务器,也挺麻烦。那有没有简单点的 ,直接把 key-value 先写死顶着用一下先的办法?



答案是有的,就是咱们的 /etc/hosts 文件啦。(Windows 则是 C:\Windows\System32\drivers\etc\hosts 文件)


它的内容是长这样的:


# value(IP)  key(域名)
192.168.1.11 www.google.com
复制代码


你可以试着增加一行,然后看看在浏览器里面,访问这个网站是不是变了。


我这里直接 ping 这个网址


# ping google.com
PING google.com (192.168.1.11) 56(84) bytes of data.
复制代码

你看,地址就变成文件中指定的 IP 了。

查询 DNS 的命令行


一般我就用 2 个, nslookup 和 dig


apt-get install dnsutils
复制代码


安装之后,这 2 个命令行,就都有了。

nslookup 命令


这个是用的最多的,格式是:


nslookup 目标域名
复制代码


比如:



上面的服务器地址,是指问了“哪个 DNS 服务器”。而下面标红线的 IP,则是它给你的答复:“google.com 的 IP 是 93.46.8.90”


域名找不到 IP,则是这样:


挖掘命令行


这个 dig 比 nslookup 好的地方在于,它可以指定 DNS 服务器,来帮你解析域名。

格式:


dig  目标域名
dig @特定DNS服务器 目标域名
复制代码


中间的 @参数,是可选的。



能不能解析,看红圈那个 ANSWER,如果是 0,那说明解析不了这个域名。



最后试下指定 DNS 服务器来解析域名。



上图里指定,用 10.129.54.132 这台 DNS 服务器来帮我们解析域名。

DNS 协议


这个 DNS 协议非常的简单,就是一问一答的格式,没什么握手过程。


客户端问:“请问 zz 的 ip 是多少”


服务端答:“哦,是 xx.xx.xx.xx.xx”。或者“我不知道”。


协议默认端口是 53.所以在定位问题的时候,可以试着抓端口 53 的报文,看看你和 DNS 服务器之间是否还和谐。



绝大多数时候使用的是 UDP 协议,但也可以用 TCP(很少)。

指定 DNS 服务器


系统默认的 DNS 服务器,(即默认应该去哪个 DNS 服务器查询 IP),一般都是管理员帮我们配置好的。

但是我们也可以自己修改,在 /etc/resolv.conf 文件中。


cat /etc/resolv.conf
nameserver 10.129.2.34
复制代码


nameserver 这一行,可以 copy 多行,当第一个 DNS 服务器不可用时,会自动去问第 2 个 DNS 服务器。


如:


cat /etc/resolv.conf
nameserver 10.129.2.34
nameserver 100.79.1.250
nameserver 100.79.1.46
复制代码


这样有配置 3 台 DNS 服务器

高级配置参数


这个 /etc/resolv.conf 文件中,还可以配置一些高级参数。


search:查询 DNS 域名时,会往你查询的域名尾部,额外补全的内容。


  • ndots:控制补全的最大长度。


  • 这个会在 Kubernetes 的 Service 特性里面用到,等需要的时候,可以自己去深入研究下。

    平时用不到这些高级参数。

    DNS 级联


    DNS 有个级联机制,即:当我(DNS 服务器)这里的 key 找不到 value 时,我可以问我的上级。上级不懂再问上级,全球有几台顶级的根域名服务器。



    所以你想要拥有全球知名的网址(域名),都都是被收割的对象,因为取名权,被他们垄断了。想取一个"大家都认得"的名字,得老贵了。除非咱们自己不联网,局域网内自己玩,那么爱取什么名字就用什么名。


    回到你本地机器,查询 DNS 域名的时候,整个过程大致如下:



    如果问了一圈还找不到,就会告诉你,这个域名确实解析不了(要么就是根本不存在这个域名,要么就是你的 DNS 服务器里没这条记录,并且也得不到上级的答案)。


    ps,无论你域名怎么解析,最终我还是要用 IP 和别人通信的。域名只是你的皮囊,IP 才是你的灵魂。


    点击关注,第一时间了解华为云新鲜技术~

    发布于: 3 小时前阅读数: 17
    用户头像

    提供全面深入的云计算技术干货 2020.07.14 加入

    华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

    评论

    发布
    暂无评论
    带你熟悉云网络的“电话簿”:DNS_云计算_华为云开发者联盟_InfoQ写作社区