域名必須帶點 (.) 的理由是什麼,Google 為何遭 ICANN 拒絕?
看到 ICANN 拒絕了 Google 關於不帶點域名的申請,理由是:不帶點的域名危害互聯網,破壞應用程序和協議,比如 SMTP,且還可能與內聯網不兼容。對此解釋,不明白,求解!
現有域名的格式規範里是必須帶點的,就算頂級域名也至少有兩個組成部分:
如http://zhihu.com。zhihu是主體,com是類型後綴,表示公司企業。
http://zhuanlan.zhihu.com是http://zhihu.com下的二級域名。
如果域名不帶點會怎樣?最致命的問題是可能和區域網主機名重複。
主機命名規則包含大小寫字母、數字、下劃線,正常情況下不會和帶點的互聯網域名衝突;
但是,假如http://google.com改名叫search,而你所在的區域網內正好有台電腦名字叫search,那你在瀏覽器里敲入http:// search時,訪問的是那台電腦而不是google。如果對方沒有開啟網路服務,那你就沒法搜索;如果對方有惡意,可能會截獲你的網路請求。
區域網中通過計算機名可以訪問其他主機,計算機名可以不帶點。
對於只在區域網提供服務的主機就可以 http://計算機名/
點表示逐級定址,就像按郵政編碼寄信,撥打手機號碼通話,和CPU的內存定址的道理一樣,任何發起的通信過程在和目標建立連接之前都需要依靠某種方法找到目標地址,點用來分隔每一級標識,比如訪問http://map.google.com,.com是頂級域名,map.google是二級域名,解析時從後向前解析,分層直到找到提供map服務的那台主機。
防止重複,不帶點意味著如果沒有頂級域二級域的區分,這樣域名空間就會非常有限,短位元組域名也會變成稀缺資源
另外補充一點,不帶點域名並非google首創,我大TC人民創造的類域名體系,如通用網址、無線網址等上網助手,一直是人民群眾推廣反流氓軟體的好幫手
域名的定義:由點分割的字元標籤組成。每一個字元標籤最長至63個字元,一個合法域名的總長度最大為255個位元組。
我認為最關鍵的在於DNS的請求報文中請求欄位的設置:
我們以知乎的A地址請求(請求http://www.zhihu.com的IPv4地址)為例,請求的報文我給抓下來了,請求部分數據見下圖:
www幾個字元?3個
zhihu幾個字元?5個
com幾個字元? 3個
看到上圖陰影部分中的從左至右依次出現的03,05, 03沒?對的,請求域名的數據包會在相應層級域名之前加上這個層級的字元長度。規範中這個稱之為data label。所以你想想這個世界上有多少個程序指望著那個點,然後計數,然後構造請求包。沒點? 這不是把規範給毀了嗎?
知乎的完整主機名是www.zhihu.com.,最後還要加一個點,在DNS裡面是需要用完整主機名的。(.)則代表了A—M這13台根DNS伺服器。因為DNS系統是分層的,每個DNS只知道自己所管理的域,並不知道其他域。我的電腦DNS伺服器設置為8.8.8.8,當我要解析www.zhihu.com的時候,假如8.8.8.8這台DNS伺服器並沒有緩存關於www.zhihu.com的信息,那麼8.8.8.8就要向13台根伺服器查詢,這13台伺服器也不知道www.zhihu.com的IP,但是它知道.com,.net等這些頂級域的DNS的IP地址,於是告訴8.8.8.8向這些頂級域的伺服器去查詢www.zhihu.com的信息,.com再告訴8.8.8.8要向zhihu.com的DNS伺服器查詢www這台主機的IP地址,最終才能解析www.zhihu.com。所以在目前來說(.)是整個DNS系統的核心,在DNS系統裡面是必須存在的,如果沒有(.),DNS的層級結構就被破壞的。
域名為什麼要有「.「呢?簡單的答案:是規定的。
RFC 921 - Domain name system implementation schedule
摘錄其中相關的一段:
Because of the growth of the Internet, structured names (or
domain style names) have been introduced. Each element of the
structured name will be a character string (with the same
constraints that previously applied to the simple names). The
Postel [Page 1]
RFC 921 October 1984
Domain Implementation Schedule - Revised
elements (or components) of the structured names are separated
with periods, and the elements are written from the most
specific on the left to the most general on the right.
For example: USC-ISIF.ARPA
. 是根域,相當於root,然後下級域是13個頂級域例如com,net,org等,再下一級就是二級域名,例如zhihu,qq,baidu等,再下一級就是二級域名站自定義的子域,例如:qzone。www是這台計算機的FQDN名(俗稱計算機名),http://zhihu.com才是域名,域名是從低級往高級的順序寫的,從而構成例如http://www.qzone.qq.com
localhost
.ac .io .sh .tm 這四個註冊局都是被同一家公司代理的。
nic.ac / http://nic.io / nic.sh / nic.tm 下方都是有:powered by ICB plc, UK.
所以直接可以訪問 root 根域名就不奇怪了。
理論上當然可以是沒有點的,理論上指從數學上來講,用一串字元表示一個互聯網地址,你就想像一本英文字典,單詞都沒有點,每個詞條就是一個網站,這樣的系統當然可以工作。
然後實際上是有點的,rfc協議也是這麼規定的,所以必須有點。
然後問題是為什麼理論上可以沒點,實際操作人們還是決定要用點?簡單的說,沒點就是一顆每層節點非常少(數字加字母加少許符號)但是層數很深的樹,加點就變成每層節點非常多但是層數較淺的樹,但是每層的節點的特點都是容易記住的字元串。
域名的目的是給人而不是機器一個能記住的方法在一顆樹中搜索到一個唯一節點,那麼加點就會讓人腦用一些容易記住的字元串定位一些信息。
如果互聯網上只有機器,那ipv6就夠了,而ip地址可以被當作*一個*數字,那是比加點域名高效無數倍的信息傳遞存儲方法。
回復中已經有不少專業性的 技術性的答案了 我來說說題外話...
說起來..似乎不少WEB程序都使用了.來分割主機名.
如果網址 不是 .. 主機名.域名.後綴
實際使用中也會有不少麻煩吧
我們只能通過 h t t p : / / xxx / 將來協議一多.. 以後都是協議名+名稱+/
http://www.google.com
www 為二級域名,google為主域名。一個主域名可以有很多二級域名,甚至三級域名。com,net,org都是頂級域名
推薦閱讀:
※如何評價 Google 在機器學習領域取得的成效?
※Google 開源項目 word2vec 的分析?
※如何評價Google 的 Project Tango ?
※目前 Google 的創新精神是否超過了蘋果?
※假如 Android 突然不開源了,整個智能設備格局會發生什麼變化?