網路基礎與分層模型#

網路協定是電腦之間溝通的「語言」。就像人類需要共同的語言才能交流,電腦需要共同的協定才能傳輸資料。

為什麼需要網路協定#

一段程式碼能讓一台電腦運作,但要讓一大片機器協同運作,就需要網路協定。網路協定使得全球數十億設備能夠互聯互通,建置起互聯網世界。

協定三要素#

任何協定都包含三個基本要素:

要素說明範例 (HTTP)
語法資料格式和結構規範狀態行、首部、正文的固定格式
語義內容的含義約定200 表示成功,404 表示找不到
順序操作的先後次序先發請求,後收回應

網路分層模型#

複雜的系統都需要分層,網路也不例外。分層讓每一層專注於自己的職責,降低複雜度。

TCP/IP 四層模型#

實際工作中最常用的是 TCP/IP 四層模型:

flowchart TB
    A["應用層 Application\nHTTP, DNS, FTP, SSH"]
    B["傳輸層 Transport\nTCP, UDP"]
    C["網路層 Network\nIP, ICMP, 路由協定"]
    D["網路接口層 Network Interface\nMAC, ARP, 乙太網路"]

    A --> B --> C --> D

    style A fill:#4a90d9,stroke:#2a6cb0,color:#fff
    style B fill:#50b86c,stroke:#339952,color:#fff
    style C fill:#e8a838,stroke:#c4882a,color:#fff
    style D fill:#d95050,stroke:#b03030,color:#fff

層層封裝的核心概念#

網路上傳輸的包都是完整的。可以有下層沒上層,絕對不可能有上層沒下層。

資料在發送時,從上往下逐層添加頭部(封裝);接收時,從下往上逐層剝離頭部(解封裝):

flowchart LR
    subgraph 發送方 - 封裝
        direction TB
        S1["HTTP 資料"]
        S2["TCP 頭 + 資料"]
        S3["IP 頭 + TCP 頭 + 資料"]
        S4["MAC 頭 + IP 頭 + TCP 頭 + 資料"]
        S1 -->|"加入 TCP 頭"| S2 -->|"加入 IP 頭"| S3 -->|"加入 MAC 頭"| S4
    end

    S4 -- "網路傳輸" --> R4

    subgraph 接收方 - 解封裝
        direction BT
        R4["MAC 頭 + IP 頭 + TCP 頭 + 資料"]
        R3["IP 頭 + TCP 頭 + 資料"]
        R2["TCP 頭 + 資料"]
        R1["HTTP 資料"]
        R4 -->|"剝離 MAC 頭"| R3 -->|"剝離 IP 頭"| R2 -->|"剝離 TCP 頭"| R1
    end

    style S1 fill:#4a90d9,stroke:#2a6cb0,color:#fff
    style S2 fill:#50b86c,stroke:#339952,color:#fff
    style S3 fill:#e8a838,stroke:#c4882a,color:#fff
    style S4 fill:#d95050,stroke:#b03030,color:#fff
    style R1 fill:#4a90d9,stroke:#2a6cb0,color:#fff
    style R2 fill:#50b86c,stroke:#339952,color:#fff
    style R3 fill:#e8a838,stroke:#c4882a,color:#fff
    style R4 fill:#d95050,stroke:#b03030,color:#fff

TCP 三次握手時,IP 層和 MAC 層在做什麼?答案是:每發一個 TCP 包,IP 層和 MAC 層都要完整運作一遍。沒有 MAC 和 IP 頭,包根本發不出去。

二層設備與三層設備#

所謂「幾層設備」,是指該設備處理到哪一層:

  • 二層設備(交換機):只看 MAC 頭,決定轉發、丟棄或自己處理
  • 三層設備(路由器):剝掉 MAC 頭後,再看 IP 頭做決策

無論經過幾層設備,網路包本身始終是完整的(包含所有層的頭部)。

IP 位址基礎#

查看 IP 位址#

# Linux
ip addr       # 推薦,iproute2 工具包
ifconfig      # 傳統方式,net-tools 工具包

# Windows
ipconfig
ip addr 輸出範例
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
    link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
    inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0
欄位說明
eth0網卡名稱
link/etherMAC 位址
inetIPv4 位址
/24CIDR 表示法,表示前 24 位是網路號
brd廣播位址
mtu 1500最大傳輸單元(乙太網路預設值)

CIDR 表示法#

傳統的 A/B/C 類位址劃分已經過時,現在普遍使用 CIDR(無類型域間選路)

10.100.122.2/24
     │         │
     │         └── 前 24 位是網路號,後 8 位是主機號
     └── IP 位址

計算方式:

項目計算方法範例 (10.100.122.2/24)
網路號IP AND 子網掩碼10.100.122.0
子網掩碼前 N 位全 1,後面全 0255.255.255.0
廣播位址網路號 + 主機位全 110.100.122.255
可用主機數2^(32-N) - 2254

/24 對應子網掩碼 255.255.255.0,最多 254 台主機;/16 對應 255.255.0.0,最多約 65534 台主機。

公有 IP 與私有 IP#

類型範圍用途
私有 IP10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16內網使用,可重複
公有 IP除私有 IP 外的位址互聯網使用,全球唯一

私有 IP 就像社區內的門牌號,不同社區可以重複;公有 IP 就像國家統一分配的街道位址,不能重複。

IP 位址 vs MAC 位址#

MAC 位址是網卡的物理位址(6 個位元組,十六進制表示,如 fa:16:3e:c7:79:75)。這裡只做與 IP 位址的對照,完整的 MAC 層機制(多路存取、ARP、交換機學習)見「資料鏈結層」一章。

特性IP 位址MAC 位址
類比門牌號碼身份證號碼
功能定位,指明目的地標示,區分不同網卡
範圍跨網路有效僅在本地網路有效
是否可變可設定出廠固定(可軟體修改)

IP 位址用於跨網路的路由定位,就像快遞收件地址;MAC 位址用於本地網路內的設備識別,就像收件人姓名。到了目標網路後,透過 MAC 位址找到具體的機器。

一個完整的網路請求過程#

以訪問電商網站為例,串聯所有協定:

步驟層級說明
1DNS 解析將域名轉換為 IP 位址
2應用層瀏覽器建置 HTTP/HTTPS 請求
3傳輸層TCP 封裝,加入來源/目標埠號
4網路層IP 封裝,加入來源/目標 IP 位址
5網路介面層ARP 取得網關 MAC 位址,封裝成乙太網路幀
6物理傳輸透過網關、路由器層層轉發
7目標伺服器逐層解封裝,處理請求,回傳回應

本章小結#

概念關鍵點
協定三要素語法、語義、順序
分層模型TCP/IP 四層,每層各司其職
核心原則網路包必須完整,有上層必有下層
IP 位址用於跨網路定位,CIDR 表示網路劃分
MAC 位址用於本地網路識別,範圍有限