【計算機網路筆記】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

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(HyperText Transfer Protocol):網頁瀏覽(傳輸 Web 文件)。
  • SMTP(Simple Mail Transfer Protocol):電子郵件傳輸。
  • FTP(File Transfer Protocol):檔案傳輸。
  • DNS(Domain Name System):網域名稱系統(將網址轉換為 IP 位址)。

資料單元名稱:在這一層的訊息封包被稱為 Message(訊息)。

傳輸層(Transport Layer)

該層負責在應用程式端點之間傳送應用層訊息。

協定範例:

  • TCP(Transmission Control Protocol,傳輸控制協定):提供連線導向的服務,保證資料送達、流量控制(Flow control)和壅塞控制(Congestion control),它會將長訊息分解為較短的片段。
  • UDP(User Datagram Protocol,使用者資料包協定):提供非連線導向的服務,這是一種陽春(no-frills)的服務,保證可靠性,也沒有流量或壅塞控制。

資料單元名稱:在這一層的封包被稱為 Segment(區段)。

網路層(Network Layer)

該層負責將資料包(Datagrams)從一台主機移動到另一台主機,傳輸層會將 Segment 和目標地址交給網路層,就像把寫好地址的信交給郵局一樣。

協定範例:

  • IP 協定(Internet Protocol):定義了資料包的欄位以及端系統和路由器如何處理這些欄位,這是將網際網路黏合在一起的膠水。
  • 繞送協定(Routing Protocol,也稱路由協定):決定資料包從來源到目的地的路徑。

資料單元名稱:在這一層的封包被稱為 Datagram(資料包)。

網路層依靠連結層將資料包從路徑上的一個節點(主機或路由器)移動到下一個節點,服務取決於具體的連結層協定(有些提供可靠傳遞,有些則無)。

協定範例:

  • Ethernet(乙太網路)
  • WiFi(無線網路)
  • DOCSIS(Data-Over-Cable Service Interface Specifications,電纜網路協議)
  • PPP(Point-to-Point Protocol,對等協定)

資料單元名稱:在這一層的封包被稱為 Frame(訊框)。

實體層(Physical Layer)

實體層負責將 Frame(訊框)中的每一個 bit(位元)從一個節點移動到下一個節點。

實體層與傳輸媒介高度相關(如雙絞銅線、光纖、無線電波等),不同的媒介有不同的實體層協定。

1.5.2 Encapsulation(封裝)

理解路徑與層級

image

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):產生原始訊息 MM
  2. 傳輸層(Transport Layer):
    • 收到 MM
    • 加上傳輸層標頭( HtH_t )。
    • 形成區段(Segment),也就是 HtH_tMM
    • 標頭包含相關資訊:如讓接收端知道要送到哪個應用程式,以及檢查錯誤的位元等。
  3. 網路層(Network Layer):
    • 收到區段 HtH_tMM
    • 加上網路層標頭( HnH_n )。
    • 形成資料包(datagram) = HnH_nHtH_tMM
    • 標頭包含資訊:如來源和目的地的 IP 位址。
  4. 連結層(Link Layer):
    • 收到資料包 HnH_nHtH_tMM
    • 加上連結層標頭( HlH_l )。
    • 形成訊框(frame) = HlH_lHnH_nHtH_tMM
    • 此時資料包就成了連結層訊框的酬載(Payload)。

到連結層封裝就結束了,最後再由實體層負責將 Frame(訊框)中的每一個 bit(位元)從一個節點移動到下一個節點。

封裝的比喻

書中舉了公司內部信件的例子來對封裝做比喻:

  • Alice(傳送端):寫了一張備忘錄(MM)給 Bob。
  • 公司內部信封(傳輸層):Alice 把備忘錄放進信封,上面寫著 Bob 的名字和部門( HtH_t ),即為傳輸層的區段(Segment)。
  • 郵局信封(網路層):公司的收發室把內部信封放進一個更大的郵局信封,上面寫著分公司的郵寄地址( HnH_n ),即為網路層的資料包(Datagram)。
  • 郵差遞送(連結層/實體層):郵局負責把這個大信封送到另一間分公司。

解封裝(De-encapsulation)

當資料到達接收端時,過程剛好相反:

  1. 實體層:接收位元流。
  2. 連結層:讀取標頭 HlH_l ,確認無誤後,把裡面的內容(資料包,Datagram)往上丟給網路層。
  3. 網路層:讀取標頭 HnH_n(確認 IP),把裡面的內容(區段,Segment)往上丟給傳輸層。
  4. 傳輸層:讀取標頭 HtH_t(確認 Port),把裡面的內容(訊息 MM)交給正確的應用程式(如瀏覽器或 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. 應用層:產生訊息 MM
    2. 傳輸層:加上 HtH_t → Segment
    3. 網路層:加上 HnH_n → Datagram
    4. 連結層:加上 HlH_l → Frame
    5. 實體層:把 Frame 轉成 bit 傳送
      解封裝:
    6. 實體層:接收位元流。
    7. 連結層:讀取標頭 HlH_l ,把 Datagram → 網路層
    8. 網路層:讀取標頭 HnH_n ,把 Segment → 傳輸層
    9. 傳輸層:讀取標頭 HtH_t ,把 Message 交給正確的應用程式
  3. 封裝與解封裝的比喻
    • 封裝:公司內信 → 郵局信 → 郵差遞送
    • 解封裝:郵差 → 郵局 → 公司內部 → 收件人