0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么人們有時(shí)在域名的末尾加一個(gè)點(diǎn)

dyquk4xk2p3d ? 來(lái)源:Linux中國(guó) ? 作者:邀你一起加入 ? 2022-11-23 09:20 ? 次閱讀

大家好!今年早些時(shí)候,我在寫(xiě)《DNS 是如何工作的 wizardzines.com》 時(shí),有人問(wèn)我——為什么人們有時(shí)在域名的末尾加一個(gè)點(diǎn)?例如,如果你通過(guò)運(yùn)行 dig example.com 查詢(xún)example.com的 IP,你會(huì)看到一下內(nèi)容:

$ dig example.com

example.com. 5678 IN A 93.184.216.34

執(zhí)行完dig命令后,example.com有一個(gè).——變成了example.com.!發(fā)生了什么?

有些 DNS 工具也要求傳給它的域名后加一個(gè).:如果你在使用miekg/dns github.com時(shí)傳給它example.com,它會(huì)報(bào)錯(cuò):

// trying to send this message will return an error

m := new(dns.Msg)

m.SetQuestion("example.com", dns.TypeA)

最初我以為我知道這個(gè)問(wèn)題的答案(“呃,末尾的點(diǎn)意味著域名是完全限定的?”)。這是對(duì)的 —— 一個(gè)完全限定域名(fully qualified domain name)(FQDN)是一個(gè)末尾有.的域名!

但是為什么末尾的點(diǎn)是有用且重要的呢?

ea935488-6abe-11ed-8abf-dac502259ad0.svg

在 DNS 的請(qǐng)求/響應(yīng)中,域名的末尾并沒(méi)有 “.”

我曾經(jīng)(錯(cuò)誤地)認(rèn)為 “為什么末尾有一個(gè)點(diǎn)?”的答案可能是 “在 DNS 請(qǐng)求/響應(yīng)中,域名末尾有一個(gè).,所以我們把它放進(jìn)去,以匹配你的計(jì)算機(jī)實(shí)際發(fā)送/接收的內(nèi)容”。但事實(shí)并不是這樣!

當(dāng)計(jì)算機(jī)發(fā)送 DNS 請(qǐng)求/響應(yīng)時(shí),域名的末尾并沒(méi)有點(diǎn)。實(shí)際上,域名中沒(méi)有點(diǎn)。

域名會(huì)被編碼成一系列的長(zhǎng)度/字符串對(duì)。例如,域名example.com被編碼為這 13 個(gè)字節(jié)。

7example3com0

編碼后的內(nèi)容一個(gè)點(diǎn)也沒(méi)有。一個(gè) ASCII 域名(如example.com)被轉(zhuǎn)成了各種 DNS 軟件的 DNS 請(qǐng)求/響應(yīng)中使用的格式。

今天我們來(lái)討論域名被轉(zhuǎn)成 DNS 響應(yīng)的一個(gè)地方:區(qū)域文件。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

區(qū)域文件中域名末尾的 “.”

一些人管理域名的 DNS 記錄的方法是創(chuàng)建一個(gè)被稱(chēng)為 “區(qū)域文件” 的文本文件,然后配置一些 DNS 服務(wù)器軟件(如nsd或bind)來(lái)為該區(qū)域文件中指定的 DNS 記錄提供服務(wù)。

下面是一個(gè)對(duì)應(yīng)example.com的示例區(qū)域文件:

orange 300 IN A 1.2.3.4

fruit 300 IN CNAME orange

grape 3000 IN CNAME example.com.

在這個(gè)文件中,任何不以.結(jié)尾的域名(比如orange)后都會(huì)自動(dòng)加上.example.com。所以orange成了orange.example.com的簡(jiǎn)稱(chēng)。DNS 服務(wù)器從它的配置中得知這是一個(gè)example.com的區(qū)域文件,所以它知道在所有不以點(diǎn)結(jié)尾的名字后面自動(dòng)添加example.com。

我想這里的想法只是為了少打幾個(gè)字符——如果要打出全稱(chēng),區(qū)域文件會(huì)是這樣:

orange.example.com. 300 IN A 1.2.3.4

fruit.example.com. 300 IN CNAME orange.example.com.

grape.example.com. 3000 IN CNAME example.com.

確實(shí)多了很多字符。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

你也可以不通過(guò)區(qū)域文件來(lái)使用 DNS

盡管官方的 DNS RFC(RFC 1035 www.rfc-editor.org)中定義了區(qū)域文件格式,但你也可以不通過(guò)區(qū)域文件來(lái)使用 DNS。例如,AWS Route 53 就不用區(qū)域文件來(lái)存儲(chǔ) DNS 記錄!你可以通過(guò) Web 界面或 API 來(lái)創(chuàng)建記錄,我猜他們是用某種數(shù)據(jù)庫(kù)而不是一堆文本文件來(lái)存儲(chǔ)記錄。

不過(guò),Route 53(像許多其他 DNS 工具一樣)確實(shí)支持導(dǎo)入和導(dǎo)出區(qū)域文件,這個(gè)功能或許在你更換 DNS 提供商時(shí)很有用。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

dig 命令輸出中末尾的 “.”

現(xiàn)在我們來(lái)討論下 dig 命令的輸出:

$ dig example.com

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> +all example.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10712

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 65494

;; QUESTION SECTION:

;example.com. IN A

;; ANSWER SECTION:

example.com. 81239 IN A 93.184.216.34

有一件奇怪的事是,幾乎每一行都以;;開(kāi)頭,這是怎么回事?;是區(qū)域文件中的注釋字符!

我想 dig 以這種奇怪的方式輸出的原因可能是為了方便你粘貼這些內(nèi)容到區(qū)域文件時(shí),不用修改就可以直接用。

這也是example.com末尾有個(gè).的原因 —— 區(qū)域文件要求域名末尾必須有點(diǎn)(否則它們會(huì)被解釋為是相對(duì)于該區(qū)域的)。因此 dig 也這么處理了。

我真的希望 dig 有一個(gè)+human選項(xiàng),以更人性化的方式打印出這些信息,但現(xiàn)在我太懶了,懶得花工夫去實(shí)際貢獻(xiàn)代碼來(lái)做這件事(而且我并不擅長(zhǎng) C),所以我只能在我的博客上抱怨一下

ea935488-6abe-11ed-8abf-dac502259ad0.svg

curl 命令輸出中末尾的 “.”

我們來(lái)看下另一個(gè)末尾有.的例子:curl!

我家里有臺(tái)計(jì)算機(jī)名為grapefruit,其上運(yùn)行著 Web 服務(wù)器。當(dāng)我執(zhí)行 curl grapefruit 時(shí),會(huì)輸出:

$ curl grapefruit

......

這樣運(yùn)行沒(méi)問(wèn)題!但是如果我在域名后加一個(gè).會(huì)怎樣呢?它報(bào)錯(cuò)了:

$ curl grapefruit.

curl: (6) Could not resolve host: grapefruit.

發(fā)生了什么?為了搞清楚,我們需要先來(lái)學(xué)習(xí)下搜索域:

ea935488-6abe-11ed-8abf-dac502259ad0.svg

初識(shí)搜索域

當(dāng)我執(zhí)行 curl grapefrult 時(shí),它是怎么被轉(zhuǎn)成一個(gè) DNS 請(qǐng)求的?你可能會(huì)認(rèn)為我的計(jì)算機(jī)會(huì)向域名grapefruit發(fā)送一個(gè)請(qǐng)求,對(duì)嗎?但事實(shí)并不是這樣。

讓我們用 tcpdump 來(lái)看看到底是什么域名在被查詢(xún)。

$ sudo tcpdump -i any port 53

[...] A? grapefruit.lan. (32)

實(shí)際上是向grapefruit.lan.發(fā)送的請(qǐng)求。為什么呢?

解釋一下:

1.curl調(diào)用函數(shù)getaddrinfo來(lái)查詢(xún)grapefruit 2.getaddrinfo查詢(xún)了我計(jì)算機(jī)上的文件/etc/resolv.conf 3./etc/resolv.conf包含兩行內(nèi)容:

nameserver 127.0.0.53

search lan

4.因?yàn)橛衧earch lan這行內(nèi)容,所以getaddrinfo在grapefruit的末尾添加了一個(gè)lan,去查詢(xún)grapefruit.lan

ea935488-6abe-11ed-8abf-dac502259ad0.svg

什么時(shí)候搜索域被使用?

現(xiàn)在我們知道了一些奇怪的事情:當(dāng)我們查詢(xún)一個(gè)域名時(shí),有時(shí)會(huì)有一個(gè)額外的東西(如lan)被加到最后。但是什么時(shí)候會(huì)發(fā)生這種情況呢?

1.如果我們?cè)谟蛎?strong>末尾添加一個(gè).,那么這時(shí)不會(huì)用到搜索域 2.如果域名中間包含一個(gè).(如example.com),那么默認(rèn)也不會(huì)用到搜索域。但是可以通過(guò)修改配置來(lái)改變處理邏輯(在ndots pracucci.com里有更詳細(xì)的說(shuō)明)

我們現(xiàn)在知道了curl grapefruit.與curl grapefruit結(jié)果不一樣的原因——因?yàn)橐粋€(gè)查詢(xún)的是grapefruit.,而另一個(gè)查詢(xún)的是grapefruit.lan.。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

我的計(jì)算機(jī)怎么知道使用哪個(gè)搜索域呢?

當(dāng)我連接路由時(shí),它會(huì)通過(guò) DHCP 告訴我它的搜索域是lan—— 它也是通過(guò)這個(gè)方式給我的計(jì)算機(jī)分配 IP。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

所以為什么要在域名末尾加一個(gè)點(diǎn)呢?

現(xiàn)在我們已經(jīng)了解了區(qū)域文件和搜索域,下面是我認(rèn)為的人們要在域名末尾加點(diǎn)的原因:

有兩種情況下,域名會(huì)被修改,并在末尾添加其他東西。

?在example.com的區(qū)域文件中,grapefruit會(huì)被轉(zhuǎn)為grapefruit.example.com ?在我的本地網(wǎng)絡(luò)(我的計(jì)算機(jī)已經(jīng)配置了使用搜索域lan),grapefruit被轉(zhuǎn)為grapefruit.lan

因此,由于域名在某些情況下實(shí)際上可能被轉(zhuǎn)成其他名字,人們就在結(jié)尾處加一個(gè).,以此來(lái)表示 “這是域名,末尾不需要添加任何東西,這就是全部?jī)?nèi)容”。否則會(huì)引起混亂。

“這就是全部?jī)?nèi)容”的技術(shù)術(shù)語(yǔ)是**“完全限定域名”,簡(jiǎn)稱(chēng)為“FQDN”**。所以google.com.是一個(gè)完全限定域名,而google.com不是。

我總是要提醒自己這樣做的原因,因?yàn)槲液苌偈褂脜^(qū)域文件和搜索域,所以我經(jīng)常覺(jué)得——“我當(dāng)然是指google.com而不是google.com.something.else! 我為什么要指其他東西?那太傻了!”

但是有些人確實(shí)在使用區(qū)域文件和搜索域(例如 Kubernetes 中使用了搜索域!),所以結(jié)尾的.很有用,可以讓人確切的知道,不應(yīng)該再添加其他東西。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

什么時(shí)候在末尾添加 “.”?

以下是關(guān)于何時(shí)在域名末尾加 ". " 的幾個(gè)簡(jiǎn)單說(shuō)明:

需要添加:配置 DNS 時(shí)

在配置 DNS 時(shí),使用完全限定域名從來(lái)都不是壞事。你不一定要這樣做:非完全限定域名通常也能正常工作,但我從來(lái)沒(méi)有遇到過(guò)不接受完全限定域名的 DNS 軟件。

有些 DNS 軟件需要這樣做:現(xiàn)在我為jvns.ca使用的 DNS 服務(wù)器讓我在域名的末尾加上.(例如在 CNAME 記錄中),并提示如果我不添加,它將在我輸入的內(nèi)容末尾加上.jvns.ca。我不同意這個(gè)設(shè)計(jì)決定,但這不是什么大問(wèn)題,我只是在最后加一個(gè).。

不需要加:在瀏覽器中

令人困惑的是,在瀏覽器中,在域名結(jié)尾處加一個(gè).不能正常運(yùn)行。例如,如果我在瀏覽器中輸入https://twitter.com.,它就會(huì)報(bào)錯(cuò)。它會(huì)返回 404。

我認(rèn)為這里發(fā)生的事情是,它將 HTTPHost標(biāo)頭設(shè)置為Host:twitter.com.,而對(duì)端的 Web 服務(wù)器則期望Host:twitter.com。

同樣地,https://jvns.ca.由于某種原因,返回了一個(gè) SSL 錯(cuò)誤。

ea935488-6abe-11ed-8abf-dac502259ad0.svg

我認(rèn)為相對(duì)域名在過(guò)去是比較常見(jiàn)的

最后一件事:我認(rèn)為“相對(duì)”域名(比如我用grapefruit來(lái)指代我家的另一臺(tái)計(jì)算機(jī)grapefruit.lan)在過(guò)去更常用,因?yàn)?DNS 是在大學(xué)或其他有大型內(nèi)部網(wǎng)絡(luò)的大機(jī)構(gòu)中開(kāi)發(fā)的。

在今天的互聯(lián)網(wǎng)上,使用“絕對(duì)”域名(如example.com)似乎更為普遍。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Web服務(wù)器
    +關(guān)注

    關(guān)注

    0

    文章

    137

    瀏覽量

    24356
  • ASCII
    +關(guān)注

    關(guān)注

    5

    文章

    172

    瀏覽量

    35019
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    215

    瀏覽量

    19771

原文標(biāo)題:為什么有時(shí)候域名的末尾有個(gè)點(diǎn)?

文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    手把手教你域名注冊(cè)

    一個(gè)域名的注冊(cè)都是獨(dú)無(wú)二的、不可重復(fù)的。因此在網(wǎng)絡(luò)上,域名種相對(duì)有限的資源,它的價(jià)值將隨著注冊(cè)者的增多而逐步為
    發(fā)表于 07-19 16:34

    什么是域名DNS

    ;國(guó)際域名網(wǎng)www.72ym.com網(wǎng)站上注冊(cè)域名,般都是dns1.4cun.com和dns2.4cun.com這兩個(gè)DNS,
    發(fā)表于 11-22 00:39

    什么是域名

      從技術(shù)角度來(lái)看,域名Internet上解決IP地址對(duì)應(yīng)的種方法。個(gè)完整的域名
    發(fā)表于 11-22 00:39

    什么人們需要智能家居?

    智能家居的話(huà)題不斷,直都是熱議的焦點(diǎn),科技快速發(fā)展的時(shí)代,為了讓生活更加便利,人類(lèi)以其強(qiáng)大的思維能力,將靈感融入到家居生活當(dāng)中,原來(lái)電影里面的幻想的高科技產(chǎn)品已經(jīng)悄然融入生活,智能家居集創(chuàng)意
    發(fā)表于 02-06 10:53

    域名常見(jiàn)的知識(shí)點(diǎn)有哪些?

    二級(jí)域名,以此類(lèi)推還有三級(jí)域名、四級(jí)域名等等;  3.如何搭建級(jí)域名網(wǎng)站呢?
    發(fā)表于 01-17 17:53

    什么人們使用Zynq SoC而不是其他類(lèi)型的FPGA?

    我想知道為什么人們使用Zynq-SoC而不是其他類(lèi)型的FPGA?使用這個(gè)芯片有什么區(qū)別和好處?普通微處理器上我更喜歡Zynq Soc的限制在哪里?親切的問(wèn)候,德勒H.
    發(fā)表于 04-01 09:24

    什么是域名?

    什么是域名? 因?yàn)榇蠖鄶?shù)人很難記住組成IP地址的大串?dāng)?shù)字,又因?yàn)镮P地址有時(shí)需要更改,所以互聯(lián)網(wǎng)上所有的服務(wù)器還有易讀的名稱(chēng),稱(chēng)為域名。例如,www.howstuffwor
    發(fā)表于 08-05 09:02 ?1540次閱讀

    有關(guān)域名知識(shí)八個(gè)問(wèn)題

    有關(guān)域名知識(shí)八個(gè)問(wèn)題 什么是域名?    Internet域名是Internet網(wǎng)絡(luò)上的個(gè)
    發(fā)表于 01-27 10:07 ?577次閱讀

    有關(guān)域名的不可不t知的八個(gè)問(wèn)題

    有關(guān)域名的不可不t知的八個(gè)問(wèn)題 了解域名的相關(guān)知識(shí),下面有關(guān)域名的八個(gè)經(jīng)典問(wèn)題,將會(huì)有助于你了解域名
    發(fā)表于 02-23 13:50 ?719次閱讀

    域名,域名是什么意思

    域名,域名是什么意思 域名是Internet網(wǎng)絡(luò)上的個(gè)服務(wù)器或
    發(fā)表于 04-03 15:12 ?3190次閱讀

    基于個(gè)建立以太坊智能合約上的ENS域名系統(tǒng)介紹

    ENS 是個(gè)可讀的、去中心化且安全的域名系統(tǒng),其本身是個(gè)建立以太坊上的智能合約,同時(shí)也是
    發(fā)表于 10-24 10:37 ?2204次閱讀

    字節(jié)跳動(dòng)新增個(gè)名為douyinpay.com的域名

    字節(jié)跳動(dòng)稱(chēng)用來(lái)存儲(chǔ)自家域名的注冊(cè)商“易名”旗下新增個(gè)名為douyinpay.com的域名,域名翻譯過(guò)來(lái)應(yīng)該是“抖音支付”的意思。
    的頭像 發(fā)表于 12-01 10:33 ?2524次閱讀

    有時(shí)你需要一點(diǎn)收獲第部分

    有時(shí)你需要一點(diǎn)收獲第部分
    發(fā)表于 04-20 10:31 ?1次下載
    <b class='flag-5'>有時(shí)</b>你需要<b class='flag-5'>一點(diǎn)</b>收獲第<b class='flag-5'>一</b>部分

    com域名和cn域名注冊(cè)哪一個(gè)好,它們有什么區(qū)別

    com域名和cn域名注冊(cè)哪一個(gè)好?域名對(duì)于搭建網(wǎng)站來(lái)說(shuō)是必不可少的,般企業(yè)搭建網(wǎng)站之前就需要
    的頭像 發(fā)表于 09-02 17:43 ?6315次閱讀

    域名解析是什么意思?

    域名解析是什么意思?域名解析是將人類(lèi)可讀的域名轉(zhuǎn)換成計(jì)算機(jī)可理解的IP地址的過(guò)程。互聯(lián)網(wǎng)上,計(jì)算機(jī)和其他設(shè)備使用IP地址來(lái)定位和通信。由于人們
    的頭像 發(fā)表于 11-21 17:36 ?1956次閱讀