DNS 的歷史
早在 70 年代,人們就厭倦了記住他們想要訪問的服務器的 IP 地址。與此同時,出現了使用更簡單、更容易記住的名稱而不是數字主機地址的想法。
斯坦福研究所的工作人員提出了一個文本文件HOSTS.TXT,其中包含字符串名稱列表及其對應的 ARPANET 計算機數字地址。
地址是手動分配的。要請求主機名和地址或將計算機添加到主文件,用戶可以在工作時間通過電話聯繫斯坦福大學的網絡信息中心。
到 20 世紀 80 年代初,維護一個單一的、集中的主機表變得緩慢而繁瑣,不斷增長的網絡需要一個自動命名系統來處理技術和人員問題。
1984 年,加州大學伯克利分校的四名學生編寫了分層域名系統的第一個版本。它現在被廣泛使用,尤其是在Unix系統上,仍然是互聯網上使用最廣泛的DNS軟件。
DNS簡介
域名系統 (DNS)是一種用於存儲和檢索有關域的信息的分發系統。它最常用於從主機名(計算機或設備)獲取 IP 地址、獲取郵件路由信息和/或為域中的協議提供主機服務。
該系統以一定層次結構的形式組織,DNS 服務器按照一定的協議進行交互。理解 DNS 的基礎是理解名稱和區域的層次結構。
負責域區域的每個服務器都可以將域的其他部分的責任轉移到另一個服務器,這使得將信息相關性的責任分配給僅負責“他們的”部分域的各種組織的服務器成為可能域名。
DNS 系統包含與區域層次結構相對應的 DNS 服務器層次結構。每個區域都由至少一個託管域信息的權威 DNS 服務器支持。
重要的!名稱和 IP 地址不一定一對一地相互關聯。一個IP地址可以有多個域名,這樣就可以讓你在一台電腦上支持多個網站(這叫共享主機)。
它也可以是另一種方式 - 許多 IP 地址可以與一個域名相關聯:這允許您創建負載平衡並在 CDN 網絡中積極使用。
為了增加系統的穩定性,使用了許多包含相同信息的服務器,並且該協議具有保持位於不同服務器上的信息同步的手段。有 13 個根服務器,它們的地址幾乎沒有變化。
有趣的!DNS 協議使用 TCP 或 UDP 端口 53 來響應查詢。傳統上,請求和響應作為單個 UDP 數據報發送。當響應數據大小超過 512 字節時使用 TCP。
DNS記錄
DNS 服務器為每個域名存儲一組參數。這些是關於域名、IP地址以及各種服務信息的記錄。
總共有幾十個這樣的條目,所以我們只考慮其中最受歡迎的條目:
A | 地址 | IP地址 |
AAAA級 | 地址 IPv6 | IPv6 格式的地址 |
別名 | 規範名稱 | 別名的規範名稱 |
MX | 郵件交換器 | 域的郵件網關地址 |
NS | 名稱服務器 | 負責domain zone的節點地址 |
面向服務架構 | 授權開始 | 信息權威性說明 |
SRV | 服務器選擇 | 為服務指定服務器位置 |
PTR | 指針 | 地址名稱匹配 - A 和 AAAA 的反向匹配 |
TXT | 文本字符串 | 寫入任意二進制數據,最多 255 個字節 |
這裡最有趣的是:
- A記錄允許您指定對應於域的 IP 地址。
- CNAME允許您為名稱設置同義詞,例如 www.codegym.cc == codegym.cc。
- MX記錄包含有關郵件服務器的信息:如果信件到達 xxx@codegym.cc 該怎麼辦。
- NS - 表示 DNS 服務器的地址,其中包含有關該域的信息。當記錄被緩存並存儲在非本地節點上時很有用。
IP地址搜索
讓我們看看 DNS 系統是如何工作的。
假設您在瀏覽器中輸入了 api.codegym.cc。瀏覽器將聯繫本地 DNS 服務並要求您為其提供 api.codegym.cc 域的 IP 地址。接下來會發生什麼……
首先,DNS 服務查看此域是否在您計算機上的本地主機文件中。如果有,它會從中獲取 IP 地址。如果不是,它會向它已知的 DNS 服務器發送一個請求:“api.codegym.cc 的 IP 地址是什麼?”。
然而,DNS 服務器可能不僅對請求的名稱一無所知,甚至對整個 codegym.cc 域也一無所知。在這種情況下,服務器聯繫根服務器 - 例如,198.41.0.4。這個服務器說:“我沒有關於這個地址的信息,但我知道 204.74.112.1 負責 ru 區。”
然後 DNS 服務器將其請求發送到 204.74.112.1,但它回复:“我沒有關於此服務器的信息,但我知道 207.142.131.234 負責 codegym.cc 區域。”。最後,相同的請求被發送到第三個 DNS 服務器並收到響應 - 一個 IP 地址,該地址被傳輸到客戶端,即瀏覽器。
在這種情況下,在按名稱搜索 IP 的過程中,以下規則起作用:
- 瀏覽器向已知 DNS 服務器發送遞歸請求(響應此類請求,服務器必須返回 IP 地址,或者返回空響應和 NXDOMAIN 錯誤代碼)。
- 收到瀏覽器請求的 DNS 服務器接連發送非遞歸請求,收到其他 DNS 服務器的響應,直到收到負責請求區域的服務器的響應。
- 提到的其餘 DNS 服務器正在非遞歸地處理請求(並且很可能不會遞歸地處理請求,即使請求中有這樣的要求)。
有時被請求的服務器可能會向“上游”DNS 服務器發送遞歸查詢並等待準備好的響應。
重要的!通過遞歸查詢處理,所有響應都通過 DNS 服務器,並有機會緩存它們。對同一個域名的重複請求通常不會超出服務器的緩存,根本不會出現對其他服務器的調用。
允許的響應緩存時間隨響應一起提供(資源記錄的 TTL 字段)。
主機文件
我們注意到第一個搜索是在本地主機文件中。這是 HOSTS.TXT 文件的繼承者,它是在 ARPANET 時代發明的。是的,它仍然存在並且仍在使用。
它位於路徑沿線:
- /etc/hosts在 Linux 上。
- Windows 上的%SystemRoot%\system32\drivers\etc\hosts。
- /system/etc/hosts在 android 中。
通常,該文件包含本地主機節點的位置定義:
127.0.0.1 localhost
它的結構很簡單:首先是IP地址,然後是域名。
有用
使用主機文件,可以通過將橫幅的域地址重定向到地址 127.0.0.0、127.0.0.1 或 0.0.0.0 來過濾廣告。
通常不建議使用 127.0.0.1,因為如果服務器不存在或配置錯誤,它會導致響應超時和相關延遲。如果你將任何廣告域映射到 IP 地址 0.0.0.0,那麼所有對它的請求都會立即消失)。
公共 DNS 服務器
當您連接 Internet 服務時,您通常會得到一個 DNS 服務器。但這樣的免費 DNS 服務器並不總是最佳選擇。此外,您可能不希望每次訪問站點時都向 ISP 的 DNS 服務器發送帶有域名的查詢。
因此,許多人更願意切換到公共免費 DNS 服務器。首先,它們速度非常快,並且擁有大量的域名緩存。您將獲得更快的網站加載和正常運行時間,並且出現技術問題的可能性最小。
其次,安全。某些 DNS 服務可以阻止對網絡釣魚和惡意網站的訪問,並提供內容過濾功能以保護兒童免受網上不當內容的侵害。
這樣的 DNS 服務器甚至可以對抗詐騙者。例如,你去一個假冒的銀行網站,DNS 服務器給你的不是詐騙者的 IP 地址,而是它的安全服務。
此類服務器列表
雲彩 | 1.1.1.1 1.0.0.1 |
Cloudflare 承諾不會使用訪問者數據來投放廣告,也不會將請求源 IP 地址刻錄到磁盤。 |
谷歌公共 DNS | 8.8.8.8 8.8.4.4 |
存儲有關請求設備的 IP 地址的完整信息大約 24-48 小時,用於故障排除和診斷 |
Comodo 安全 DNS | 8.26.56.26 8.20.247.20 |
阻止網絡釣魚站點,但如果您試圖訪問帶有惡意軟件、間諜軟件的站點,也會發出警告 |
Yandex.DNS | 77.88.8.8 77.88.8.1 |
來自流行的俄羅斯搜索引擎的免費 DNS 服務 |
GO TO FULL VERSION