【計算機網路筆記】2.6 Video Streaming and Content Distribution Networks
【計算機網路筆記】2.6 Video Streaming and Content Distribution Networks
Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。
2.6.1 Internet Video(網際網路視訊)
在此探討的為預錄視訊串流(Streaming Stored Video)。
其運作模式是將預先錄製好的媒體(如電影、電視節目、UGC 影片)放置在伺服器上,使用者根據需求(On-demand)發送請求來觀看。
視訊本質上是連續的影像,資料量極其龐大,它是網際網路上對頻寬需求最高、對效能最敏感的應用類型之一。
其中所面臨的挑戰:如何在頻寬有限且會波動的網路環境中,傳送高位元率(High Bit Rate)的資料,並保持播放的流暢度。
術語解析
- 位元率(Bit Rate):視訊每秒傳輸所需的資料量。從低畫質的 100 kbps 到 4K 串流的 10 Mbps 以上不等,為衡量網路負載的關鍵指標。
- 壓縮(Compression):將原始數位影像進行編碼以減少資料量的過程。位元率越高,影像品質越好,但檔案越大,因此需要做壓縮。
- 端對端吞吐量(End-to-End Throughput):從伺服器到客戶端這條路徑上,網路實際能傳送資料的速率。
視訊的本質與數位化
以電腦科學的角度看,視訊其實就是一系列以固定速率(例如每秒 24 或 30 張)播放的影像(Images)。
- 未壓縮的數位影像是由像素(Pixels)陣列組成的。
- 每個像素由數個位元編碼,代表亮度和顏色。
壓縮的必要性與權衡
若不壓縮視訊,原始資料量會大到無法在網路上傳輸,因此需使用現成的壓縮演算法來處理視訊。
我們可將視訊壓縮到幾乎任何我們想要的位元率,但代價是畫質的損失,因此這是一種位元率與畫質之間的權衡問題。
位元率數據級距:
- 低品質視訊:約 100 kbps。
- 高畫質電影(HD):超過 4 Mbps。
- 4K 串流:超過 10 Mbps。
網路傳輸的黃金法則
為了確保使用者能順暢觀看,網路必須滿足一個簡單但嚴苛的數學條件:平均端對端吞吐量(Average Throughput) 視訊的壓縮位元率(Encoded Bit Rate)
- 吞吐量 位元率:播放就會卡頓(Buffer),因為客戶端消耗數據的速度比接收數據的速度快。
- 舉例:一小時的高畫質影片(假設 2 Mbps)會消耗約 1 GB 的流量,這對儲存和傳輸都是巨大的挑戰。
適應性策略:多版本製作
現實世界中,使用者的網路環境差異極大(有人用光纖,有人用 4G 網路等等)。
為了不讓低頻寬使用者無法觀看,也不讓高頻寬使用者忍受低畫質,內容提供者會採用以下策略:
- 預先處理:將同一部影片壓縮成多個不同品質的版本。
- 分級範例:
- 300 kbps(適合手機/3G)
- 1 Mbps(適合一般寬頻)
- 3 Mbps(適合高速網路)
- 使用者選擇:使用者(或客戶端軟體)根據當前的可用頻寬,選擇最適合的版本進行觀看。
更具體的例子是到 youtube 看影片的時候,你可以自己選擇要 1080p 還是 720p,或者是切到自動模式。
2.6.2 HTTP Streaming and DASH(HTTP 串流與 DASH)
該節探討如何利用現有的 Web 基礎設施(HTTP 伺服器)來傳送視訊,重點從早期的「單一版本傳輸」演進到現代的「動態適應性傳輸」。
這一個演進的過程解決以下問題:
- 頻寬異質性(Heterogeneity):使用者的網路速度差異極大(有人用光纖,有人用 4G 的手機等等)。
- 頻寬波動(Fluctuation):同一個使用者的網速會隨時間變化(例如拿著手機移動)。
而傳統方法是給所有人都傳送同樣畫質的影片,這會導致網速慢的人看不了(一直轉圈圈),網速快的人畫質卻不夠好。
解決方案:DASH(Dynamic Adaptive Streaming over HTTP,HTTP 上的動態自適應串流)。
DASH 使讓客戶端(Client)可根據當下的網速,動態選擇最適合的畫質片段來下載。
術語解析
同樣地,繼續下去之前先來個術語解析:
- HTTP 串流(HTTP Streaming):最基礎的實作方式。
- 視訊只是一個放在 HTTP 伺服器上的普通檔案(有特定的 URL)。
- 客戶端建立 TCP 連線,發送 GET 請求,伺服器就盡可能快地發送資料。
- 客戶端一邊接收、一邊緩衝、一邊播放。
- DASH(Dynamic Adaptive Streaming over HTTP,HTTP 上的動態自適應串流):現代串流媒體的標準。
- 它不把影片看作一個大檔案,而是切成無數個小片段,並提供多種畫質選擇。
- 清單檔案(Manifest File):像是影片的「菜單」。
- 它列出了影片有哪些版本(解析度、位元率)、每個版本的 URL 是什麼。
- 客戶端必須先下載這個檔案,才知道如何選擇片段。
- 視訊片段(Chunks):DASH 將影片切分成數秒鐘(例如 2 到 10 秒)長度的小檔案。
傳統 HTTP 串流
先從傳統的角度來看,此為 YouTube 早期使用的方式。
運作流程:
- 伺服器將影片作為一個普通檔案儲存。
- 客戶端要看影片,因此建立 TCP 連線。
- 接著客戶端對該 URL 發送 HTTP GET 請求。
- 伺服器盡全力發送資料。
- 客戶端將資料存入應用程式緩衝區。
- 當緩衝區累積到一定程度,開始播放。
缺點:
- 一體適用:所有客戶端收到的是同樣位元率的影片。
- 如果影片是 3 Mbps,網速只有 1 Mbps 的使用者會一直卡頓,而網速有 100 Mbps 的使用者則覺得畫質太差。
DASH 的運作機制
DASH 的設計機制是將決策權交給客戶端。
- 伺服端的工作:
- 多版本製作:將同一部影片編碼成多種不同的位元率(例如:低畫質、中畫質、高畫質)。
- 切片與索引:將這些版本切成時間長度相同的小片段(Chunks),並建立一個 Manifest File(清單檔案)來索引這些區塊的 URL。
- 客戶端的工作:主要做以下這四件事的迴圈。
- 取得清單:首先請求 Manifest File,了解有哪些版本可選。
- 測量網速:監測當前接收資料的速率。
- 決策演算法(Rate Determination Algorithm):
- 如果頻寬充裕,則請求高位元率的片段(Chunk)。
- 如果頻寬變差,則請求低位元率的片段。
- 發送請求:使用 HTTP GET 請求下一個時間片段的特定版本。
傳統 HTTP 串流 vs DASH
| 比較項目 | 傳統 HTTP 串流 | DASH |
|---|---|---|
| 編碼版本 | 單一版本 | 多版本(Multi-version) |
| 傳輸單位 | 單一大檔案 | 小段的片段(Chunks) |
| 適應性 | 無(被動接收) | 高(主動切換畫質) |
| 決策者 | 無(伺服器只負責送) | 客戶端(Client) |
| 主要優點 | 簡單 | 使用者體驗佳、適應移動環境 |
2.6.3 Content Distribution Networks(內容傳遞網路)
如何將海量的數據(如 Netflix 影片、YouTube 內容等)傳送給全球分佈的百萬級使用者?
直觀但錯誤的解法:建立一個超級巨大的單一資料中心(Single Massive Data Center)。
為什麼行不通?主要有三個問題:
- 距離太遠:如果客戶端在地球另一端,封包要經過太多路由器,延遲太高,且中間任何一個環節出錯都會導致卡頓。
- 重複流量(Redundancy):同一部熱門電影,如果由資料中心重複傳送幾百萬次經過同一條連結,會造成巨大的頻寬浪費和成本問題。
- 單點失效(Single Point of Failure):資料中心一旦斷線或發生災難,全球服務就掛了。
正確解法:CDN(Content Distribution Networks,內容傳遞網路)。
不把雞蛋放在同一個籃子裡。與 DNS 一樣建立一個分佈式的伺服器網路,將內容複製並儲存在多個地點,讓使用者從「最近」或「路徑最好」的伺服器下載。
術語解析
- CDN(Content Distribution Network):管理分佈在多個地理位置的伺服器群,儲存內容副本(如影片、圖片),並將使用者導向至最佳伺服器的一種系統。
- CDN 可以是私有的 CDN(private CDN),即由內容提供商本身所擁有。
- 深度進入(Enter Deep):一種 CDN 設計理念,由 Akamai 提出。主要是將伺服器群直接放進存取端 ISP(Access ISPs)的網路內部。
- 特點:離使用者最近,效能最好,但維護成千上萬個分散的小節點非常困難。
- 帶回家(Bring Home):另一種 CDN 設計理念,由 Limelight 及許多其他 CDN 公司共同提出。將較少數量(例如幾十個)的大型伺服器群放在重要的位置(如 IXP 網際網路交換點)。
- 特點:離使用者稍遠,但維護和管理成本較低。
- DNS 轉址(DNS Redirection):讓 CDN 運作的核心。利用 DNS 系統將使用者的請求「轉發」到 CDN 的伺服器,而不是原始內容提供者的伺服器。
CDN 的運作流程
假設有一家電影公司 NetCinema,它付錢請一家 CDN 公司 KingCDN 來幫忙傳送影片,接下來會有以下六個步驟:
- 使用者造訪
NetCinema的網頁。 - 使用者點擊連結
http://video.netcinema.com/6Y7B23V時,使用者的主機向本地 DNS 伺服器(Local DNS Server)查詢video.netcinema.com這個 IP 位址。 - 本地 DNS 伺服器將 DNS 查詢轉發給
NetCinema官方 DNS 伺服器。NetCinema官方 DNS 伺服器不回傳 IP 位址。- 其官方 DNS 伺服器回傳
KingCDN域中的主機名稱給本地 DNS 伺服器,主機名稱如:a1105.kingcdn.com。
- 此時 DNS 查詢進入
KingCDN的專屬 DNS 基礎建設。- 本地 DNS 伺服器對
a1105.kingcdn.com發送查詢(目前總共第二筆查詢)。 KingCDN的 DNS 系統回傳KingCDN內容伺服器的 IP 位址給本地 DNS 伺服器。
- 本地 DNS 伺服器對
- 本地 DNS 伺服器轉發內容服務 CDN 節點的 IP 位址給主機。
- 客戶端拿到
KingCDN的伺服器 IP 位址,開始直接跟它建立 TCP 連線並對視訊做 HTTP GET 請求(使用 DASH 協定)。
上述步驟如下圖所述:

Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 178, Figure 2.25)
叢集挑選策略(Cluster Selection Strategy)
CDN 的 DNS 伺服器如何決定要把哪個 IP 給使用者用?
| 策略 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| 地理位置最接近的叢集 | 根據使用者的 IP 判斷地理位置,指派物理距離最近的伺服器。 | 簡單。 | 物理距離近不代表網路速度快(可能中間線路壅塞),有些使用者的本地 DNS 伺服器離自己很遠,會導致誤判。 |
| 即時測量(Real-time Measurements) | CDN 伺服器定期向全球的本地 DNS 伺服器發送探測(如 ping 訊息或 DNS 查詢),測量延遲和丟包率。 | 能反映當下真實的網路狀況,選擇最佳路徑。 | 會產生額外流量,許多本地 DNS 伺服器會用防火牆阻擋探測,導致無法測量。 |
2.6.4 Case Studies: Netflix and YouTube(案例研究:Netflix 與 Youtube)
Netflix
Netflix 的架構非常獨特,它採用了一種混合雲(Hybrid Cloud)的策略,可將其拆解為「大腦」和「肌肉」兩部分來看。
- 大腦:亞馬遜雲端服務(Amazon Cloud / AWS)
- Netflix 並沒有建立自己的資料中心來處理所有事情,它將幾乎所有的運算邏輯都放在了 Amazon 的雲端上。
- 功能:網站註冊、登入、計費、電影目錄瀏覽、推薦演算法等等,都在 AWS 上運行。
- 內容攝取與處理(Ingestion & Processing):
- 當 Netflix 收到片商的電影母帶後,會上傳到 AWS。
- AWS 上的機器會將電影轉碼成多種格式(適應電視、手機、電腦等裝置)和多種位元率(Bit Rate),以支援 DASH 技術。
- 肌肉:私有 CDN(Private CDN)
- 雖然大腦在 Amazon,但傳送影片流量需要極大的頻寬,這部分 Netflix 選擇自己動手,建立了私有 CDN,稱為 Netflix Open Connect。
- 硬體部署:Netflix 研發了專用的伺服器機櫃(Server Racks),直接安裝在網際網路交換點(IXPs)甚至是住宅區 ISP 的機房內部。
- 優勢:此為深度進入(Enter Deep),伺服器離使用者的家越近,影片傳輸就越快,畫質就越好。
Netflix 的關鍵策略:推送式快取(Push Caching)
- 運作方式:
- Netflix 不會等到有人想看某部電影才去下載(此為拉取式 Pull)。
- 正好相反,Netflix 會在離峰時段預先將熱門電影推送到各地的 CDN 伺服器上儲存。
- 為什麼這麼做?因為一部電影的熱度是可以預測的(今天剛上的大片,明天一定很多人看),這樣做可以有效利用半夜閒置的頻寬,避開網路塞車。
客戶端互動流程
當使用者在手機上點選播放一部電影時,背後會發生什麼事情?
- 請求:使用者的手機連上 AWS 上的 Netflix 伺服器。
- 決策:AWS 上的軟體判斷哪個 CDN 伺服器有這部片,且離使用者最近、負載最低。
- 回應:AWS 直接回傳該 CDN 伺服器的 IP 以及清單檔案(Manifest File)。
- 播放:使用者的手機直接跟該 CDN 伺服器建立連線,利用 DASH 協定開始串流。
註:Netflix 不使用 DNS 轉址(DNS Redirection)來選擇伺服器,這是它與傳統 CDN 最大的不同。它依賴於應用層的軟體邏輯,直接告訴客戶端要去哪裡抓檔案。
YouTube
YouTube 的問題與 Netflix 略有不同。
Netflix 是少數精選內容(專業電影),YouTube 則是海量的使用者生成內容(UGC,User-Generated Content)。
基礎設施:Google 私有 CDN
YouTube 於 2006 年被 Google 收購,自然就使用了 Google 強大的基礎設施。
- 部署:Google 同樣擁有龐大的私有 CDN,伺服器遍布全球的 IXP 和 ISP。
- 私有網路:Google 擁有自己的全球骨幹網路,將這些資料中心連接起來,盡可能繞過公共網際網路的擁塞路徑。
策略:拉取式快取(Pull Caching)
- 問題:因為 YouTube 影片數量太多(每分鐘有數百小時的影片上傳),不可能把所有影片都推送到所有伺服器。
- 策略:若使用者請求的影片不在當地的 CDN 伺服器上,該伺服器會去別處(例如更大的資料中心)把影片拉取過來存著,同時播給使用者觀看。
客戶端互動流程
與 Netflix 不同,YouTube 採用了經典的 CDN 導流方式:
- DNS 轉址(DNS Redirection):
- 當使用者請求影片時,Google 的 DNS 系統會介入。
- 它會根據使用者的 IP 位置,以及伺服器負載,將網域名稱解析到一個最適合使用者的 CDN 伺服器 IP。
- 串流協定:YouTube 早期主要使用標準的 HTTP 串流,現在也逐漸轉向類似 DASH 的自適應技術,但與 Netflix 的專有 DASH 實作有所不同。
Netflix vs Youtube
| 比較項目 | Netflix | Youtube |
|---|---|---|
| 雲端服務 | Amazon AWS(網站、邏輯、資料庫) | Google Cloud |
| CDN | Netflix Open Connect(私有 CDN) | Google CDN(私有 CDN) |
| 快取策略(Caching Strategy) | 推送式(Push Caching):利用離峰時間預先派送熱門內容。 | 拉取式(Pull Caching):有人看才去抓。 |
| 伺服器選擇機制 | 應用程式邏輯:AWS 直接告訴客戶端去連哪個 IP。 | DNS 轉址(DNS Redirection):透過 DNS 解析給出最佳 IP。 |
| 串流技術 | DASH | 早期:HTTP 串流 後期:DASH |
| 面臨的挑戰 | 長時間的高畫質電影,需保證極高的觀看體驗。 | 海量的短影片,需處理巨大的上傳量與儲存需求。 |
總整理
2.6.1 Internet Video(網際網路視訊)
- 視訊本質與挑戰
- 本質:視訊為連續影像(Images)的序列,資料量極大。
- 挑戰:在頻寬有限且波動的網路中,傳送高位元率資料並維持流暢。
- 術語:
- 位元率(Bit Rate):傳輸所需資料量(100 kbps ~ 10 Mbps+)。
- 壓縮(Compression):權衡畫質與檔案大小(畫質 位元率)。
- 端對端吞吐量(End-to-End Throughput):從伺服器到客戶端這條路徑上,網路實際能傳送資料的速率。
- 傳輸黃金法則
- 為了避免卡頓 (Buffering),必須滿足:$$\text{平均端對端吞吐量} \ge \text{視訊壓縮位元率}$$
- 適應性策略(多版本製作)
- 針對不同使用者的頻寬差異,伺服器將影片預處理為多個版本:
- 低畫質(如 300 kbps) 適合 4G/手機。
- 高畫質(如 3 Mbps) 適合光纖/寬頻。
- 機制:由使用者或客戶端軟體依當前頻寬選擇合適版本。
- 針對不同使用者的頻寬差異,伺服器將影片預處理為多個版本:
2.6.2 HTTP Streaming and DASH
- 傳統 HTTP 串流(早期 YouTube)
- 運作:透過 TCP 連線發送 HTTP GET,伺服器盡全力發送,客戶端緩衝後播放。
- 缺點:一體適用。無法適應網速變化,導致慢速者卡頓、快速者畫質受限。
- DASH(Dynamic Adaptive Streaming over HTTP)
- 現代標準,將決策權交給客戶端 (Client)。
- 伺服器端:
- 多版本:影片轉碼為多種位元率。
- 視訊片段(Chunks):切成數秒的小片段。
- 清單檔案(Manifest File):索引各版本 URL 的「菜單」。
- 客戶端端(迴圈):
- 下載清單檔案。
- 測量當前網速。
- 決策演算法:網速快抓高品質片段,網速慢抓低品質片段。
- 發送 HTTP GET 請求。
- 比較:傳統 vs. DASH:
| 比較項目 | 傳統 HTTP 串流 | DASH |
|---|---|---|
| 編碼版本 | 單一版本 | 多版本(Multi-version) |
| 傳輸單位 | 單一大檔案 | 小段的片段(Chunks) |
| 適應性 | 無(被動接收) | 高(主動切換畫質) |
| 決策者 | 無(伺服器只負責送) | 客戶端(Client) |
| 主要優點 | 簡單 | 使用者體驗佳、適應移動環境 |
2.6.3 Content Distribution Networks(CDN)
CDN 用於解決如何將海量內容傳送給全球使用者的問題。
- 架構演進
- 單一巨型資料中心(錯誤解法):有距離過遠(高延遲)、重複流量浪費、單點失效風險。
- CDN(正確解法):分散式網路,將內容複製儲存於多地。
- 深度進入(Enter Deep):伺服器進駐 ISP 內部(離使用者近,難維護)。
- 帶回家(Bring Home):伺服器建在 IXP 關鍵節點(離使用者稍遠,易維護)。
- 運作核心:DNS 轉址(DNS Redirection)
- 使用者不直接連源伺服器,而是透過 DNS 導流至 CDN。
- 流程簡述:
- 使用者訪問影片連結。
- 本地 DNS 查詢源站(如 NetCinema),源站 DNS 回傳 CDN 域名(如 KingCDN)。
- 本地 DNS 查詢 CDN 域名,CDN DNS 系統依策略回傳最佳 CDN 節點 IP。
- 使用者直接向該 IP 請求影片(DASH)。
- 節點挑選策略
- 地理位置:依 IP 判斷距離。優點簡單,但可能誤判網路壅塞狀況。
- 即時測量:CDN 定期探測延遲。優點精準,但有額外流量且易被防火牆阻擋。
2.6.4 Case Studies: Netflix vs. YouTube
- Netflix(混合雲架構)
- 大腦(AWS):處理邏輯、註冊、推薦、轉碼。
- 肌肉(Private CDN - Open Connect):負責傳送影片流量,伺服器架設在 ISP/IXP。
- 關鍵策略:
- 推送式快取(Push Caching):離峰時段預先將熱門片推送到 CDN(因為熱度可預測)。
- 應用層導流:不靠 DNS,由 AWS 運算後直接告訴客戶端去連哪個 IP。
- YouTube(Google 基礎設施)
- 架構:Google 私有 CDN 與全球骨幹網路。
- 關鍵策略:
- 拉取式快取(Pull Caching):影片量太大(UGC),無法全推,有人看的影片且本地沒有時,才去後端拉取。
- DNS 導流:傳統 CDN 方式,透過 DNS 解析指派 IP。
| 比較項目 | Netflix | Youtube |
|---|---|---|
| 雲端服務 | Amazon AWS(網站、邏輯、資料庫) | Google Cloud |
| CDN | Netflix Open Connect(私有 CDN) | Google CDN(私有 CDN) |
| 快取策略(Caching Strategy) | 推送式(Push Caching):利用離峰時間預先派送熱門內容。 | 拉取式(Pull Caching):有人看才去抓。 |
| 伺服器選擇機制 | 應用程式邏輯:AWS 直接告訴客戶端去連哪個 IP。 | DNS 轉址(DNS Redirection):透過 DNS 解析給出最佳 IP。 |
| 串流技術 | DASH | 早期:HTTP 串流 後期:DASH |
| 面臨的挑戰 | 長時間的高畫質電影,需保證極高的觀看體驗。 | 海量的短影片,需處理巨大的上傳量與儲存需求。 |
