【計算機網路筆記】3.5 Connection-Oriented Transport: TCP
【計算機網路筆記】3.5 Connection-Oriented Transport: TCP Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 3.5.1 The TCP Connection(TCP 連線) TCP 連線是一種在兩個通訊端點之間所建立的「邏輯性、全雙工(full-duplex)且點對點(Point-To-Point)」的可靠傳輸管道。 底層的網路層(Network Layer)所使用的網際網路協定(Internet Protocol, IP)只提供盡力而為(best-effort)且不可靠的服務。而 TCP 透過在端點建立連線狀態,補足底層的缺陷,確保資料不會遺失、損壞或失序。 TCP 適用於網頁瀏覽、檔案傳輸等不容許資料遺失的應用。 TCP 最大...
【考試向】資料結構筆記(樹及二元樹)
【考試向】資料結構筆記(樹及二元樹) 歡迎你點入本篇文章!我是 LukeTseng,本系列文章主要整理自學資料結構的一些知識,如果你喜歡我的文章,麻煩您不吝嗇的在文章底下按下一顆愛心,或是追蹤我唷~ 簡介(Introduction) Image Source:https://zh.wikipedia.org/zh-tw/树_(数据结构) 樹(Tree)資料結構是一種非線性資料結構,用來模擬具有階層性(Hierarchical)關係的資料。 一棵樹的基本構成由以下兩個要素組成: 節點(Node):樹的基本組成單位,每個節點會包含資料(或鍵值),以及指向其子節點的指標。 邊(Edge / Link):連接兩節點的線條,代表節點之間的關係,一棵有 $N$ 個節點的樹,必定會有 $N-1$ 條邊。 節點關係的術語 根節點(Root):樹的最頂層節點,整棵樹只有一個根節點,且是唯一沒有父節點的節點。 如上圖中的節點 A 即根節點。 父節點(Parent):若一個節點向下連接到其他節點,該節點就是那些節點的父節點。 如上圖中的節點 A 為 B、C 這兩個節點的父節點。 子...
【計算機網路筆記】3.4 Principles of Reliable Data Transfer
【計算機網路筆記】3.4 Principles of Reliable Data Transfer Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 Principles of Reliable Data Transfer(可靠資料傳輸的原理) 該節定義了一個通用的可靠資料傳輸協定(rdt, reliable data transfer protocol)的「服務模型」與「實作介面」。 簡單來說,就是如何在底層網路可能會丟包、損壞資料的情況下,為上層應用程式提供一個資料保證不丟失、不損壞、按順序到達的傳輸管道。 為何需要可靠資料傳輸協定 原因是我們所理想中的情形是:希望應用程式有一個可靠的通道,像在兩點之間接了一條完美的光纖,資料送進去,另一頭就完美地出來。 但現實上...
【計算機網路筆記】3.3 Connectionless Transport: UDP
【計算機網路筆記】3.3 Connectionless Transport: UDP Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 回顧 UDP UDP(User Datagram Protocol,使用者資料包協定)只做了傳輸層最基本該做的事:把資料從一台電腦的某個程式,送到另一台電腦的某個程式,其他的它一概不管。 雖然 TCP 提供了可靠、有序的傳輸,但這些功能是有代價的(延遲、複雜度、連線建立時間)。 有些應用程式(如 DNS 查詢、即時語音、串流視訊)更在乎「速度」和「即時性」,對於偶爾掉幾個封包是可以容忍的,此時 TCP 的層層機制反而成了累贅,輕量級的 UDP 就派上用場了。 UDP 應用:即時影音串流、網路電話(VoIP,Voice over Int...
【計算機網路筆記】3.2 Multiplexing and Demultiplexing
【計算機網路筆記】3.2 Multiplexing and Demultiplexing Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 簡介 多工與解多工技術是一種將「主機對主機(Host-to-Host)」的傳輸服務,延伸轉化為「行程對行程(Process-to-Process)」傳輸服務的機制。 為什麼需要多工與解多工? 假設有位使用者的電腦同時開著瀏覽器下載網頁、開著 FTP 傳檔案、還掛著兩個 Telnet 連線。 網路層(IP)只負責把資料包(Datagram)送到電腦(Host)門口。 在當電腦收到這個資料包時,它該如何知道這是要給瀏覽器的,還是給 FTP 的? 此時就是傳輸層的工作了,傳輸層利用多工(Multiplexing)與解多工(Demulti...
【計算機網路筆記】3.1 Introduction and Transport-Layer Services
【計算機網路筆記】3.1 Introduction and Transport-Layer Services Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 傳輸層簡介 傳輸層(Transport Layer)位於應用層(Application Layer)之下,網路層(Network Layer)之上。 傳輸層的核心功能是為執行在不同主機(Host)上的應用程式行程(Application Processes)之間提供邏輯通訊(Logical Communication)。 所謂邏輯通訊:從應用程式的角度看,好像兩台主機是直接連在一起的,儘管中間隔著無數的路由器和連結。 3.1.1 Relationship Between Transport and Networ...
【計算機網路筆記】2.7 Socket Programming: Creating Network Applications
【計算機網路筆記】2.7 Socket Programming: Creating Network Applications Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 複習:什麼是 Socket? 簡單來說,Socket(插座)就是應用程式(Application)與網路(Network)之間的介面(Interface)。 Socket 的存在是為了把「網路層只做到主機對主機」提升成「傳輸層要做到行程(process)對行程」的溝通,並讓同一台主機上的許多應用程式能同時共用 TCP/UDP 而不互相搞混。 做比喻的話,行程(process)就像是房子,而 Socket 如同房子中的門。 當使用者想發訊息給別人,使用者會把訊息推出「門」(Socket)外,一旦...
【計算機網路筆記】2.6 Video Streaming and Content Distribution Networks
【計算機網路筆記】2.6 Video Streaming and Content Distribution Networks Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 2.6.1 Internet Video(網際網路視訊) 在此探討的為預錄視訊串流(Streaming Stored Video)。 其運作模式是將預先錄製好的媒體(如電影、電視節目、UGC 影片)放置在伺服器上,使用者根據需求(On-demand)發送請求來觀看。 視訊本質上是連續的影像,資料量極其龐大,它是網際網路上對頻寬需求最高、對效能最敏感的應用類型之一。 其中所面臨的挑戰:如何在頻寬有限且會波動的網路環境中,傳送高位元率(High Bit Rate)的資料,並保持播放的流暢度。 術語解...
【計算機網路筆記】2.5 Peer-to-Peer File Distribution
【計算機網路筆記】2.5 Peer-to-Peer File Distribution Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 P2P 架構與自我擴充性(Scalability) 複習:什麼是 P2P? 在傳統的主從式架構(Client-Server Architecture)中,伺服器必須承擔所有的上傳工作。 如果要發送一個檔案給 $N$ 個使用者,伺服器就必須把這個檔案傳送 $N$ 次,會導致伺服器的頻寬成為巨大的瓶頸。 在 P2P 架構(Peer-to-Peer Architecture)中,每一台參與的電腦被稱為 Peer(對等點)。 Peer 不僅僅是下載檔案,還會將已下載的檔案片段重新上傳給其他的 Peer。 為什麼 P2P 很重要? 這個架構最...
【計算機網路筆記】2.4 DNS—The Internet’s Directory Service
【計算機網路筆記】2.4 DNS—The Internet’s Directory Service Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 2.4.1 Services Provided by DNS(由 DNS 提供的服務) 什麼是 DNS? DNS(Domain Name System,網域名稱系統)就像是網際網路的「電話簿」,負責將人類好記的網址翻譯成電腦能理解的 IP 位址。 當在瀏覽器輸入 google.com 這種人類好記的網址時,電腦其實看不懂。 電腦需要透過 DNS 把網址翻譯成一串數字構成的 IP 位址(例如 142.250.190.46),才能正確連接到該網站的伺服器。 DNS 也是一個建立在應用層上的協定,它主要由兩部分組成: 分散式...
【計算機網路筆記】2.3 Electronic Mail in the Internet
【計算機網路筆記】2.3 Electronic Mail in the Internet Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 電子郵件系統的核心在於提供一種非同步(Asynchronous)的通訊方式。 什麼意思?就像傳統的郵政服務,寄信時,收件人不需要坐在家裡等,寄件人寫好信丟進郵筒,系統會負責傳遞到收件人的郵箱,對方有空時再開箱讀取。 電子郵件的出現打破了時間的限制,不需要通訊雙方同時在線(Always-on)也能交換資訊,且成本極低、速度快。 Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 147, Figure 2.14) 上圖中呈現一份網際網路郵件系統的高...
【計算機網路筆記】2.2 The Web and HTTP
【計算機網路筆記】2.2 The Web and HTTP Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 2.2.1 Overview of HTTP(HTTP 的概觀) 什麼是 HTTP? HTTP(HyperText Transfer Protocol),中譯「超文本傳輸協定」,是 Web 的核心應用層協定。 它定義了客戶端(Client)和伺服器(Server)之間「如何對話」的規則。 也規定了訊息的結構(語法)以及交換訊息的方式(語義)。 為什麼需要 HTTP? 在 1990 年代初期,網際網路主要用於傳輸文字和文件。 為了讓這些文件(也稱為網頁,Web Pages)能在不同的電腦系統之間互相請求和傳送,需要一個通用的標準。 HTTP 即該標準,讓大家可用...
【計算機網路筆記】2.1 Principles of Network Applications
【計算機網路筆記】2.1 Principles of Network Applications Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 2.1.1 Network Application Architectures(網路應用程式架構) 在現代網路應用開發中,開發者通常會在以下兩種典範中擇一使用: 主從式架構(Client-Server Architecture) 對等式架構(Peer-to-Peer, P2P Architecture) 主從式架構(Client-Server Architecture) 這是目前最常見、也最傳統的架構模式(例如 Web、Email)。 在此架構中會有永遠開啟的主機,稱之為伺服器(Server)。 伺服器會服務其他許多主機...
【計算機網路筆記】1.5 Protocol Layers and Their Service Models
【計算機網路筆記】1.5 Protocol Layers and Their Service Models Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 1.5.1 Layered Architecture(分層架構) 航空系統的比喻 網際網路是一個非常複雜的系統,包含了應用程式、協定、端系統、封包交換機和各種連結層媒介。 為了理解這個複雜的系統,書中以航空系統作為比喻。 搭飛機的過程當中涉及了票務代理、行李檢查、登機口人員、機師、飛機、空中交通管制等。 若要把這個系統描述清楚,可依照「動作發生的順序」來分層: Image Source:Image Source:Computer Networking: A Top-Down Approach (8th ed.,...
【計算機網路筆記】1.4 Delay, Loss, and Throughput in Packet-Switched Networks
【計算機網路筆記】1.4 Delay, Loss, and Throughput in Packet-Switched Networks Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 1.4.1 Overview of Delay in Packet-Switched Networks(封包交換網路中的延遲概述) 該節核心概念:解釋封包從源頭(Source)經過一系列路由器(Routers)到達目的地(Destination)的過程中,為什麼會發生延遲(Delay),以及這些延遲是由哪些部分組成的。 一個封包在單一節點所經歷的延遲總和定義為四個主要部分的累加: 節點處理延遲(Nodal Processing Delay) 佇列延遲(Queuing Delay) ...

