《跟唐老师学习云网络》 - DNS电话簿

tsjsdbd 发表于 2022/07/22 11:26:35 2022/07/22
【摘要】 无论你域名怎么解析,最终我还是要用IP和别人通信的。域名只是你的皮囊,IP才是你的灵魂。

 

 

由于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[名字] --> ValueIP地址)

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

 

本地快速解析

有时候,局域网里面,还得自己搭建一台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 目标域名

比如:


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

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


 

dig命令行

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

格式:

dig  目标域名

dig  @特定DNS服务器  目标域名

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


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


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


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

DNS协议

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

客户端问:“请问zzip是多少

服务端答:“哦,是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服务器不可用时,会自动去问第2DNS服务器。

如:

cat /etc/resolv.conf

nameserver 10.129.2.34

nameserver 100.79.1.250

nameserver 100.79.1.46

这样有配置3DNS服务器

高级配置参数

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

  • search:查询DNS域名时,会往你查询的域名尾部,额外补全的内容。
  • ndots:控制补全的最大长度。

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

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

DNS级联

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

 

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

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

 

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。