# 【計算機網路筆記】1.4 Delay, Loss, and Throughput in Packet-Switched Networks [TOC] Hello Guys, I'm LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, **8**th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 ## 1.4.1 Overview of Delay in Packet-Switched Networks(封包交換網路中的延遲概述) 該節核心概念:解釋封包從源頭(Source)經過一系列路由器(Routers)到達目的地(Destination)的過程中,為什麼會發生延遲(Delay),以及這些延遲是由哪些部分組成的。 一個封包在單一節點所經歷的**延遲總和**定義為四個主要部分的累加: 1. 節點處理延遲(Nodal Processing Delay) 2. 佇列延遲(Queuing Delay) 3. 傳輸延遲(Transmission Delay) 4. 傳播延遲(Propagation Delay) ### 處理延遲(Processing Delay) 處理延遲:封包到達路由器時發生的第一個延遲。 - 成因:路由器需要檢查封包的標頭(Header)來決定導向哪一個輸出連結(Outbound link),同時檢查封包在傳輸過程中是否發生了位元級別的錯誤(Bit-level errors)。 - 耗時:在高速路由器中,這個過程通常非常快,大約在微秒(microseconds)或更短的數量級。 - 處理完畢後,路由器會將封包導向通往下一站的佇列(Queue)。 ### 佇列延遲(Queuing Delay) 佇列延遲:封包在路由器內部等待傳輸的時間。 - 成因:當封包被導向輸出連結時,如果有其他封包正在傳輸,或者有其他封包排在前面,新到達的封包就必須在緩衝區(Buffer)中排隊等待。 - 耗時:此為不可預測的延遲,如果網路擁塞(Congestion)程度高,延遲會很長;如果佇列是空的,延遲則為零。 - 延遲範圍:通常在微秒到毫秒(milliseconds)之間。 ### 傳輸延遲(Transmission Delay) 傳輸延遲:將封包的所有位元(Bits)推送上連結所需的時間。 - 定義:假設封包長度為 $L$ 位元,連結傳輸速率為 $R$ 位元/秒(bps),傳輸延遲就是 $\frac{L}{R}$。 - 概念:由於是將封包從路由器推送到連結上所需的時間,只跟**封包長度**和**傳輸速率**有關,與兩點之間的距離無關。 - 延遲範圍:通常在微秒到毫秒之間。 ### 傳播延遲(Propagation Delay) 傳播延遲:位元進入連結後,傳送到下一個節點所需的時間。 - 定義:假設兩台路由器之間的距離為 $d$ ,傳播速度為 $s$ ,則傳播延遲就是 $\frac{d}{s}$ 。 - 物理限制:傳播速度取決於物理介質(如光纖、銅線),速度大約在 $2 \times 10^8$ 到 $3 \times 10^8$ $\frac{m}{s}$ (公尺/秒)之間(接近光速)。 - 延遲範圍:在廣域網路中,通常是毫秒等級。 ### 傳輸延遲 vs 傳播延遲 這兩個名詞只差一個字(以中文來講),但卻很容易搞混,除了這個差異之外,在兩者性質上也很容易會搞混。 - 傳輸延遲(Transmission Delay):是路由器將封包「推」出去的時間,取決於封包長度和連結頻寬。 - 傳播延遲(Propagation Delay):是訊號在介質上「跑」的時間,取決於距離。 書中用車隊跟收費站來比喻,如下: - 情境:有 10 輛車組成的車隊(整個車隊是封包)要通過收費站(路由器),前往高速公路(連結),而每輛車(單一的車輛是位元)都需要時間繳費。 - 傳輸延遲:收費站處理完這 10 輛車並讓它們全部開上高速公路所需的時間,假設收費站每 12 秒處理一輛車,10 輛車就需要 2 分鐘。這就是將整個「封包」推上連結的時間。 - 傳播延遲:車輛從一個收費站開到下一個收費站所需的時間,假設距離 100 公里,車速 100 km/hr,那這段時間就是 1 小時。 - 總時間:從車隊第一輛車抵達第一個收費站,到最後一輛車離開第二個收費站,總共需要:傳輸延遲 + 傳播延遲,也就是 62 分鐘。 ![image](https://hackmd.io/_uploads/S1E7AvEwZl.png) Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 68, Figure 1.17) ### 公式總結 節點總延遲( $d_\text{nodal}$ )可以表示為以下四個延遲的總和:$$d_\text{nodal} = d_\text{proc} + d_\text{queue} + d_\text{trans} + d_\text{prop}$$ 各項延遲的權重變化: - $d_\text{prop}$ (傳播):在校園網路上可能只有幾微秒,但在衛星連線中可能是主要延遲幾百毫秒。 - $d_\text{trans}$ (傳輸):在高速連結上可能很小,但在低速撥接網路傳輸大封包時延遲會很顯著。 - $d_\text{proc}$(處理):通常很小,但會影響路由器的最大吞吐量(Throughput, 亦可稱產出率、流通量)。 :::info 註:在電腦網路中,吞吐量(Throughput)是指在特定時間內,資料成功從傳送端到達接收端的實際速率。常用單位為 bps(Bits per second)、Mbps 或 Gbps。 ::: ## 1.4.2 Queuing Delay and Packet Loss(佇列延遲與封包遺失) 為何要把佇列延遲拆開來特別說明?因為它是最複雜且最有趣的,加上不是固定的延遲,而是隨著網路狀態動態變化的。 ### 佇列延遲的特性 - 變動性:與處理、傳輸或傳播延遲不同,佇列延遲對每個封包來說可能都不同。 - 例如:如果 10 個封包同時到達一個空佇列,第一個傳輸的封包完全沒有佇列延遲,而最後一個封包則需要等待前 9 個封包傳輸完畢,延遲會很長。 - 統計描述:因為這種隨機性,通常用統計資料來描述它,例如 - 平均佇列延遲 - 佇列延遲的變異數 - 延遲超過特定數值的機率。 ### 佇列延遲的指標:流量強度(Traffic Intensity) 要判斷佇列延遲的大小,最關鍵的指標就是流量強度,如何計算流量強度?有三個參數要先知道: 1. $a$ :封包到達佇列的平均速率(單位:封包/秒,pkt/sec)。 2. $L$ :封包的長度(單位:位元,bits),假設所有封包長度相同。 3. $R$ :連結的傳輸速率(單位:位元/秒,bits/sec),即封包被推送到連結上的速度。 流量強度公式: 假設封包到達的平均速率是 $a$ ,每個封包有 $L$ 位元,則位元到達佇列的平均速率為 $La$ 位元/秒。 最後假設該佇列是無限大,可存放無窮多個位元。 流量強度的定義就是 $\frac{La}{R}$ 這個比值。 ### 流量強度的三種情況分析 1. 流量強度 $> 1$($\frac{La}{R} > 1$) - 狀況:位元到達佇列的速度超過了位元從佇列輸出的速度。 - 結果:佇列長度將無限增長,佇列延遲會趨近於無限大。 - 黃金法則:在流量工程中,設計系統時必須確保流量強度不大於 1。 2. 流量強度 $\le 1$($\frac{La}{R} \le 1$) - 即使平均速率不超過傳輸能力,到達的模式也很重要,大概有兩種模式: - 封包是**週期性**地、一個接一個均勻到達(如每 $\frac{L}{R}$ 秒到達一個),則佇列永遠是空的,延遲為 0。 - 封包是**爆發性**地(Burst)到達的(如每 $N\frac{L}{R}$ 秒同時到達 $N$ 個),那這群封包中的第一個沒有延遲,但第 $n$ 個封包就必須等待前 $n−1$ 個封包傳輸,導致平均延遲顯著增加。 3. 流量強度 $\le 1$($\frac{La}{R} \le 1$),但隨機到達(Random Arrivals) - 現實中,封包的到達是隨機的。 - 見下圖(Figure 1.18)的曲線圖,橫軸是流量強度($La/R$),縱軸是平均佇列延遲。 - 當流量強度接近 0 時:延遲接近 0。 - 當流量強度接近 1 時:延遲會指數級急劇上升。 - 比喻:就像高速公路,如果交通量已經很大(接近容量上限),這時只要多一點點車流,就會導致嚴重的回堵(延遲激增)。 ![image](https://hackmd.io/_uploads/rkPGwKEPWl.png) Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 70, Figure 1.18) ### 封包遺失(Packet Loss) 前面的討論假設佇列可以無限長,屬於理論範疇,但在現實世界中的資源是有限的。 - 有限容量:路由器的佇列(Queue),也就是物理上的緩衝區容量是有限的。 - 封包遺失(Packet Loss):當流量強度持續接近或超過 $1$ ,佇列會被填滿,如果一個新封包到達時發現佇列已滿,路由器不能繼續存它,只能將其丟棄(Drop),此為封包遺失。 - 後果:從終端系統的角度來看,這個封包傳進網路後就消失了,通常會導致應用層或傳輸層(如 TCP)進行重傳(Retransmission)的動作。 ## 1.4.3 End-to-End Delay(端到端延遲) 前兩節專注的是單一路由器的節點延遲(Nodal Delay),該節放大視角探討封包從源頭主機(Source)出發,經過網路路徑,最終到達目的主機(Destination)的總延遲。 ### 理論模型:累積的延遲 假設源頭主機和目的主機之間有 $N−1$ 個路由器(也就是有 $N$ 條連結),且網路目前沒有擁塞(忽略佇列延遲),那端到端延遲可以簡單地視為路徑上每個節點延遲的總和。 也就是: $$d_\text{end-end} = N(d_\text{proc} + d_\text{trans} + d_\text{prop})$$ - $N$ :連結數量。 - $d_\text{trans}$ :傳輸延遲( $\frac{L}{R}$ ),即把封包推上連結的時間。 - $d_\text{proc}$ :處理延遲。 - $d_\text{prop}$ :傳播延遲。 該公式說明了總延遲是路徑上每一個節點(路由器和主機)的處理、傳輸和傳播延遲的累加。 ### 實務測量工具:Traceroute 實際上如何測量網路上兩點之間的延遲?用 Traceroute。 #### Traceroute 的運作原理 為了測量到目的地的路徑和延遲,Traceroute 採取了一種聰明的策略: 1. 發送**特殊封包**:源頭主機向目的地發送一系列特殊的封包,可想像這些封包被標記為 $1$ 到 $N$。 2. 路由器的反應: - 當路徑上的第 $N$ 個路由器收到標記為 $N$ 的封包時,它不會將封包繼續轉發給下一個路由器。 - 相反地,它會向源頭主機發送一個回傳訊息,並告訴源頭它的**名稱**跟**位址**。 3. 記錄時間:源頭主機記錄從「**發送封包**」到「**收到回傳訊息**」所經過的時間,這就是該路由器的**往返時間**(Round-Trip Time, RTT)。 4. 終點反應:當最後一個封包(標記為 $N$)到達真正的目的地主機時,目的地主機也會回傳一個訊息給源頭。 透過這種方式,源頭主機可以拼湊出封包經過的所有路由器清單,以及到達每個路由器的往返延遲。 #### Traceroute 範例 從美國麻薩諸塞大學到法國索邦大學的兩端主機做 Traceroute 測試,其輸出結果如下: ![image](https://hackmd.io/_uploads/r1e2JaNP-l.png) Data From:Computer Networking: A Top-Down Approach (8th ed., p. 72) 由左到右的欄位是這樣的: | 欄位 | 意義 | 觀察重點 | | -------- | -------- | -------- | | 路由器編號 | 路徑上的第幾個節點 | 從 1 開始遞增。 | | 路由器名稱 | 該節點的身份 | 如 `gw-vlan-2451.cs.umass.edu` | | 路由器位址 | 該節點的身份 | 如 `(128.119.245.1)` | | RTT(3 次測試) | 往返延遲時間(毫秒) | Traceroute 通常會對每個節點測三次。 | 關鍵觀察點: 1. 延遲的波動:可發現同一路由器的三次 RTT 數據不同(如 1.899 ms, 3.266 ms, 3.280 ms),此因為網路中的佇列延遲(Queuing Delay)是隨機變化的。 2. 後面路由器延遲較短: - 有時看到第 $N+1$ 個路由器的 RTT 比第 $N$ 個還短,如:路由器 12 的延遲比路由器 11 還小。 - 因為網路擁塞狀況隨時在變化,測量第 11 號路由器時可能剛好遇到網路塞車,而測量第 12 號時網路比較順暢。 3. 星號(`*`):如果源頭主機在一段時間內沒有收到回傳訊息,Traceroute 會顯示星號,通常代表封包遺失(Packet Loss)或者是該路由器設定為不回應此類探測。 4. 地理距離影響: - 路由器 7 到路由器 8 的延遲突然大增(從約 7 ms 跳到 77 ms)。 - 因為封包正在跨越大西洋海底光纜,物理距離導致傳播延遲($d_\text{prop}$)顯著增加。 ### 其他類型的延遲 除了網路核心延遲之外,還有其他發生在端系統(End System)的延遲: - 端系統處理延遲:若想在共享媒介(如 WiFi 或 Cable)上傳輸,可能需要等待媒介空閒,這是端系統的一種延遲。(要跟其他端系統共用就會這樣) - 媒體封包化延遲(Media Packetization Delay):在 VoIP(Voice over Internet Protocol,網路語音協議)應用中很常見,發送方需要先將語音編碼並填滿一個封包才能發送,該「**填滿封包所需的時間**」即為封包化延遲。 ## 1.4.4 Throughput in Computer Networks(電腦網路中的吞吐量) 註:吞吐量亦稱流通量、產出率(量)等等。 除了前面討論過的延遲(Delay)和丟包(Packet Loss),吞吐量(Throughput)也是衡量網路效能的另一個關鍵指標。 如果延遲是關於「多快到達」,那吞吐量就是有關於網路「能傳送多少資料」。 ### 什麼是吞吐量? 假設主機 A 要傳送一個大檔案給主機 B: - 瞬時吞吐量(Instantaneous throughput):等同於在任何給定的瞬間,主機 B 接收檔案的**速率**(以 bits/sec 為單位)。 - 平均吞吐量(Average throughput):如果檔案大小為 $F$ 位元,主機 B 接收完整個檔案花費了 $T$ 秒,則平均吞吐量為 $\frac{F}{T}$(bits/sec)。 #### 為什麼吞吐量很重要? 對於某些應用(如網路電話、視訊會議),需要持續且穩定的吞吐量(高於某個門檻,e.g. 網路電話 > 24 kbps、即時影像應用 > 256 kbps)。 對於其他應用(如檔案下載),通常只希望吞吐量越高越好,以縮短等待時間。 ### 瓶頸連結(Bottleneck Link) 假設伺服器(Server)透過一條速率為 $R_s$ 的連結連接到路由器,而路由器再透過一條速率為 $R_c$ 的連結連接到客戶端(Client),中間沒有其他干擾流量。 - 若 $R_s < R_c$ :伺服器傳送資料的速度比客戶端接收的速度慢,此時,資料會順暢地流過路由器,吞吐量受限於 $R_s$ 。 - 若 $R_s > R_c$ :伺服器灌入資料的速度比路由器轉發給客戶端的速度快,路由器無法及時轉發,資料會堆積在路由器緩衝區(這是我們不樂見的情形),此時,吞吐量受限於 $R_c$ 。 ![image](https://hackmd.io/_uploads/SJWRNRNP-e.png) Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 74, Figure 1.19) 對於這個簡單的雙連結網路,端到端吞吐量是 $min\{R_c, R_s\}$ ,當中傳輸速率最低的連結,就被稱為該路徑的瓶頸連結(Bottleneck Link)。 擴展一下思路,若有 $N$ 條連結(見 Figure 1.19 的 b.),速率分別是 $R_1, R_2, \cdots, R_N$ ,那吞吐量就是 $min\{R_1, R_2, \cdots, R_N\}$ ### 現實網路中的吞吐量限制 - 網際網路核心:通常被過度配置(Over-provisioned),擁有極高速的傳輸速率,很少成為瓶頸。 - 存取網路(Access Network):通常是限制吞吐量的關鍵。 - 如果伺服器的上傳頻寬是 2 Mbps,而你的下載頻寬是 1 Mbps,即便中間網路再快,你的下載速度最高也只有 1 Mbps。 - 反之,如果你有 100 Mbps 的光纖,但伺服器只有 2 Mbps 的上傳能力,你的下載速度就會被限制在 2 Mbps。 結論:在現今的網際網路中,吞吐量的限制因素通常在於存取網路(也就是家中或伺服器連接到網路的那一段)。 ### 干擾流量的影響(Intervening Traffic) 假設有個共享連結情境:有 10 個伺服器和 10 個客戶端同時在進行檔案下載,他們都通過網際網路核心中的一條共同連結,該連結的速率為 $R$ 。 如果這條共同連結 $R$ 非常大(例如比所有存取連結的總和還大),它就不會是瓶頸,吞吐量仍取決於各自的存取速率 $min\{R_s, R_c\}$ 。 但如果 $R$ 不夠大(例如 $R$ 跟 $R_s, R_c$ 差不多),這條連結就會成為新的瓶頸。 在這情境的最終結果:假設這條連結公平地將頻寬分給這 10 個客戶端下載任務,每個客戶端下載獲得的吞吐量將只有 $\frac{R}{10}$。 這說明吞吐量不僅取決於路徑上的連結傳輸速率,也取決於當前的網路流量負載(Intervening traffic),也可稱其為介入的資料流量。 ![image](https://hackmd.io/_uploads/S1kQlyBPbl.png) Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 76, Figure 1.20) ## 總整理 ### 封包交換網路中的延遲 封包從來源端到目的端,沿途經過多個路由器,每一個節點都會產生延遲,單一節點的總延遲($d_\text{nodal}$)由四個部分組成:$$d_\text{nodal} = d_\text{proc} + d_\text{queue} + d_\text{trans} + d_\text{prop}$$ **四種延遲一覽**: 1. 處理延遲(Processing Delay) 路由器檢查封包標頭、錯誤檢查的時間,通常極短(微秒等級)。 2. 佇列延遲(Queuing Delay) 封包在緩衝區等待傳輸的時間,最不穩定、最難預測,與網路擁塞高度相關。 3. 傳輸延遲(Transmission Delay) 將封包所有位元推送到連結上的時間,為 $$\frac{L}{R}$$ 只與封包大小與頻寬有關,與距離無關。 4. 傳播延遲(Propagation Delay) 訊號(位元)在實體媒介中傳遞的時間,為 $$\frac{d}{s}$$ 只與距離與物理介質有關。 **傳輸延遲跟傳播延遲的差異**: - 傳輸延遲=「推資料上線要多久」 - 傳播延遲=「訊號在路上跑多久」 ### 佇列延遲與封包遺失 #### 流量強度(Traffic Intensity) 衡量佇列延遲大小的指標: $$\text{Traffic Intensity} = \frac{La}{R}$$ - $a$ :封包到達速率。 - $L$ :封包大小。 - $R$ :連結速率。 **三種典型情況**: - $\frac{La}{R} > 1$ 到達速度 > 傳輸能力 → 佇列無限成長 → 延遲趨近無限。 - $\frac{La}{R} \le 1$,但爆發式到達 平均可行,但仍會產生顯著佇列延遲。 - $\frac{La}{R} \to 1$,隨機到達(現實狀況) 平均佇列延遲會指數型暴增,類似高速公路快滿時的塞車現象。 #### 封包遺失(Packet Loss) - 實際佇列容量有限。 - 佇列滿時,新封包會被丟棄。 - 上層(如 TCP)需重傳,進一步加劇擁塞。 ### 端到端延遲(End-to-End Delay) 理論模型(忽略佇列),若有 N 條連結:$$d_\text{end-end} = N(d_\text{proc} + d_\text{trans} + d_\text{prop})$$ 本質上是沿途每個節點延遲的累加。 #### Traceroute - 利用逐步限制封包存活次數(TTL, Time To Live)的方式。(第 $N$ 個路由器收到標記為 $N$ 的封包不會繼續傳,而是會回傳名稱跟位址回去) - 量測每一跳的 RTT(往返時間)。 - 可觀察: - 延遲波動(佇列延遲隨機) - 封包遺失(星號) - 長距離連線造成的傳播延遲暴增(如跨洋光纜) #### 其他延遲來源 - 端系統等待媒介(如 WiFi 共用) - 多媒體封包化延遲(如 VoIP 需先填滿封包) ### 吞吐量(Throughput) 定義: - 瞬時吞吐量:某一瞬間的接收速率 - 平均吞吐量:如果檔案大小為 $F$ 位元,主機 B 接收完整個檔案花費了 $T$ 秒,則平均吞吐量為 $$\frac{F}{T}$$ 延遲注意的是「多久到」,吞吐量則注意「能送多少」。 ### 瓶頸連結(Bottleneck Link) 端到端吞吐量 = 路徑上最慢的那條連結 $min\{R_1, R_2, \cdots, R_N\}$ 現實上: - 網際網路核心:通常不構成瓶頸。 - 存取網路(家用網路、伺服器端):最常成為限制因素。 ### 干擾流量的影響(Intervening Traffic) - 多條資料流共享同一連結時。 - 即使個別連線很快,共用連結仍可能成為瓶頸。 - 頻寬若公平分配,吞吐量會被平均瓜分(如 $\frac{R}{10}$)。