# 【計算機網路筆記】1.5 Protocol Layers and Their Service Models [TOC] Hello Guys, I'm LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, **8**th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。 ## 1.5.1 Layered Architecture(分層架構) ### 航空系統的比喻 網際網路是一個非常複雜的系統,包含了應用程式、協定、端系統、封包交換機和各種連結層媒介。 為了理解這個複雜的系統,書中以航空系統作為比喻。 搭飛機的過程當中涉及了票務代理、行李檢查、登機口人員、機師、飛機、空中交通管制等。 若要把這個系統描述清楚,可依照「動作發生的順序」來分層:  Image Source:Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 78, Figure 1.22) - 最頂層(票務):購買機票(來源端),最後抱怨行程(目的地端)。 - 行李層:托運行李,最後領取行李。 - 登機門層:在登機口登機,最後下機。 - 起飛/降落層:飛機起飛,最後降落。 - 最底層(飛機航線):飛機在空中被導航飛行。 書中引出一個概念:服務模型(Service Model),每一層都在為它的上一層提供服務。 例如「**登機門層**」利用了「**起飛/降落層**」提供的服務(把人和行李從跑道送到跑道),來完成它自己的任務(把人從登機口送到登機口)。 ### 為什麼要分層?(優缺點) 1. 模組化(Modularity)與維護性:分層最大的好處是將複雜系統分解為定義明確的部分,提供了模組化,使得更改某一層的實作變得容易,而不會影響到系統的其他部分。 - 例如:假設航空公司改變了登機程序(如按身高登機),只改變了「登機門層」的實作,並不會影響到下面的「起飛/降落層」或上面的「票務層」。 2. 缺點: - 功能重複:某一層可能會重複下層的功能。 - 資訊隱藏的代價:某一層可能需要另一層的資訊(例如時間戳記),但嚴格的分層會阻礙這種跨層的資訊存取。 ### 網際網路的協議堆疊(Internet Protocol Stack) 各層級的協定合稱為協定堆疊(protocol stack),網際網路的協定堆疊包含五層: - 應用層(Application Layer) - 傳輸層(Transport Layer) - 網路層(Network Layer) - 資料連結層(Data Link Layer),可簡稱為連結層(Link Layer)。 - 實體層(Physical Layer) 接下來是各層的簡介。 #### 應用層(Application Layer) 此為網路應用程式(Web Apps)及其協定(Protocols)駐留的地方。 協定範例: - HTTP(**H**yperText **T**ransfer **P**rotocol):網頁瀏覽(傳輸 Web 文件)。 - SMTP(**S**imple **M**ail **T**ransfer **P**rotocol):電子郵件傳輸。 - FTP(**F**ile **T**ransfer **P**rotocol):檔案傳輸。 - DNS(**D**omain **N**ame **S**ystem):網域名稱系統(將網址轉換為 IP 位址)。 資料單元名稱:在這一層的訊息封包被稱為 Message(訊息)。 #### 傳輸層(Transport Layer) 該層負責在應用程式端點之間傳送應用層訊息。 協定範例: - TCP(**T**ransmission **C**ontrol **P**rotocol,傳輸控制協定):提供連線導向的服務,**保證**資料送達、流量控制(Flow control)和壅塞控制(Congestion control),它會將長訊息分解為較短的片段。 - UDP(User Datagram Protocol,使用者資料包協定):提供非連線導向的服務,這是一種陽春(no-frills)的服務,**不**保證可靠性,也沒有流量或壅塞控制。 資料單元名稱:在這一層的封包被稱為 Segment(區段)。 #### 網路層(Network Layer) 該層負責將資料包(Datagrams)從一台主機移動到另一台主機,傳輸層會將 Segment 和目標地址交給網路層,就像把寫好地址的信交給郵局一樣。 協定範例: - IP 協定(Internet Protocol):定義了資料包的欄位以及端系統和路由器如何處理這些欄位,這是將網際網路黏合在一起的膠水。 - 繞送協定(Routing Protocol,也稱路由協定):決定資料包從來源到目的地的路徑。 資料單元名稱:在這一層的封包被稱為 Datagram(資料包)。 #### 連結層(Link Layer) 網路層依靠連結層將**資料包從路徑上的一個節點(主機或路由器)移動到下一個節點**,服務取決於具體的連結層協定(有些提供可靠傳遞,有些則無)。 協定範例: - Ethernet(乙太網路) - WiFi(無線網路) - DOCSIS(Data-Over-Cable Service Interface Specifications,電纜網路協議) - PPP(Point-to-Point Protocol,對等協定) 資料單元名稱:在這一層的封包被稱為 Frame(訊框)。 #### 實體層(Physical Layer) 實體層負責將 Frame(訊框)中的每一個 bit(位元)從一個節點移動到下一個節點。 實體層與傳輸媒介高度相關(如雙絞銅線、光纖、無線電波等),不同的媒介有不同的實體層協定。 ## 1.5.2 Encapsulation(封裝) ### 理解路徑與層級  Image Source:Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 82, Figure 1.24) - 傳送端(Source):資料從最上層的「應用層」開始,一層一層往下傳遞,經過 - 傳輸層 - 網路層 - 連結層 - 最後到實體層。 - 接收端(Destination):資料從最下層的「實體層」接收,然後一層一層往上拆解,最後回到「應用層」。 - 中間節點(Router & Link-layer switch): - 連結層交換器(Link-layer switch):只處理下面兩層(實體層、連結層)。 - 路由器(Router):處理下面三層(實體層、連結層、網路層)。這就是為什麼路由器可以處理 IP(第三層)協定,而交換器通常只認得 MAC 位址(第二層)。 註:MAC 位址(Media Access Control address)即為實體位址(Physical Address)。 ### 封裝(Encapsulation)的過程 當資料從傳送端往下的每一層移動時,每一層都會把上一層傳來的資料當作「**內容**」,然後加上自己的「**標頭(Header)**」,這就像俄羅斯娃娃一樣,一層包一層,就是套娃的概念,一直套。 來看應用層訊息(Message, M)的傳遞過程: 1. 應用層(Application Layer):產生原始訊息 $M$。 2. 傳輸層(Transport Layer): - 收到 $M$。 - 加上傳輸層標頭( $H_t$ )。 - 形成區段(Segment),也就是 $H_t$ 跟 $M$ 。 - 標頭包含相關資訊:如讓接收端知道要送到哪個應用程式,以及檢查錯誤的位元等。 3. 網路層(Network Layer): - 收到區段 $H_t$ 跟 $M$ - 加上網路層標頭( $H_n$ )。 - 形成資料包(datagram) = $H_n$ 、$H_t$ 、$M$ - 標頭包含資訊:如來源和目的地的 IP 位址。 4. 連結層(Link Layer): - 收到資料包 $H_n$ 、$H_t$ 、$M$ 。 - 加上連結層標頭( $H_l$ )。 - 形成訊框(frame) = $H_l$ 、$H_n$ 、$H_t$ 、$M$ - 此時資料包就成了連結層訊框的酬載(Payload)。 到連結層封裝就結束了,最後再由實體層負責將 Frame(訊框)中的每一個 bit(位元)從一個節點移動到下一個節點。 ### 封裝的比喻 書中舉了公司內部信件的例子來對封裝做比喻: - Alice(傳送端):寫了一張備忘錄($M$)給 Bob。 - 公司內部信封(傳輸層):Alice 把備忘錄放進信封,上面寫著 Bob 的名字和部門( $H_t$ ),即為傳輸層的區段(Segment)。 - 郵局信封(網路層):公司的收發室把內部信封放進一個更大的郵局信封,上面寫著分公司的郵寄地址( $H_n$ ),即為網路層的資料包(Datagram)。 - 郵差遞送(連結層/實體層):郵局負責把這個大信封送到另一間分公司。 ### 解封裝(De-encapsulation) 當資料到達接收端時,過程剛好相反: 1. 實體層:接收位元流。 2. 連結層:讀取標頭 $H_l$ ,確認無誤後,把裡面的內容(資料包,Datagram)往上丟給網路層。 3. 網路層:讀取標頭 $H_n$(確認 IP),把裡面的內容(區段,Segment)往上丟給傳輸層。 4. 傳輸層:讀取標頭 $H_t$(確認 Port),把裡面的內容(訊息 $M$)交給正確的應用程式(如瀏覽器或 Email 軟體)。 ## 總整理 ### 分層架構(Layered Architecture) #### 為何需要分層? 網際網路是一個高度複雜的系統。 分層的目的,是用「模組化」的方式管理複雜度,讓每一層只專注處理自己該負責的事情,並透過明確的「服務介面」與上下層互動。 書中以航空系統作為比喻: - 整個搭飛機流程很複雜,但可以依「事情發生的順序」拆成多層。 - 每一層都在為上一層提供服務,而不必知道上一層的內部細節,這稱為服務模型(Service Model)。 #### 分層優缺點 優點: - 模組化、好維護:修改某一層的實作,不會影響其他層。 - 系統更容易設計與演進(就像航空公司可以改登機規則,但飛機仍照樣起飛)。 缺點: - 功能可能重複:不同層可能做相似的事情。 - 資訊被刻意隱藏:某層若需要下層資訊,嚴格分層反而造成不便。 ### 網際網路的五層協定堆疊(Internet Protocol Stack) 網際網路採用五層架構,由上而下如下: 1. 應用層(Application Layer) - 網路應用與其協定所在之處。 - 例:HTTP、SMTP、FTP、DNS。 - 資料單位:Message(訊息)。 2. 傳輸層(Transport Layer) - 負責「端點到端點」的資料傳送。 - TCP:可靠、流量控制、壅塞控制。 - UDP:不可靠、但輕量快速。 - 資料單位:Segment(區段)。 3. 網路層(Network Layer) - 負責「主機到主機」的路由與轉送。 - IP 是核心協定,路由協定決定路徑。 - 資料單位:Datagram(資料包)。 4. 連結層(Link Layer) - 負責「節點到節點」的資料傳送。 - 例:Ethernet、WiFi。 - 資料單位:Frame(訊框)。 5. 實體層(Physical Layer) - 將 bit 真正送上媒介(線材、光纖、無線)。 - 關心的是「怎麼送位元」。 ### 封裝(Encapsulation):資料如何一層一層包起來 1. 傳送與接收的方向 - 傳送端:資料由上層往下層走,一層一層「加標頭」 - 接收端:資料由下層往上層走,一層一層「拆標頭」 - 中間設備 - 交換器:只處理實體層、連結層 - 路由器:處理到網路層(IP) 2. 封裝的本質 封裝就像俄羅斯娃娃: - 每一層把「上一層的資料」當成內容(Payload) - 再加上自己的標頭(Header) 封裝順序如下: 1. 應用層:產生訊息 $M$ 2. 傳輸層:加上 $H_t$ → Segment 3. 網路層:加上 $H_n$ → Datagram 4. 連結層:加上 $H_l$ → Frame 5. 實體層:把 Frame 轉成 bit 傳送 解封裝: 1. 實體層:接收位元流。 2. 連結層:讀取標頭 $H_l$ ,把 Datagram → 網路層 3. 網路層:讀取標頭 $H_n$ ,把 Segment → 傳輸層 4. 傳輸層:讀取標頭 $H_t$ ,把 Message 交給正確的應用程式 3. 封裝與解封裝的比喻 - 封裝:公司內信 → 郵局信 → 郵差遞送 - 解封裝:郵差 → 郵局 → 公司內部 → 收件人
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up