---
# System prepended metadata

title: 【計算機網路筆記】3.8 Evolution of Transport-Layer Functionality
tags: [計算機網路, Web, Linux, 網路, 網路概論, 電腦雜談, 電腦, 網頁]

---

# 【計算機網路筆記】3.8 Evolution of Transport-Layer Functionality

[TOC]

Hello Guys, I'm LukeTseng. 歡迎你也感謝你點入本篇文章，本系列主要讀本為《Computer Networking: A Top-Down Approach, **8**th Edition》，就是計算機網路的聖經，會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文，不妨動動你的手指，為這篇文章按下一顆愛心吧，或是追蹤我的個人公開頁也 Ok。

---

傳輸層已經不再是傳統 TCP 與 UDP 非黑即白的天下，為了解決現代網路高併發、低延遲的需求，傳輸層功能正朝向多樣化發展，甚至將實作提升到了應用層（以 QUIC 為代表）。

三十年來，TCP 和 UDP 一直是網際網路的兩大主力，然而，TCP 為了保證可靠性，有著嚴格的順序限制與繁瑣的連線建立過程，導致了隊首阻塞（HOL Blocking）」與較高的延遲。

而 UDP 雖然快，卻不提供可靠傳輸，隨著雲端服務和影音串流的爆發，開發者需要一種既有 TCP 的可靠與安全，又能像 UDP 一樣輕量快速的解決方案。

## 術語解析

- QUIC（Quick UDP Internet Connections）：由 Google 開發的一種全新應用層傳輸協定，它建立在 UDP 之上，旨在為安全網頁瀏覽提供更高效的傳輸服務。
- 串流（Stream）：在 QUIC 中是一個抽象概念，代表兩個終端系統（End System）之間可靠、按順序且雙向的資料傳遞通道。
- 隊首阻塞（Head-of-Line Blocking, HOL Blocking）：在傳統 TCP 中，如果前面的一個封包遺失了，後續已經到達的封包就必須排隊等待遺失的封包重傳，導致整個應用程式卡住的現象。
- 傳輸層安全性協定（Transport Layer Security, TLS）：用於加密網路通訊的安全協定，在傳統架構中它是疊加在 TCP 之上，而在 QUIC 中它與連線建立過程被整合。

## TCP 家族的演進與分化

過去我們常以為 TCP 就是單一個標準，但實際上它已經演化出極多版本，如：

- 多樣化的 TCP 變體：包含 TCP CUBIC、DCTCP（資料中心專用）、CTCP 以及 Google 開發的 BBR 等等。
    - 事實上，TCP CUBIC 目前在 Web 伺服器上的部署率已經超越了傳統的 TCP Reno。
- TCP 的共通點：現今說某個 TCP 協定可能已經不準確了，這些多樣化的 TCP 變體，唯一的共通點只剩下都使用相同的 TCP 區段格式，且面對網路壅塞時，都能以公平的方式競爭頻寬。

## QUIC 協定

如果應用程式需要比 UDP 更多功能，但又不想承擔 TCP 的包袱要怎麼辦？答案是開發者可以在應用層自己開發傳輸協定，QUIC 就是這樣誕生的。

QUIC 底層使用的是無連接的 UDP 資料包（Datagram），但把可靠性與壅塞控制都實作在應用層，如今超過 7% 的網際網路流量已是 QUIC 流量。

### QUIC 三大特性

QUIC 針對 HTTP/3 進行了深度最佳化，具以下三大特性：

1. 連線導向與安全（Connection-Oriented and Secure）：QUIC 將建立連線的握手與 TLS 認證加密的握手合而為一。
    - 相較傳統 TCP 需要先花費多個 RTT 建立 TCP 連線，再花費 RTT 建立 TLS 連線，QUIC 能夠以更快的速度建立起加密通道。
2. 支援多重串流（Streams）解決 HOL Blocking：QUIC 允許在單一個連線中進行多工（Multiplexing），也就是同時傳輸多個獨立的應用層串流（例如網頁中的不同圖片物件）。
    - 因為每個串流是獨立提供可靠傳輸的，如果某個 UDP 封包遺失，只會影響包含在該封包內的特定串流，其他串流依然可以順利將資料交給應用程式，解決了 TCP 的隊頭阻塞問題。
3. 可靠且對 TCP 友善的壅塞控制：雖用的是 UDP，但 QUIC 參考了 TCP New Reno 的演算法來實作可靠傳輸與壅塞控制，所以它在網路壅塞時的行為，就像 TCP 一樣。

### 傳統架構 vs. QUIC 架構

| 比較維度               | 傳統架構（HTTP/1.1 或 HTTP/2 + TCP） | 新世代架構（HTTP/3 + QUIC）    |
| ------------------ | ------------------------------ | ------------------------ |
| 底層傳輸協定             | TCP（於作業系統核心實作）                 | UDP（於作業系統核心實作）           |
| 可靠性與壅塞控制           | 在傳輸層（TCP）統一處理                  | 在應用層（QUIC）以 Stream 為單位處理 |
| 加密機制位置             | 應用層/傳輸層之間（獨立的 TLS）             | 內建於 QUIC 協定內部            |
| 隊頭阻塞（HOL Blocking） | 嚴重：一個封包掉，全部等重傳                 | 解決：不同 Stream 互不影響        |
| 協定更新難易度            | 困難：需更新作業系統核心                   | 簡單：更新 App（如瀏覽器）即可        |

下圖 a. 為傳統架構（安全的 HTTP 協定堆疊），b. 為基於安全 QUIC 的 HTTP/3 協定堆疊。

![image](https://hackmd.io/_uploads/HJTasg5aZe.png)

Image Source：Computer Networking: A Top-Down Approach (8th ed., p. 311, Figure 3.58)

下圖 a. 為 HTTP 1.1：單一連線的 Client 端跟 Server 端，用應用層 TLS 加密，以 TCP rdt 跟壅塞控制。

b. 為 HTTP/3：多資料串流的 Client 端跟 Server 端，用 QUIC 加密、rdt、壅塞控制，透過 UDP 做不可靠資料包服務。

![image](https://hackmd.io/_uploads/Hk4mhgcT-l.png)

Image Source：Computer Networking: A Top-Down Approach (8th ed., p. 312, Figure 3.59)