Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
📹 視訊通話架構完整解析 🎯 視訊通話使用什麼協定? 💡 比喻:打電話 = 訊號系統 + 語音傳輸 視訊通話 = SIP(訊號) + RTP(媒體) + SDP(協商)完整答案:
視訊通話不是單一協定,而是多個協定協同工作:
協定層 協定 功能 比喻 訊號層 SIP 建立/終止通話 撥號系統 📞 描述層 SDP 協商媒體參數 通話規格書 📋 傳輸層 RTP 傳輸音視訊 實際通話 🎙️📹 控制層 RTCP 監控品質 通話品質監測 📊 面試標準答案:
視訊通話主要使用 SIP 協定作為訊號控制,配合 RTP/RTCP 傳輸音視訊數據,並透過 SDP 協商編碼器、解析度等參數。現代系統常結合 WebRTC 技術實現瀏覽器端的視訊通話。
🏗️ 完整架構圖 兩人視訊通話 ┌─────────────────────────────────────────────────────┐ │ 視訊通話完整堆疊 │ └─────────────────────────────────────────────────────┘ Alice Bob ┌──────────┐ ┌──────────┐ │ 應用層 │ │ 應用層 │ │ (UI) │ │ (UI) │ └──────────┘ └──────────┘ ↓ ↓ ┌──────────┐ SIP Signaling Server ┌──────────┐ │ SIP │ ←─────────────────────────────→ │ SIP │ │ Client │ (INVITE, ACK, BYE) │ Client │ └──────────┘ └──────────┘ ↓ ↓ ┌──────────┐ Exchange SDP ┌──────────┐ │ SDP │ ←─────────────────────────────→ │ SDP │ └──────────┘ (協商編碼器、解析度) └──────────┘ ↓ ↓ ┌──────────┐ ┌──────────┐ │ RTP │ ←══════════════════════════════→ │ RTP │ │ (音視訊) │ Direct P2P Connection │ (音視訊) │ └──────────┘ └──────────┘ ↓ ↓ ┌──────────┐ ┌──────────┐ │ RTCP │ ←──────────────────────────────→ │ RTCP │ │ (品質監控)│ (Feedback, Statistics) │ (品質監控)│ └──────────┘ └──────────┘ ↓ ↓ ┌──────────┐ ┌──────────┐ │ UDP │ │ UDP │ └──────────┘ └──────────┘ 📨 協定詳解 1️⃣ SIP(訊號控制) 💡 功能:建立和終止通話 就像電話的「撥號」和「掛斷」流程:
🔒 SSH 安全遠端登入完整指南 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐ (中等)
🎯 本篇重點 理解 SSH 協定的原理、連線建立流程、公私鑰認證機制、Port Forwarding 應用,以及與 Telnet 的差異。
🤔 什麼是 SSH? SSH (Secure Shell) = 安全的遠端登入協定
一句話解釋: SSH 是一種加密的網路協定,讓你可以安全地遠端登入到另一台電腦,就像坐在那台電腦前面操作一樣。
比喻:遠端遙控器 Telnet = 透明的遙控器 - 所有按鈕動作都被看光光 - 任何人都能攔截並知道你按了什麼 SSH = 加密的遙控器 - 按鈕訊號經過加密 - 即使被攔截也看不懂 - 確認遙控器是真的(認證) 🚨 為什麼需要 SSH?Telnet 的問題 Telnet(不安全) Telnet 的致命缺陷:明文傳輸!
場景:你用 Telnet 登入伺服器 你輸入: username: admin password: myPassword123 網路傳輸: → admin (明文) → myPassword123 (明文) 駭客用 Wireshark 抓包: 「太好了!帳號密碼都拿到了!」 結果: ❌ 帳號被盜 ❌ 伺服器被入侵 ❌ 資料被竊取Telnet 的三大問題:
📱 SIP 呼叫流程詳解 🎯 基本呼叫流程 💡 比喻:打電話的完整過程 1. 撥號(INVITE) 2. 電話響鈴(180 Ringing) 3. 對方接聽(200 OK) 4. 確認接通(ACK) 5. 開始通話(RTP) 6. 掛斷電話(BYE)最簡單的場景(無 Proxy) Alice Bob (192.168.1.100) (192.168.1.200) │ │ ├─ INVITE ───────────────────────>│ 撥號 │ │ │<─ 100 Trying ─────────────────────┤ 處理中 │ │ │<─ 180 Ringing ────────────────────┤ 響鈴 │ │ │<─ 200 OK ─────────────────────────┤ 接聽 │ │ ├─ ACK ───────────────────────────>│ 確認 │ │ │<══════ RTP 媒體流 ═══════════════>│ 通話中 │ │ ├─ BYE ───────────────────────────>│ 掛斷 │ │ │<─ 200 OK ─────────────────────────┤ 確認掛斷詳細訊息內容:
🍃 MongoDB Wire Protocol 完整指南 ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐ (中等)
🎯 本篇重點 理解 MongoDB Wire Protocol 的原理、BSON 格式、OP_MSG 訊息結構、CRUD 操作流程,以及與關聯式資料庫協定的差異。
🤔 什麼是 MongoDB Wire Protocol? MongoDB Wire Protocol = MongoDB 客戶端與伺服器之間的通訊協定
一句話解釋: MongoDB Wire Protocol 是基於 BSON(Binary JSON)的二進位協定,設計用於高效傳輸 JSON 文件資料。
比喻:包裹快遞系統 SQL 資料庫 = 整齊的表格 - 每個欄位都有固定位置 - 像是整齊排列的書架 MongoDB = 靈活的文件櫃 - 每個文件可以有不同欄位 - 像是資料夾,每個資料夾內容不同 🏗️ MongoDB Wire Protocol 在網路模型中的位置 OSI 7 層模型 ┌──────────────────────────────┬──────────────────────┐ │ 7. Application Layer (應用層) │ MongoDB Wire Protocol│ ← MongoDB 在這裡 ├──────────────────────────────┼──────────────────────┤ │ 6.
📞 SIP 協定基礎 🎯 什麼是 SIP? 💡 比喻:電話系統的「撥號」協定 打電話分兩階段: 1. 撥號階段:輸入號碼、等待接通(SIP 負責這部分) 2. 通話階段:實際對話(RTP 負責傳輸語音) SIP 就像電話的「訊號系統」,負責: - 找到對方在哪裡 - 詢問對方能否接聽 - 建立通話連線 - 掛斷電話SIP(Session Initiation Protocol) 是一種訊號協定,用於建立、修改和終止多媒體會話(語音、視訊通話)。
為什麼需要 SIP? WebRTC vs SIP 的差異:
特性 WebRTC SIP 定位 Web 即時通訊 電信級通話系統 訊號協定 未定義(自訂) 已定義(SIP) 主要應用 瀏覽器通話 VoIP、視訊會議 互通性 需要自訂 標準化(與電話系統互通) 典型場景 Google Meet、Zoom Skype、電話系統、企業 PBX WebRTC:瀏覽器內的通話 SIP:可以與傳統電話系統互通的 VoIP 範例: - 用 Skype 打給手機號碼 → SIP - 企業內部分機系統 → SIP - Google Meet 網頁通話 → WebRTC 🏗️ SIP 架構 核心組件 ┌─────────────────────────────────────────┐ │ SIP 系統架構 │ └─────────────────────────────────────────┘ User Agent ←→ SIP Proxy ←→ Registrar (客戶端) (代理伺服器) (註冊伺服器)1️⃣ User Agent(使用者代理) 💡 比喻:你的電話機 你用它來打電話和接電話分為兩部分:
⚠️ 免責聲明 本文內容僅供教育與學習用途。請勿將文中技術用於任何未經授權的系統或惡意目的。
📚 本篇重點 🎯 掌握 CSRF Token 的完整實作 🔒 理解 SameSite Cookie 的配置 🛡️ 學習多層防禦策略 💻 Django 實戰最佳實踐 閱讀時間: 約 20 分鐘 難度: ⭐⭐⭐ 中高階
1️⃣ 防禦層級架構 ┌─────────────────────────────────────────────┐ │ Layer 1: 使用正確的 HTTP 方法 │ │ - GET: 只用於讀取 │ │ - POST/PUT/DELETE: 用於狀態改變 │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ Layer 2: CSRF Token ⭐ 核心防禦 │ │ - Synchronizer Token Pattern │ │ - Double Submit Cookie │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ Layer 3: SameSite Cookie │ │ - Lax 或 Strict │ │ - 阻止跨站 Cookie 發送 │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ Layer 4: 驗證 Origin/Referer Header │ │ - 檢查請求來源 │ │ - 白名單驗證 │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ Layer 5: 額外驗證(敏感操作) │ │ - 重新輸入密碼 │ │ - OTP/2FA │ │ - CAPTCHA │ └─────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────┐ │ Layer 6: 監控與告警 │ │ - 記錄失敗的 CSRF 驗證 │ │ - 異常檢測 │ └─────────────────────────────────────────────┘ 2️⃣ Layer 1: 使用正確的 HTTP 方法 原則:GET 只用於讀取 # ❌ 錯誤:使用 GET 執行狀態改變 @app.