IP、主機名和域名

IP、主機名和域名

1 人贊了文章

sina.com.cn/為例,http是通信使用的協議,sina.com.cn是域名,www是提供服務的機器的名字(計算機名),計算機名+域名才是主機名,即sina.com.cn是主機名。再舉個例子,blog.sina.com.cn/中,blog是提供博客服務的那台機器的名字,sina.com.cn是域名,blog.sina.com.cn是主機名。

域名還分級,從後往前級別依次降低,sina.com.cn中,cn是頂級域名,表示中國,com是二級域名,表示商業機構(commercial),sina是三級域名,一般用自己的名字。

在網路通信中,每個IP可唯一標識一台主機,在多網卡或者路由器等的情況下,每個主機可以有多個IP,通過哪個IP都可以找到該主機;但是IP地址是一個32位的數字,為了便於記憶,我們通常把按每位元組劃分,然後用10進位表示出來,即我們通常說的點分十進位(在IPV6的中採用的是冒號分十六進位)。如下圖的網路抓包,可以看到一個我們常見的IP地址:192.168.100.1的實際存在形式用16進位就是:c0 a8 64 01 ,用二進位表示就是:

11000000 101010001100100 00000001

備註:

可以看到IP地址的可讀性非常差,雖然用點分十進位表示之後,可讀性有所提升,但是依然難以記憶,尤其是對於數字不敏感的老外,因此他們就想用易讀的單詞來代替這些純數字,於是就誕生了主機名和域名。

在區域網中,每台主機都有一個主機名,可以使用英文字母或者單片語成的主機名來代替該主機的IP地址(這裡假設主機只有一個網卡一個IP),這樣就非常方便記憶,例如我們區域網中有一個主機名為:clsserv202的伺服器,它的IP地址是:11.12.112.202,我們在使用IP地址11.12.112.202的地方使用clsserv202來代替它,例如我們要ping該主機,則可以執行命令:

ping clsserv202

該命令的執行情況如下圖所示:

Ping 主機名

跟ping ip地址是一樣的效果,如下圖:

Ping ip地址

這內部發生了什麼事情呢?

在實際開發過程中,我們通常使用gethostbyname和gethostbyaddr這兩個系統函數,其中gethostbyname表示通過主機名來查詢IP地址,即傳入一個主機名或域名,它就給你返回一個IP地址;gethostbyaddr表示通過IP地址來查詢主機名;

在ping命令的源碼中可以看到它就調用了gethostbyname函數將主機名轉換成IP地址,然後才進行的ping操作。ping.c

Hosts文件

在linux系統中有個hosts文件來記錄本機所在區域網中的主機的IP地址和對應的主機名,如下圖所示:

可以看到host文件由一行行的IP和主機名的對應關係組成,其中每行的開始是一個IP地址,緊接著IP地址(隔著空格)的就是該IP對應的主機名;

如果區域網內的所有主機都想使用域名來代替IP進行通信,那麼要求該區域網中每個主機上的hosts文件都要把本區域網中的所有主機的主機名和IP的對應關係都存起來。當區域網內的主機非常多的時候,維護起來就非常麻煩,例如IP有變更的時候就需要挨個把所有的主機的hosts文件都更新一遍。

那麼有沒有更好的辦法來解決這個問題呢?方法就是通過搭建內網DNS服務來完成主機名和IP的映射;

域名

域名可以認為是主機在公網環境中的標識,在在公網下,對應一個唯一的IP,例如我們訪問百度的主頁:baidu.com

主機名和域名的區別

實質上,主機名的含義是機器本身的名字,域名是方面記錄IP地址才做的一種IP映射;通過上述介紹可以看到,二者有共性:都能對應到一個唯一的IP上,從應用場景上可以這麼簡單理解二者的區別:主機名用於區域網中;域名用於公網中。


推薦閱讀:

訪問網站的流程和自建簡易的伺服器
伺服器虛擬化技術
遊戲伺服器與Web伺服器特點對比

TAG:DNS | 伺服器 | 科技 |