網路通訊協定總覽#
本章彙整應用層常見通訊協定,涵蓋網頁瀏覽、電子郵件、檔案傳輸、遠端管理、名稱解析與時間同步等領域。各協定皆建立於 TCP/IP 傳輸層之上,透過指定的連接埠(Port)提供服務。
各協定預設 Port 一覽#
| 協定 | Port | 傳輸層 | 用途 |
|---|---|---|---|
| HTTP | 80 | TCP | 網頁傳輸(明文) |
| HTTPS | 443 | TCP | 網頁傳輸(加密) |
| SMTP | 25 / 587 | TCP | 郵件傳送 |
| POP3 | 110 | TCP | 郵件接收(下載) |
| POP3S | 995 | TCP | 郵件接收(加密) |
| IMAP4 | 143 | TCP | 郵件接收(伺服器管理) |
| IMAPS | 993 | TCP | 郵件接收(加密) |
| FTP | 20(資料)/ 21(控制) | TCP | 檔案傳輸 |
| FTPS | 990 | TCP | 檔案傳輸(加密) |
| SSH | 22 | TCP | 遠端安全連線 |
| DNS | 53 | UDP / TCP | 網域名稱解析 |
| NTP | 123 | UDP | 時間同步 |
Well-known Ports(0–1023)由 IANA 統一管理。記住核心協定的預設 Port,有助於防火牆規則設定與故障排除。
HTTP / HTTPS 與 SSL / TLS#
HTTP(HyperText Transfer Protocol)#
HTTP 是全球資訊網的基礎協定,採用請求-回應模型(Request-Response Model):客戶端發出請求,伺服器回傳資源。
- 無狀態(Stateless):每次請求獨立,伺服器不保留先前連線資訊
- 方法(Method):
GET(取得資源)、POST(提交資料)、PUT(更新)、DELETE(刪除)等 - 狀態碼(Status Code):
2xx成功、3xx重導向、4xx客戶端錯誤、5xx伺服器錯誤
sequenceDiagram
participant C as Client(瀏覽器)
participant S as Server(Web 伺服器)
C->>S: TCP 三方交握(SYN / SYN+ACK / ACK)
C->>S: HTTP Request(GET /index.html)
S-->>C: HTTP Response(200 OK + HTML)
C->>S: HTTP Request(GET /style.css)
S-->>C: HTTP Response(200 OK + CSS)
Note over C,S: HTTP/1.1 Keep-Alive 可複用同一 TCP 連線HTTP 版本演進#
| 版本 | 特點 |
|---|---|
| HTTP/1.0 | 每次請求建立新 TCP 連線,效率低 |
| HTTP/1.1 | 持續連線(Keep-Alive)、管線化(Pipelining)、Host 標頭 |
| HTTP/2 | 二進位分幀、多工傳輸(Multiplexing)、標頭壓縮、伺服器推送 |
| HTTP/3 | 基於 QUIC(UDP),減少連線建立延遲,改善封包遺失時的效能 |
HTTPS(HTTP over TLS)#
HTTPS 在 HTTP 與 TCP 之間插入 TLS 加密層,確保傳輸的機密性、完整性與身分驗證。
| 比較項目 | HTTP | HTTPS |
|---|---|---|
| Port | 80 | 443 |
| 加密 | 無 | TLS 加密 |
| 憑證 | 不需要 | 需要 SSL/TLS 憑證 |
| URL 前綴 | http:// | https:// |
| 安全性 | 明文傳輸,易遭竊聽與竄改 | 加密傳輸,防竊聽、防竄改、防冒充 |
現代瀏覽器對 HTTP 網站標示「不安全」警告。所有涉及使用者資料的網站皆應部署 HTTPS。
SSL / TLS(安全傳輸層協定)#
SSL(Secure Sockets Layer) 為早期加密協定,現已被 TLS(Transport Layer Security) 取代。兩者常被混稱為「SSL/TLS」。
版本演進#
| 版本 | 狀態 | 說明 |
|---|---|---|
| SSL 2.0 | 已廢棄 | 存在嚴重安全漏洞 |
| SSL 3.0 | 已廢棄 | POODLE 攻擊漏洞 |
| TLS 1.0 | 已廢棄 | 相當於 SSL 3.1,已不建議使用 |
| TLS 1.1 | 已廢棄 | 安全性不足,主流瀏覽器已停止支援 |
| TLS 1.2 | 使用中 | 目前廣泛部署的版本 |
| TLS 1.3 | 推薦 | 精簡握手流程(1-RTT)、移除不安全演算法、更高效能 |
SSL 2.0、SSL 3.0、TLS 1.0 與 TLS 1.1 皆已被 IETF 正式廢棄(RFC 8996)。伺服器應僅啟用 TLS 1.2 以上版本。
TLS 握手流程#
sequenceDiagram
participant C as Client
participant S as Server
C->>S: ClientHello(支援的 TLS 版本、加密套件列表、亂數)
S-->>C: ServerHello(選定 TLS 版本、加密套件、亂數)
S-->>C: Certificate(伺服器憑證,含公鑰)
S-->>C: ServerHelloDone
C->>C: 驗證憑證(CA 信任鏈)
C->>S: ClientKeyExchange(以公鑰加密預主密鑰)
C->>S: ChangeCipherSpec(切換至加密模式)
C->>S: Finished(加密驗證訊息)
S-->>C: ChangeCipherSpec
S-->>C: Finished
Note over C,S: 雙方以對稱金鑰進行加密通訊TLS 核心機制#
| 機制 | 說明 |
|---|---|
| 非對稱加密(Asymmetric Encryption) | 握手階段用於安全交換金鑰(如 RSA、ECDHE) |
| 對稱加密(Symmetric Encryption) | 資料傳輸階段使用,效能遠高於非對稱加密(如 AES) |
| 數位憑證(Digital Certificate) | 由 CA(Certificate Authority)簽發,驗證伺服器身分 |
| 訊息驗證碼(MAC) | 確保資料在傳輸過程中未被竄改 |
TLS 1.3 與 TLS 1.2 的主要差異
- 握手簡化:TLS 1.3 將握手從 2-RTT 縮減為 1-RTT,並支援 0-RTT 重連
- 移除不安全演算法:淘汰 RSA 金鑰交換、RC4、3DES、SHA-1 等
- 僅保留 AEAD 加密模式:如 AES-GCM、ChaCha20-Poly1305
- 前向保密(Forward Secrecy):強制使用 ECDHE 或 DHE,即使私鑰洩漏也無法解密過去的通訊
電子郵件協定:SMTP / POP3 / IMAP4#
電子郵件系統由傳送與接收兩個階段組成,分別使用不同協定。
郵件收發架構#
sequenceDiagram
participant A as 寄件者(MUA)
participant MS as 寄件 SMTP 伺服器
participant MR as 收件 SMTP 伺服器
participant B as 收件者(MUA)
A->>MS: SMTP(提交郵件)
MS->>MR: SMTP(轉送郵件)
MR-->>MR: 儲存至信箱
B->>MR: POP3 或 IMAP4(取得郵件)
MR-->>B: 回傳郵件內容SMTP(Simple Mail Transfer Protocol)#
| 項目 | 說明 |
|---|---|
| 功能 | 負責郵件的傳送與轉送(MUA -> MTA -> MTA) |
| Port | 25(伺服器間轉送)、587(用戶端提交,搭配認證) |
| 特性 | 純文字協定,指令以文字形式交換 |
| 延伸 | ESMTP(Extended SMTP)支援 STARTTLS 加密與認證機制(SMTP AUTH) |
Port 25 常被 ISP 封鎖以防範垃圾郵件(OP25B, Outbound Port 25 Blocking)。用戶端寄信應使用 Port 587 搭配 SMTP AUTH。
POP3 vs IMAP4#
| 比較項目 | POP3 | IMAP4 |
|---|---|---|
| 全名 | Post Office Protocol v3 | Internet Message Access Protocol v4 |
| Port | 110(明文)/ 995(SSL) | 143(明文)/ 993(SSL) |
| 運作方式 | 將郵件下載至本機,預設從伺服器刪除 | 郵件保留於伺服器,本機僅快取 |
| 多裝置同步 | 不適合(各裝置各自下載) | 適合(所有裝置看到一致的信箱狀態) |
| 離線閱讀 | 下載後可離線閱讀 | 需先快取,否則需連線 |
| 伺服器儲存空間 | 需求低(郵件已移至本機) | 需求高(所有郵件保留於伺服器) |
| 適用場景 | 單一裝置、儲存空間有限的伺服器 | 多裝置存取、需統一管理郵件 |
現代郵件使用以 IMAP4 為主流,配合大容量雲端儲存,可在手機、筆電與網頁信箱間無縫同步。
FTP(File Transfer Protocol)#
FTP 用於在客戶端與伺服器之間進行檔案傳輸,使用兩條獨立的 TCP 連線。
雙通道架構#
| 通道 | Port | 用途 |
|---|---|---|
| 控制通道(Control Channel) | 21 | 傳送指令與回應(登入、目錄操作、傳輸模式設定) |
| 資料通道(Data Channel) | 20(主動模式) | 實際檔案與目錄清單的傳輸 |
主動模式 vs 被動模式#
| 比較項目 | 主動模式(Active) | 被動模式(Passive) |
|---|---|---|
| 資料連線發起方 | 伺服器主動連線至客戶端 | 客戶端主動連線至伺服器 |
| 伺服器資料 Port | 20(固定) | 隨機高位 Port(由伺服器指定) |
| 防火牆相容性 | 差(客戶端防火牆可能阻擋伺服器的連入) | 佳(客戶端主動發起,較易穿越 NAT/防火牆) |
| 常見使用情境 | 內部網路、無 NAT 環境 | 網際網路環境、NAT 後方的客戶端 |
FTP 以明文傳輸帳號密碼與檔案內容。在安全性要求高的環境中,應改用 FTPS(FTP over TLS)或 SFTP(SSH File Transfer Protocol,基於 SSH)。
FTP 指令範例
USER:指定使用者名稱PASS:指定密碼LIST:列出目錄內容RETR:下載檔案STOR:上傳檔案PASV:切換至被動模式QUIT:結束連線
SSH(Secure Shell)#
SSH 提供加密的遠端連線,取代早期明文傳輸的 Telnet 與 rlogin。
核心功能#
| 功能 | 說明 |
|---|---|
| 遠端命令列操作 | 安全登入遠端主機執行指令 |
| Port 轉送(Port Forwarding / SSH Tunnel) | 透過加密通道轉送任意 TCP 連線 |
| SFTP / SCP | 基於 SSH 的安全檔案傳輸 |
SSH 認證方式#
| 方式 | 說明 | 安全性 |
|---|---|---|
| 密碼認證 | 輸入使用者帳號與密碼 | 較低(易受暴力破解) |
| 公鑰認證 | 將公鑰部署至伺服器,以私鑰進行驗證 | 較高(推薦方式) |
建議停用 SSH 密碼認證,僅使用公鑰認證,並變更預設 Port(22)以降低自動化攻擊風險。
SSH 連線流程#
sequenceDiagram
participant C as Client
participant S as Server
C->>S: TCP 連線(Port 22)
C->>S: 協商 SSH 版本與加密演算法
S-->>C: 伺服器公鑰(Host Key)
C->>C: 驗證 Host Key(首次連線需確認指紋)
C->>S: 金鑰交換(建立對稱加密通道)
Note over C,S: 加密通道建立完成
C->>S: 使用者認證(密碼或公鑰)
S-->>C: 認證成功,開啟 SessionDNS(Domain Name System)#
DNS 將人類可讀的網域名稱(如 www.example.com)轉換為 IP 位址(如 93.184.216.34),是網際網路運作的基礎設施。
DNS 階層結構#
DNS 採用樹狀階層式架構,由根往下依序為:
| 層級 | 名稱 | 範例 |
|---|---|---|
| 1 | 根網域(Root) | .,全球共 13 組根名稱伺服器 |
| 2 | 頂級網域(TLD) | .com、.org、.jp、.tw |
| 3 | 二級網域(Second-Level Domain) | example.com |
| 4 | 子網域(Subdomain) | www.example.com、mail.example.com |
DNS 查詢流程#
sequenceDiagram
participant C as Client
participant R as 遞迴解析器(Recursive Resolver)
participant Root as 根名稱伺服器
participant TLD as TLD 伺服器(.com)
participant Auth as 權威伺服器(example.com)
C->>R: 查詢 www.example.com
R->>R: 檢查快取(Cache)
Note over R: 快取未命中
R->>Root: 查詢 www.example.com
Root-->>R: 回傳 .com TLD 伺服器位址
R->>TLD: 查詢 www.example.com
TLD-->>R: 回傳 example.com 權威伺服器位址
R->>Auth: 查詢 www.example.com
Auth-->>R: 回傳 A 記錄(93.184.216.34)
R-->>C: www.example.com = 93.184.216.34
Note over R: 將結果存入快取(依 TTL)常見 DNS 記錄類型#
| 記錄類型 | 用途 |
|---|---|
| A | 網域名稱對應 IPv4 位址 |
| AAAA | 網域名稱對應 IPv6 位址 |
| CNAME | 網域別名,指向另一個網域名稱 |
| MX | 指定處理該網域郵件的伺服器 |
| NS | 指定該網域的權威名稱伺服器 |
| TXT | 存放文字資訊(常用於 SPF、DKIM、DMARC 郵件驗證) |
| PTR | 反向查詢,由 IP 位址查網域名稱 |
| SOA | 記錄該 Zone 的管理資訊與序號 |
DNS 查詢預設使用 UDP(Port 53),回應超過 512 位元組或進行區域傳送(Zone Transfer)時改用 TCP。
DNS 快取與 TTL
- TTL(Time to Live):每筆 DNS 記錄附帶的存活時間,遞迴解析器依此決定快取保留時長
- 快取的好處:減少重複查詢、降低根與權威伺服器負載、加快解析速度
- 快取的風險:DNS 記錄異動後,舊快取在 TTL 到期前仍會被使用,導致短暫的解析不一致
- 建議:進行 DNS 變更前先調低 TTL,待變更生效並確認無誤後再調回正常值
NTP(Network Time Protocol)#
NTP 用於在網路中同步各裝置的系統時鐘,確保時間一致性。
核心概念#
- Port:UDP 123
- 精度:在區域網路中可達毫秒級同步
- 階層(Stratum):
層級 說明 Stratum 0 原子鐘、GPS 等高精度時間源(參考時鐘) Stratum 1 直接連接 Stratum 0 的 NTP 伺服器 Stratum 2 從 Stratum 1 同步的伺服器,依此遞推 Stratum 16 表示未同步
時間同步對日誌分析、憑證驗證、分散式系統一致性至關重要。若各伺服器時鐘不一致,可能導致認證失敗、事件關聯錯誤等問題。
HTTP Proxy(代理伺服器)#
HTTP Proxy 作為客戶端與目標伺服器之間的中介,代替客戶端發送請求並回傳結果。
代理類型#
| 類型 | 說明 |
|---|---|
| 正向代理(Forward Proxy) | 客戶端主動設定,代理代為存取外部資源;常用於企業內部網路控管 |
| 反向代理(Reverse Proxy) | 部署於伺服器前端,客戶端無需感知;常用於負載平衡、快取、SSL 終端 |
| 透明代理(Transparent Proxy) | 客戶端無需設定,由網路設備自動導向;常用於 ISP 或企業閘道 |
主要功能#
| 功能 | 說明 |
|---|---|
| 快取(Cache) | 暫存常用資源,減少對源伺服器的請求,加快回應速度 |
| 存取控制(Access Control) | 過濾特定網站或內容(URL Filtering) |
| 匿名性 | 隱藏客戶端真實 IP 位址 |
| 日誌記錄(Logging) | 記錄使用者的存取行為,供稽核與分析 |
反向代理(如 Nginx、HAProxy)在現代 Web 架構中幾乎是標準配置,可同時處理 SSL 終端、負載平衡與靜態資源快取。
REST API#
REST(Representational State Transfer)是一種軟體架構風格,定義了客戶端與伺服器之間透過 HTTP 進行資源操作的設計原則。
REST 核心原則#
| 原則 | 說明 |
|---|---|
| 資源導向(Resource-Oriented) | 每個資源以唯一的 URI 識別(如 /users/123) |
| 統一介面(Uniform Interface) | 使用標準 HTTP 方法操作資源 |
| 無狀態(Stateless) | 每次請求包含所有必要資訊,伺服器不保留 Session 狀態 |
| 表述(Representation) | 資源可以不同格式表述(JSON、XML 等) |
HTTP 方法與 CRUD 對應#
| HTTP 方法 | CRUD 操作 | 範例 | 說明 |
|---|---|---|---|
| GET | Read | GET /users/123 | 取得指定資源,不產生副作用 |
| POST | Create | POST /users | 建立新資源 |
| PUT | Update | PUT /users/123 | 完整替換指定資源 |
| PATCH | Partial Update | PATCH /users/123 | 部分更新指定資源 |
| DELETE | Delete | DELETE /users/123 | 刪除指定資源 |
HTTP 狀態碼分類#
| 範圍 | 類別 | 常見範例 |
|---|---|---|
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重導向 | 301 Moved Permanently、304 Not Modified |
| 4xx | 客戶端錯誤 | 400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found |
| 5xx | 伺服器錯誤 | 500 Internal Server Error、502 Bad Gateway、503 Service Unavailable |
REST 並非正式的協定或標準,而是一組架構約束。遵循 REST 原則設計的 API 稱為 RESTful API。實際開發中常搭配 OpenAPI(Swagger)規範進行 API 文件化。
REST API 認證常見方式
- API Key:將金鑰置於 Header 或 Query Parameter,實作簡單但安全性較低
- Bearer Token(OAuth 2.0):透過
Authorization: Bearer <token>傳遞存取權杖,適用於第三方授權 - JWT(JSON Web Token):自包含的權杖格式,伺服器無需查詢資料庫即可驗證,適合微服務架構
- mTLS(Mutual TLS):雙向憑證驗證,適用於服務間(Service-to-Service)通訊
本章重點整理#
| 領域 | 協定 | 核心概念 |
|---|---|---|
| 網頁傳輸 | HTTP / HTTPS | 請求-回應模型、TLS 加密、HTTP/2 多工傳輸 |
| 加密傳輸 | SSL / TLS | 非對稱加密握手、對稱加密傳輸、數位憑證、前向保密 |
| 郵件傳送 | SMTP | MUA -> MTA 轉送鏈、Port 587 + AUTH |
| 郵件接收 | POP3 / IMAP4 | POP3 下載至本機、IMAP4 保留於伺服器同步 |
| 檔案傳輸 | FTP | 雙通道架構、主動/被動模式、明文風險 |
| 遠端管理 | SSH | 加密連線、公鑰認證、Port 轉送 |
| 名稱解析 | DNS | 階層式架構、遞迴查詢、快取與 TTL |
| 時間同步 | NTP | Stratum 階層、UDP 傳輸 |
| 代理服務 | HTTP Proxy | 正向/反向/透明代理、快取、存取控制 |
| API 設計 | REST API | 資源導向、HTTP 方法對應 CRUD、無狀態 |