美國能讓中國從網絡上消失?
今天聊個有意思的話題。
世界上共有 13 個根域名服務器,其中主根域名服務器是在美國。
那美國有沒有可能通過根域名服務器掐斷中國的互聯網呢?
在說結論之前,我們先來了解:
- DNS到底是怎么工作的?
- 為什么根域名服務器只有 13 臺?
- 美國可以讓中國從互聯網上消失嗎?
DNS到底是怎么工作的?
在上網沖浪時,我們在瀏覽器輸入的都是網站的域名,而不是 Web 服務器的 IP 地址。
原因很簡單,域名和 IP 地址的關系就像我們手機通訊錄那樣,用對方的名字來對應它的手機號碼。這樣每次撥打電話的時候,直接在通訊錄里查名字就可以找到對方的手機號碼,而不需要去記憶對方的手機號碼。
IP 地址和手機號碼都是一長串的數字,如果要去記憶它們,還是挺費勁的。
所以,為了網民上網沖浪舒服點,就搞了個 DNS 服務器,也就是域名解析服務器,它可以通過我們輸入的域名來找到 Web 服務器的 IP 地址,然后瀏覽器再向 Web 服務器發送請求。
域名都是用句點來分隔的,比如 www.server.com,這里的句點代表了不同層次之間的界限,越靠右的位置表示其層級越高。
根域是在最頂層,它的下一層就是 com 頂級域,再下面是 server.com,所以域名的層級關系類似一個樹狀結構:
- 根 DNS 服務器
- 頂級域 DNS 服務器(com)
- 權威 DNS 服務器(server.com)
我們電腦實際上并不直接訪問根域名服務器,而是訪問我們「本地的 DNS 服務器」,由它來訪問根域名服務器,而且在解析域名的時候,是一個遞歸的過程。
域名解析是怎樣的呢?
現在舉一個具體的例子,比如客戶端請求 www.server.com 這個域名,解析域名的過程如下:
- 客戶端首先會發出一個 DNS 請求,問 www.server.com 的 IP 是啥,并發給本地 DNS 服務器(也就是客戶端的 TCP/IP 設置中填寫的 DNS 服務器地址)。
- 本地域名服務器收到客戶端的請求后,如果緩存里的表格能找到 www.server.com,則它直接返回 IP 地址。如果沒有,本地 DNS 會去問它的根域名服務器:“老大, 能告訴我 www.server.com 的 IP 地址嗎?” 根域名服務器是最高層次的,它不直接用于域名解析,但能指明一條道路。
- 根 DNS 收到來自本地 DNS 的請求后,發現后置是 .com,說:“www.server.com 這個域名歸 .com 區域管理”,我給你 .com 頂級域名服務器地址給你,你去問問它吧。”
- 本地 DNS 收到頂級域名服務器的地址后,發起請求問“老二, 你能告訴我 www.server.com 的 IP 地址嗎?”
- 頂級域名服務器說:“我給你負責 www.server.com 區域的權威 DNS 服務器的地址,你去問它應該能問到”。
- 本地 DNS 于是轉向問權威 DNS 服務器:“老三,www.server.com對應的IP是啥呀?” server.com 的權威 DNS 服務器,它是域名解析結果的原出處。為啥叫權威呢?就是我的域名我做主。
- 權威 DNS 服務器查詢后將對應的 IP 地址 X.X.X.X 告訴本地 DNS。
- 本地 DNS 再將 IP 地址返回客戶端,客戶端和目標建立連接。
至此,我們完成了 DNS 的解析過程,整個過程我畫成了一個圖:
域名解析的過程蠻有意思的,整個過程就和我們日常生活中找人問路的過程類似,只指路不帶路。
那是不是每次解析域名都要經過那么多的步驟呢?
當然不是了,還有緩存這個東西的嘛。
瀏覽器會先看自身有沒有對這個域名的緩存,如果有,就直接返回,如果沒有,就去問操作系統,操作系統也會去看自己的緩存,如果有,就直接返回,如果沒有,再去 hosts 文件看,也沒有,才會去問「本地 DNS 服務器」。
為什么「本地 DNS 服務器」會知道根域名服務器的 IP 地址?
世界上根域名服務器只有 13 臺,這 13 臺根域名服務器以英文字母 A 到 M 依序命名,
網域名稱格式為“字母.root-servers.org”,而且它們的 IP 地址基本不會變化。
所以,「本地 DNS 服務器」會內置一個根域名服務器的配置文件,通過讀取這個配置文件就能找到根域名服務器的 IP 地址。
下面這個圖就是 13 臺根域名服務器的配置文件的部分內容:
可能有的同學會說,這個是靜態的配置文件,如果某一個根域名服務器的 IP 地址改變了,要怎么知道的呢?
其實,「本地 DNS 服務器」首次啟動時,并不會先讀這份靜態的配置文件,而是會先去查根域名服務器的 IP 列表,這個查詢過程使用的傳輸協議是 UDP。
另外,可以看到上圖中所有記錄的 TTL 值是 3600000 秒,相當于 1000 小時。也就是說,每 1000 小時會去查詢一次根域名服務器的列表。
為什么根域名服務器只有 13 臺?
嚴格來講,是世界上共有 13 個「IPv4協議」的根域名服務器,而 IPv6的根節點不止 13 個。
注意,這 13 個并不是表示背后只有 13 臺真正的物理服務器,這 13 個對應的是 13 個 IP 地址,對應了 A-M 13 個編號。通過任播(Anycast)技術,編號相同的根服務器使用同一個 IP(類似一個集群)。
任播最初由RFC1546提出,主要用在 DNS 根服務器上,具體的解釋如下:
任播是指在IP網絡上通過一個IP地址標識一組提供特定服務的主機,服務訪問方并不關心提供服務具體是哪一臺主機提供的,訪問該地址的報文可以被IP網絡路由到“最近”的一個(最好也只是一個,別送到多個)服務器上。這里“最近”可以是指路由器跳數、服務器負載、服務器吞吐量、客戶和服務器之間的往返時間( RTT,round trip time )、鏈路的可用帶寬等特征值。
為什么只有 13 個呢?
前面我提到,查詢根域名服務器的 IP 列表使用的傳輸協議是 UDP。
當 UDP 包大小超過 MTU 時,就會在 IP 層進行分片,但是只有第一片有 UDP 頭部字段(意味著包含有端口號),由于其它分片沒有 UDP 頭部字段(意味著沒有端口號號),能否通過防火墻則完全看防火墻的臉色,因為防火墻可能會檢查端口號。
所以,最好的通信效果就是避免 UDP 包大小超過 MTU 大小,防止在 IP 層發生分片。
Internet 大多數網絡接口MTU >= 512,所以RFC1035 規定了 DNS 報文要求被控制在 512 字節之內。
一個查詢根域名服務器信息的 DNS 報文要能裝下所有的根域名服務節點基本信息,因為 512個字節有限,所以根域名服務節點當然要限制住了。
具體計算細節我不做介紹了,最終算到是 512 字節大小的 DNS 報文可以裝下 14 個根域名服務器節點的信息,不過當時的人覺得留一手,不全用完,所以就規定在了 13 個根域名服務器。
美國能讓中國從互聯網上消失嗎?
前面我們知道,根域名服務器共有 13 個。
其中 1 個為主根域名服務器,放置在美國,其余12個均為輔根域名服務器,其中9個放置在美國,歐洲2個,位于英國和瑞典,亞洲1個,位于日本。
可以看到,我們中國并沒有一臺根域名服務器,而且主根域名在美國,由 ICANN 管理。
如果美國終止 .cn 后綴的解析和申請,會不會導致中國網絡癱瘓?
先說結論,這個大可不必擔心。
雖說根域名服務器都在國外,但是我們中國已經有很多臺「鏡像的根域名服務器」了,也就是會向主根域名服務器同步數據到國內的根域名服務器,這意味著根域名服務器的常用記錄,我們早就有了備份,相當于我們自己也有了根服務器。
即使美國從主根域名服務器刪除了 .cn 記錄,也不怕,因為我們已經維護了根域名服務器的鏡像,我們自己可以控制鏡像的內容,我們可以不同步關于 .cn 記錄的刪除。
還記得訪問根域名服務器是誰嗎?就是本地 DNS 服務器,而這個本地 DNS 服務器一般是由國內的網絡運營商管理的,只要在我國內對根域名服務器發出的請求,其實都是由這些鏡像完成的。對于中國用戶來說,對根的請求,一般不會跑到美國去。
所以,國內的用戶基本不受影響。不過,其他國家可能就無法訪問 .cn 后綴的網站了。
PS:美國之前就做過這樣的事情,將伊拉克頂級域名 .iq 的申請和解析工作終止掉,導致所有以 .iq 后綴的網站,讓伊拉克從互聯網消失。