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

苦逼的碼農發表於2019-01-15

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

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

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

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

被拒絕訪問了。

而用ip來訪問百度,則沒啥問題,如圖

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

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

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

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

所以,很多網站在釋出的時候,是有可能幾個域名共用一個CDN伺服器的。

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

稍微解釋下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機制:該機制主要是用來解決一個伺服器對應多個域名時產生的一些問題,通過這種機制,伺服器可以提前知道(還沒建立連結)客戶端想要訪問的網站,想要知道更加具體的我已經給你們準備好文章:https://blog.csdn.net/firefile/article/details/80532161

知道了用域名可以訪問知乎,而用ip不可以訪問知乎之後,我們再來說說百度。

為啥百度ip和域名都可以訪問呢?

這其實很簡單,就是百度用的CDN伺服器,只對應一個網站域名唄,說白了,就是百度有錢!

有收穫?不妨點個贊,讓更多的人看到這篇文章!

文章目錄導航:各類文章彙總

文章首發於我的公眾號「苦逼的碼農」,更多精彩文章可以關注下我哦。後臺回覆「666」送你一份我整理的電子書單

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

相關文章