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