【計算機網路筆記】4.2 What’s Inside a Router?
【計算機網路筆記】4.2 What’s Inside a Router? Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 路由器(Router)就像是網路世界裡面的「圓環」,負責將來自四面八方的網路 資料包(Datagram),快速精準地轉送到正確的出口。 下圖 4.4 為路由器架構。 Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 341, Figure 4.4) 而至於路由器內部有什麼呢?首先請看其內部的內部四大核心組件: 輸入埠(Input Port):路由器的「入口閘道」,封包抵達的第一站。 它會執行實體層(Physical Layer)功能,當作實體連結進入路由...
【計算機網路筆記】4.1 Overview of Network Layer
【計算機網路筆記】4.1 Overview of Network Layer Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 為了讓各位有更清晰的圖像,我們從一個簡單的網路情境出發。 想像有兩台主機(Host)(或稱終端系統(End System))H1 與 H2,它們之間隔著幾台路由器(Router)。 當 H1 要傳送資訊給 H2 時,H1 的網路層會從上層的傳輸層接收區段(Segment),將其封裝成資料包(Datagram),然後傳送給與它直接相連的路由器 R1。 在接收端 H2,網路層會從鄰近的路由器 R2 接收這些資料包,將裡面的傳輸層區段提取出來,並往上傳遞給 H2 的傳輸層。 於此有一個非常重要的細節:路由器內部的協定堆疊(Protocol St...
【考試向】資料結構筆記(2-3 Tree 跟 2-3-4 Tree)
【考試向】資料結構筆記(2-3 Tree 跟 2-3-4 Tree) 歡迎你點入本篇文章!我是 LukeTseng,本系列文章主要整理自學資料結構的一些知識,如果你喜歡我的文章,麻煩您不吝嗇的在文章底下按下一顆愛心,或是追蹤我唷~ 2-3 Tree 2-3 Tree 是一種非常經典的自我平衡搜尋樹(Self-balancing search tree)。 它的發明是為了改善一般二元搜尋樹(Binary Search Tree, BST)在最糟情況下(資料依序輸入)會退化成一條直線,導致搜尋效率大幅降低的問題。 2-3 Tree 的核心在於它允許一個節點裡面存放超過一筆資料,並且透過「向上分裂」的機制,來保證整棵樹永遠是絕對平衡的。 2-3 Tree 的基礎定義與特性 在 2-3 Tree 中,「2」和「3」代表的是一個節點可以擁有的子節點數量(Children)。 一棵標準的 2-3 Tree 必須滿足以下三個嚴格的條件: 節點種類限制:樹上的每一個內部節點,只能是 2-Node(2-節點)或3-Node(3-節點)。 搜尋樹性質(排序規則):左子樹的值永遠小於父節點的值...
【考試向】資料結構筆記(AVL Tree)
【考試向】資料結構筆記(AVL Tree) 歡迎你點入本篇文章!我是 LukeTseng,本系列文章主要整理自學資料結構的一些知識,如果你喜歡我的文章,麻煩您不吝嗇的在文章底下按下一顆愛心,或是追蹤我唷~ 高度平衡二元搜尋樹(Height Balanced BST) 學習資料結構時,從基礎的二元搜尋樹(BST)跨越到平衡樹是一個非常關鍵的里程碑,在撰寫演算法或面對高壓的程式解題環境時,維持資料結構的高效能,往往是避免 Time Limit Exceeded(TLE)的核心。 要理解「高度平衡」,得要先知道原本的二元搜尋樹(Binary Search Tree, BST)有什麼致命缺點。 在理想狀態下,BST 的查詢、新增和刪除時間複雜度都是 O(logN)O(\log N)O(logN)。 但如果我們依序插入一組已經排序好的資料(例如:1, 2, 3, 4, 5),這棵樹的節點就會全部往右邊長,退化成一條類似鏈結串列(Linked List)的結構(左或右斜樹 Skewed Tree),此時它的時間複雜度就會跌至 O(N)O(N)O(N),是我們不樂見的。 高度平衡二元搜尋...
【計算機網路筆記】3.8 Evolution of Transport-Layer Functionality
【計算機網路筆記】3.8 Evolution of Transport-Layer Functionality Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 傳輸層已經不再是傳統 TCP 與 UDP 非黑即白的天下,為了解決現代網路高併發、低延遲的需求,傳輸層功能正朝向多樣化發展,甚至將實作提升到了應用層(以 QUIC 為代表)。 三十年來,TCP 和 UDP 一直是網際網路的兩大主力,然而,TCP 為了保證可靠性,有著嚴格的順序限制與繁瑣的連線建立過程,導致了隊首阻塞(HOL Blocking)」與較高的延遲。 而 UDP 雖然快,卻不提供可靠傳輸,隨著雲端服務和影音串流的爆發,開發者需要一種既有 TCP 的可靠與安全,又能像 UDP 一樣輕量快速的解決方案...
【計算機網路筆記】3.7 TCP Congestion Control
【計算機網路筆記】3.7 TCP Congestion Control Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 3.7.1 Classic TCP Congestion Control(經典 TCP 壅塞控制) TCP 壅塞控制(Congestion Control)是 TCP 協定中用來避免發送端把整個網路癱瘓的一套機制,與流量控制(Flow Control)不同,它保護的對象是網路而非接收端。 網路資源是共享的,如果每個終端系統(End System)的 Process 都毫無節制把資料塞入網路中,會導致路由器的 buffer 溢位,進而造成封包大量遺失,最終引發壅塞崩潰(Congestion collapse),讓所有人的吞吐量(Throughpu...
【JavaScript 筆記】函數(上) - part 5
【JavaScript 筆記】函數(上) - part 5 歡迎你點入本篇文章,本系列網頁程式設計,主要紀錄我個人自學的軌跡,另外也作為日後個人複習用。若你喜歡本篇文章,歡迎在文章底下點一顆愛心,或是追蹤我的個人公開頁~ 基本函數語法 宣告一個函數使用關鍵字 function 宣告,如下: 1234function functionName(parameter1, parameter2) { // 函數主體(要執行的程式碼) return returnValue;} 範例: 123456function greet(name) { console.log(`哈囉,${name}!`);}greet("LukeTseng"); // 哈囉,LukeTseng!greet("Amy"); // 哈囉,Amy! 函數宣告有完整的 Hoisting,可以在宣告之前就呼叫,JS 引擎會自動把整個函數上升(Hoisting)到最頂端: 12345sayHi(); // Hi!...
【考試向】資料結構筆記(堆積樹)
【考試向】資料結構筆記(堆積樹) 歡迎你點入本篇文章!我是 LukeTseng,本系列文章主要整理自學資料結構的一些知識,如果你喜歡我的文章,麻煩您不吝嗇的在文章底下按下一顆愛心,或是追蹤我唷~ 堆積(Heap) 定義 堆積是一棵二元樹,定義如下: 必為一棵完整二元樹(Complete Binary Tree) 所謂完整(Complete):除了最底層之外,上面每一層的節點都必須是填滿的,而且最底層的節點,必須由左至右依序填入,中間不能有空缺。 為什麼這樣規定?因為這樣的結構非常緊湊,可用一維陣列來做儲存,而不用指標(Pointers),在記憶體管理和讀取速度上非常有效率。 必須滿足堆積性質(Heap Property) 根據節點數值的大小關係,Heap 主要分為兩種: 最大堆(Max-Heap):任何一個父節點的值,都 ≥\ge≥ 其子節點的值,表示整棵樹的根節點(Root)一定會是這棵樹中的最大值。 最小堆(Min-Heap):任何一個父節點的值,都 ≤\le≤ 其子節點的值,表示整棵樹的根節點(Root)一定會是這棵樹中的最小值。 調整 Hea...
【JavaScript 筆記】運算子、型別轉換 - part 4
【JavaScript 筆記】運算子、型別轉換 - part 4 歡迎你點入本篇文章,本系列網頁程式設計,主要紀錄我個人自學的軌跡,另外也作為日後個人複習用。若你喜歡本篇文章,歡迎在文章底下點一顆愛心,或是追蹤我的個人公開頁~ 運算子(Operator) JS 有這些類型的運算子: 類別 英文名稱 運算子 算術運算子 Arithmetic Operators + - * / % ** ++ -- -(一元) +(一元) 指定運算子 Assignment Operators = += -= *= /= %= **= <<= >>= &= |= ^= &&= ||= ??= 比較運算子 Comparison Operators == != === !== > >= < <= 邏輯運算子 Logical Operators && || ! !! ?? 位元運算子 Bitwise Operators & | ^ ~ >> << >...
TCP/IP 封包解析
TCP/IP 封包解析 紀錄 2026/04/08 計算機網路課程。 TCP/IP 封包格式 TCP/IP 封包的 Header 預設就是 20 個 Byte。 TCP 格式: Image Source:https://www.geeksforgeeks.org/computer-networks/tcp-ip-packet-format/ Source Port、Destination Port 各佔 2 Byte(16 bit),通常題目只要求到這邊就好。 Sequence Numbers 佔 4 Byte(32 bit)。 IP 格式: Image Source:https://www.geeksforgeeks.org/computer-networks/tcp-ip-packet-format/ Version 佔 4 bit(1 個 16 進位數字)。 IHL(Internet Header Length)也佔 4 個 bit。 Type-of-Service 佔 1 個 byte。 Total Length 佔 2 byte。 Flags 佔 3 b...
【C++ 筆記】運算子多載(Operator Overloading)範例
【C++ 筆記】運算子多載(Operator Overloading)範例 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 2x2 矩陣 以下範例多載了這些運算子: 運算子 型態 說明 [] 成員 存取矩陣元素,如 A[0][1] -(一元) 成員 取負矩陣 +, -, * 成員 矩陣加減乘 +=, -=, *= 成員 複合指派 ==, != 成員 相等比較 *(純量) friend scalar * matrix 及 matrix * scalar <<, >> friend 標準輸出入串流 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263...
【JavaScript 筆記】語句規則 - part 3
【JavaScript 筆記】語句規則 - part 3 歡迎你點入本篇文章,本系列網頁程式設計,主要紀錄我個人自學的軌跡,另外也作為日後個人複習用。若你喜歡本篇文章,歡迎在文章底下點一顆愛心,或是追蹤我的個人公開頁~ 分號(; Semicolons) 在 JS 中,分號 ; 用來標示一個語句的結束,類似中文的句號。 123let name = "LukeTseng"; // 這是一個語句let age = 21; // 這是另一個語句console.log(name); // 這也是一個語句 ASI:自動插入分號機制 JS 中會有 ASI(Automatic Semicolon Insertion)的機制,當沒加分號時 JS 引擎會在解析時自動判斷在哪裡補上分號,這就是為什麼省略分號也不會報錯。 以下這兩個撰寫的方式都 ok: 12345let x = 10;let y = 20;let x = 10let y = 20 ASI 的陷阱 ASI 不是萬能的,在某些情況下會誤判,導致其程式行為完全不符合預期: 123456...
【JavaScript 筆記】語法(資料型別、變數) - part 2
【JavaScript 筆記】語法(資料型別、變數) - part 2 歡迎你點入本篇文章,本系列網頁程式設計,主要紀錄我個人自學的軌跡,另外也作為日後個人複習用。若你喜歡本篇文章,歡迎在文章底下點一顆愛心,或是追蹤我的個人公開頁~ 資料型別(Data Type) Image Source:https://www.geeksforgeeks.org/javascript/variables-datatypes-javascript/ JavaScript 中所有的值都屬於某種資料型別,型別分為兩大類: Primitive(原始型別)的值儲存的是值本身。 Non-Primitive(非原始型別)儲存的是記憶體位址的參考(Reference)。 另外,JS 的語法也定義了兩個型別的值: Literals(實字):一個固定值,就是常數的意思。 Variables(變數):隨時會變動的值。 用 typeof 查看型別 typeof 運算子可在 Console 中直接查看任何值的型別: 原始型別(Primitive) 1. Number(數字) JS 的 Numbe...
【JavaScript 筆記】從零開始的 JS - part 1
【JavaScript 筆記】從零開始的 JS - part 1 歡迎你點入本篇文章,本系列網頁程式設計,主要紀錄我個人自學的軌跡,另外也作為日後個人複習用。若你喜歡本篇文章,歡迎在文章底下點一顆愛心,或是追蹤我的個人公開頁~ 簡介(Introduction) JavaScript 接下來都簡稱 JS,JS 是一個輕量級的程式語言,也是一個腳本語言,也是一種讓網頁動起來的程式語言。 JS 是一種直譯式(Interpreted)、動態型別、跨平台的腳本語言。 直譯式:程式碼不需要事先編譯,瀏覽器直接讀取、直接執行。 動態型別:變數的型別不需要事先宣告,執行時自動判斷。 跨平台:能在瀏覽器、伺服器(Node.js)、甚至手機 App 上執行。 物件導向 + 函式導向:支援多種程式設計風格,彈性非常高。 JS 的小故事 JavaScript 是由 Brendan Eich 在 1995 年於 Netscape 公司任職時創造,前後只花了 10 天就設計完成。雖然名字裡有 Java,但和 Java 其實是完全不同的語言,當年取這個名字純粹是行銷噱頭,純粹只是想要蹭而已。 之後...
【CSS 筆記】CSS 建立 - part 2
【CSS 筆記】CSS 建立 - part 2 歡迎你點入本篇文章,本系列網頁程式設計,主要紀錄我個人自學的軌跡,另外也作為日後個人複習用。若你喜歡本篇文章,歡迎在文章底下點一顆愛心,或是追蹤我的個人公開頁~ 要建立 CSS,會有三種方式: 外部 CSS(External CSS) 內部 CSS(Internal CSS) 行內 CSS(Inline CSS) 外部 CSS(External CSS) 此為最常用、最推薦的方式,這種方式會把所有 CSS 寫在一個獨立的 .css 檔案中,再透過 <link> 標籤連結到 HTML 。 首先建立 styles.css: 123456789/* styles.css */h1 { color: steelblue; font-size: 32px;}p { color: gray;} 然後在 HTML 的 <head> 加入連結: 12345678910<!DOCTYPE html><html><head> <li...




