帶你熟悉雲網絡的「電話簿」:DNS

華爲雲開發者聯盟 發佈 2022-10-04T17:08:12.339345+00:00

摘要:無論你域名怎麼解析,最終我還是要用IP和別人通信的。域名只是你的皮囊,IP才是你的靈魂。由於TCP/IP網絡協議在通信的時候,雙方都是用IP位址的。

摘要:無論你域名怎麼解析,最終我還是要用IP和別人通信的。域名只是你的皮囊,IP才是你的靈魂。

本文分享自華為雲社區《《跟唐老師學習雲網絡》 - 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[名字] --> 值(IP位址)

所以DNS伺服器,都挺小巧的。它的複雜是在於DNS伺服器之間可以級聯, 這個後面再細說。總之它就是一台很小的 key-value的Server。

本地快速解析

有時候,區域網裡面,還得自己搭建一台DNS伺服器,也挺麻煩。那有沒有簡單點的 ,直接把key-value先寫死頂著用一下先的辦法?

答案是有的,就是咱們的 /etc/hosts 文件啦。(Windows則是C:\Windows\System32\驅動程序\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.com 的IP是 93.46.8.90」

域名找不到IP,則是這樣:

dig 命令行

這個dig比nslookup好的地方在於,它可以指定DNS伺服器,來幫你解析域名。

格式:


dig  目標域名

dig  @特定DNS伺服器  目標域名

中間的 @參數,是可選的。

能不能解析,看紅圈那個 ANSWER,如果是0,那說明解析不了這個域名。

最後試下指定 DNS 伺服器來解析域名。

上圖里指定,用10.129.54.132 這台DNS伺服器來幫我們解析域名。

DNS協議

這個DNS協議非常的簡單,就是一問一答的格式,沒什麼握手過程。

客戶端問:「請問zz的ip是多少

服務端答:「哦,是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文件中,還可以配置一些高級參數。

  • 搜索:查詢DNS域名時,會往你查詢的域名尾部,額外補全的內容。
  • ndots:控制補全的最大長度。

這個會在Kubernetes的Service特性裡面用到,等需要的時候,可以自己去深入研究下。

平時用不到這些高級參數。

DNS級聯

DNS有個級聯機制,即:當我(DNS伺服器)這裡的key找不到value時,我可以問我的上級。上級不懂再問上級,全球有幾台頂級的根域名伺服器。

所以你想要擁有全球知名的網址(域名),都都是被收割的對象,因為取名權,被他們壟斷了。想取一個「大家都認得」的名字,得老貴了。除非咱們自己不聯網,區域網內自己玩,那麼愛取什麼名字就用什麼名。

回到你本地機器,查詢DNS域名的時候,整個過程大致如下:

如果問了一圈還找不到,就會告訴你,這個域名確實解析不了(要麼就是根本不存在這個域名,要麼就是你的DNS伺服器里沒這條記錄,並且也得不到上級的答案)。

ps,無論你域名怎麼解析,最終我還是要用IP和別人通信的。域名只是你的皮囊,IP才是你的靈魂。

點擊下方,第一時間了解華為雲新鮮技術~

華為雲博客_大數據博客_AI博客_雲計算博客_開發者中心-華為雲

關鍵字: