Wen Chen
Published on

小學生程度也能懂 DNS/CDN

Authors
  • avatar
    Name
    Wen Chen
tech

Photo by JJ Ying on Unsplash

前言

講在開頭,會有這篇文的產生,主要來自於最近參加公司內部的知識分享,公司裡的大神前輩分享了許多與Web相關的知識。

裡面用了很多淺顯易懂的比喻,讓我想起前陣子聽股癌時主委的某句話, 大意是:「如果一個人能用很簡單的比喻講完很複雜的理論,那他一定花了很多時間在準備與吸收。」

聽完講座,確實很多原本比較模糊跟薄弱的觀念好像都獲得了連接,之後應該會趁著記憶猶新整理過後再更新上來,哪天如小學生程度的我如果又忘了,還可以回來複習XD


DNS 與 CDN 之前

開始之前,必須先做點行前補充,「瀏覽器輸入URL後到底了發生什麼事」, 因為篇幅關係,今天會著重在 DNS 與 CDN ,所以其他部分就先簡單帶過, 或許未來有機會在寫一篇 XD

不囉唆我們先上圖:

瀏覽器輸入URL到底發生什麼事

嚴格來說現實場景的架構可能更複雜,Server 外層還會有 Load Balancer 等 ..但今天暫時不會提到,就先當作沒這回事吧XD

Step 1 : 首先我們回到圖內的紅圓圈,就是我們電腦裡的瀏覽器:

Domain Name (網域名稱)

首先我們回到最一開始的 URL ,假設今天我們想造訪的網址是:
https://wenchen1997.com,這段 URL 裡的 https 指的是通訊協定,而wenchen1997.com ,便是我們的網域名( Domain )。

而域名就好比是我們的通訊錄取的命名,就像:小花、小美。

域名需要遵照制定好的規則,否則網路世界裡可能會有數以萬計的小花

IP

Internet Protocol (簡稱:IP) ,中文稱為網際協議。 網站們在網路上真實的位置,事實上我們是透過這組像: 172.16.254.1 的地址來進行連線。

回過頭來說。IP 就等同於電話號碼,而我們之所以需要網域名稱, 很顯然便是我們如果我們都只有電話號碼的話,根本沒人記得起來吧 XD

DNS

網域名稱系統,Domain Name System 。

了解了我們剛剛所提到的名詞之後,就像我們在打電話時,由於我們無法直接靠著小美兩個字就可以撥通電話 (通訊軟體不在討論範圍XD) 。

所以 DNS 便可以把它想像成網路世界的電話簿,儲存了所有人的電話號碼,當我們想要打給小美的時候,電話簿就會告訴我們小美的電話,讓我們成功通話。

Step 2 : 三次握手建立連線

在我們的瀏覽器取得 IP 位址後,TCP 便可以開始進行三次握手建立連線了。

我:172.16.254.1 有人在嗎?想通個電話!
小美:在的唷!!
我:那我們來吧!

Step 3 、4 : 用戶端發送請求和接收封包

建立連線後,瀏覽器便會開始對伺服器發送各種請求 (GET , POST …) ,而伺服器亦會在處理完成後回傳各種前端所需要的封包、資源。


更多關於 DNS

文章至此,不知道大家有沒有發現,其實我們已經解釋完何為 DNS 了,而這裡另外提到,在我們進行連線時,會透過電腦內設定的 DNS 伺服器來進行查找。

相信大家常常在網上看到某些 DNS 密碼:8.8.8.8 , 8.8.4.4 號稱網路跑很慢、網站跑不出來等疑難雜症,改成上述那兩組就通了。

那兩組 DNS 其實是 Google 所推出的 Public DNS ,這也是為何某些時候上述問題可以解決的原因了。

CDN

Content Delivery Network,內容分發網絡,這裡先引用一段公司前輩所提到的比喻:

我們今天有一個「超高速」網路購物中心,他們能夠做到全台灣 6h 到貨,那便需要透過在北中南各地均設立很多小倉儲,在每個地區的小倉儲都備好一定的貨量。

試想一下,假設我是從基隆下訂一箱從台東來的特產,那從我下訂後,再到對方出貨拿到我手上,可能需要幾天? 兩天?三天?

但是若在這之前,「超高速」 內部便已經事先透過他們的內部物流系統,在商品上架時,提前將庫存分佈至全台灣各地的小倉儲。

於是當我在基隆下單時,距離我較進,且有庫存的物流中心,就會接手處理我的訂單,於是我便可以成功在 6 小時內拿到下訂的商品啦!


CDN示意圖

接著我們回到上面的示意圖:

Step 1 、2 :

DNS 會在收到我們的請求後,將解析全交由給CDN Load Balancer

Step 3:

CDN 負載會根據使用者的位址分配適合的 CDN 節點 IP 返回給使用者。

Step 4 :

用戶透過 IP 訪問 CDN 節點。

Step 5、6:

而在步驟 5 和 6 會出現兩種情況,假如今天 CDN 節點有用戶所需要的資料,CDN 隨即返還資料給用戶。 假如 CDN 節點並無用戶所需要的資料,CDN 節點會透過自身的網路向源網路替使用者獲取資源,並且保留一份緩存於節點之中。

而 CDN 便是透過這個方式來提升傳輸效率和穩定度,即便是第一次照訪時,CDN 節點內沒有用戶所需要資源,節點透過自身的網路向源網站做請求,依舊可以帶來比使用者自己造訪來的更快的體驗。 畢竟人家用的可能是跑車級網路或是飛機直送呢 XD

後記

希望透過這篇文章,可以對這兩個名詞有更清楚的認識,內容若有誤我會及時修正!