為啥用ip不可以訪問知乎,而百度卻可以?

2021-09-11 12:23:30 字數 1060 閱讀 8207

我們先來ping知乎的網域名稱,然後可以得到響應的伺服器的ip

之後我們用瀏覽器來訪問這個ip,結果如下

被拒絕訪問了。

訪問知乎的時候,網域名稱可以訪問,ip不可以訪問,這究竟是為啥?

我們知道,ipv4的ip位址是非常有限的,如果每個人都想擁有乙個全球ip,那肯定是不夠分配的,不知道啥是全球ip的可以看我這篇文章:談談nat:什麼?全球ip和私有ip是什麼鬼?

所以,很多**在發布的時候,是有可能幾個網域名稱共用乙個cdn伺服器的。

稍微解釋下cdn是啥: cdn伺服器可以說是一種快取伺服器。當我們要訪問某個**的資源時,如果該**的伺服器離我們很遠,這樣的話響應速度就會很慢,為了讓響應速度快一些,我們可以把資源分布放在各個地方,然後響應客戶端的時候,把離客戶端較近的資源傳送給他

當我們用網域名稱訪問知乎的時候,cdn伺服器可以根據訪問的網域名稱知道你想要的是哪個**的資源,然後直接給你返回對應的資源。

但是當你用公網ip訪問就不一樣了,由於乙個cdn伺服器的公網ip對應多個網域名稱**,他不知道你想要的是哪個**的資源,也就是說,當你用 118.89.204.192 去訪問知乎的時候,cdn伺服器不知道你要訪問的是 zhihu.com,還是訪問 a.com 或 b.com,所以他也乾脆明了點,直接拒絕你的訪問。

有人可能會問,我輸入網域名稱之後,dns伺服器幫我自動解析成對應的ip,去訪問知乎的時候,也還是用ip訪問的啊,這貌似和ip訪問沒啥區別啊。

確實,訪問的時候,dns伺服器都會幫們我把網域名稱解析成ip去訪問,cdn伺服器之所以能夠檢測到對應的網域名稱,其實是這樣的:

當客戶端用網域名稱訪問知乎的時候,dns會解析成對應的ip去訪問cdn伺服器,然後cdn伺服器可以根據sni機制獲得該ip對應的**網域名稱,然後返回對應的資源。

這裡稍微簡單粗暴解釋下sni機制:該機制主要是用來解決乙個伺服器對應多個網域名稱時產生的一些問題,通過這種機制,伺服器可以提前知道(還沒建立鏈結)客戶端想要訪問的**,想要知道更加具體的我已經給你們準備好文章:blog.csdn.net/firefile/ar…

34 到底可不可以用join

冷資料 溫資料 熱資料,難道資料也是有溫度的?mysql explain中的名詞解釋 與快取記憶體命中率是同種概念。指的是cpu呼叫指令時命中率的問題。指令是線性傳送給cpu的,還沒有處理到的指令就會暫存在cpu的快取記憶體或記憶體中,當快取或記憶體容量不足時,cpu常常會找不到所需的指令,從而被迫...

設定mysql可以用ip訪問

需更改 mysql 資料庫裡的 user表裡的 host項 把localhost改稱 在cmd中輸入 mysql h localhost u root p 輸入password 首先按下面的步驟登入mysql伺服器 登入mysql需要切換到dos下的mysql的bin目錄,進行如下操作 mysql ...

RHEL7 4 yum倉庫不可以用問題解

虛擬機器版本 vmware 14 pro 安裝的linux版本 rhel7.4 yum軟體倉庫,軟體倉庫通常不可用,怎麼辦?this system is not registered with an entitlement server.you can use subscription manage...