TCP/IP 四層架構模型
| 層次 | 核心協定 | 關鍵特性 |
| 應用層 | HTTP, FTP, SMTP, DNS, SNMP, Telnet... | 用戶應用與服務 |
| 傳輸層 | TCP (可靠、連線導向) / UDP (不可靠、無連線) | 進程間通訊、端口複用 |
| 網路層 | IP (不可靠、無連線), ICMP, IGMP | 路由選擇、分片重組、定址 |
| 連結層 | 乙太網, Wi-Fi, PPP, 驅動程式, 網卡 | 實體傳輸、幀封裝、MAC 定址 |
核心原則:IP 提供「盡力而為」的無連線傳輸,可靠性由上層 (TCP) 保證。ICMP 為 IP 附屬協定處理錯誤/控制訊息,IGMP 管理多播群組。
IP 位址與子網遮罩
位址分類 (Classful Addressing)
| 類別 | 首位元組模式 | 範圍 | 網路位/主機位 | 適用場景 |
| A | 0xxxxxxx | 1.0.0.0 - 126.255.255.255 | 8/24 | 極大型網路 |
| B | 10xxxxxx | 128.0.0.0 - 191.255.255.255 | 16/16 | 大型網路 |
| C | 110xxxxx | 192.0.0.0 - 223.255.255.255 | 24/8 | 小型網路 |
| D | 1110xxxx | 224.0.0.0 - 239.255.255.255 | 多播 | 群組通訊 |
| E | 1111xxxx | 240.0.0.0 - 255.255.255.255 | 保留 | 實驗/未來 |
特殊位址
- 網路位址:主機位全 0 (如 192.168.1.0) — 不可指派給主機
- 廣播位址:主機位全 1 (如 192.168.1.255) — 單播送達該網段所有主機
- 環回位址:127.0.0.1 (整個 127.0.0.0/8) — 本機測試、內部通訊
- 私有位址:10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (RFC 1918)
子網遮罩與 CIDR
- 將主機位劃分為 子網位 + 主機位
- 遮罩 1 = 網路/子網位,0 = 主機位
- 例:B 類 172.16.0.0/16 → /24 遮罩 (255.255.255.0) = 254 子網 × 254 主機
- CIDR 表示法:192.168.1.0/24 (斜線標記網路前綴長度)
- 取代傳統分類,支援 VLSM (變長子網遮罩) 與路由匯總
封裝與分用流程
發送端封裝 (自上而下)
應用資料
↓ TCP/UDP 標頭 (來源/目的埠、序號、檢驗和...)
↓ IP 標頭 (來源/目的 IP、TTL、協定、檢驗和...)
↓ 連結層幀標頭/尾 (MAC、類型、FCS)
↓ 實體傳輸
接收端分用 (自下而上)
實體接收
↑ 連結層:檢查 FCS、MAC 匹配 → 剝離幀標頭/尾
↑ IP 層:檢查檢驗和、TTL、目的 IP → 剝離 IP 標頭
├─ 協定=1 (ICMP) → ICMP 模組
├─ 協定=2 (IGMP) → IGMP 模組
├─ 協定=6 (TCP) → TCP 模組 (依埠號分用至連線)
└─ 協定=17 (UDP) → UDP 模組 (依埠號分用至佇列)
↑ 傳輸層:檢查檢驗和、序號/埠號 → 剝離標頭
↑ 應用層:交付應用程式
IP 標頭深度解析 (RFC 791)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (variable) | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
關鍵欄位詳細說明
| 欄位 | 長度 | 核心功能 |
| Version | 4 bits | 4 = IPv4, 6 = IPv6 |
| IHL | 4 bits | 標頭長度 (32-bit 字單位),最小 5 (20 bytes),最大 15 (60 bytes) |
| Type of Service (TOS) | 8 bits | 優先權(3) + TOS(4: 最小延遲/最大吞吐/最高可靠/最小成本) + 保留(1) — 現多用 DSCP (DiffServ) |
| Total Length | 16 bits | 整個 IP 資料報長度 (標頭+資料),最大 65,535 bytes |
| Identification | 16 bits | 唯一標識資料報,分片時複製到所有片段 |
| Flags | 3 bits | 保留(1) + DF(1: 不分片) + MF(1: 更多片段) |
| Fragment Offset | 13 bits | 片段相對原始資料報起始位移 (8 bytes 為單位) |
| TTL | 8 bits | 生存時間 (跳數/秒),每跳遞減 1,為 0 丟棄並送 ICMP Time Exceeded |
| Protocol | 8 bits | 上層協定:1=ICMP, 2=IGMP, 6=TCP, 17=UDP |
| Header Checksum | 16 bits | 僅覆蓋 IP 標頭,每跳重新計算 (TTL 變化) |
| Source/Dest Address | 32 bits | IPv4 位址 |
| Options | 可變 | 記錄路由、時間戳、來源路由、安全性等 (最多 40 bytes) |
IP 檢驗和計算演算法 (C 實作)
USHORT checksum(IP_HDR *ip, int len) {
unsigned long sum = 0;
while (len > 1) {
sum += *((USHORT*)ip)++;
len -= sizeof(USHORT);
}
if (len) sum += *(UCHAR*)ip;
sum = (sum >> 16) + (sum & 0xFFFF);
sum += (sum >> 16);
return (USHORT)(~sum);
}
ICMP、IGMP、TCP、UDP 採用相同演算法 (含偽標頭)。
埠號機制
- 16 bits,範圍 0-65535
- 知名埠 (0-1023):IANA 分配,如 HTTP(80), HTTPS(443), DNS(53), SSH(22)
- 登記埠 (1024-49151):應用程式向 IANA 登記
- 動態/私用埠 (49152-65535):客戶端暫時性使用 (Ephemeral Ports)
連結層:以太網封裝 (RFC 894)
目的 MAC(6) | 來源 MAC(6) | 類型/長度(2) | 資料(46-1500) | FCS(4)
類型值:0x0800=IPv4, 0x0806=ARP, 0x86DD=IPv6
最小資料 46 bytes → ARP/RAPR 28 bytes 需填充 18 bytes
MTU = 1500 bytes (不含 18 bytes 幀標頭/尾)
環回介面機制
- 位址:127.0.0.1 (通常命名 localhost)
- 送往環回的封包:不出現在任何實體網路上
- 三大特性:
- 送往環回 = IP 輸入 (內部回環)
- 廣播/多播封包:複製一份送環回,一份送實體網卡
- 送往本機 IP 位址:直接送環回介面
MTU 與路徑 MTU
- MTU (Maximum Transmission Unit):連結層最大資料單元 (以太網 1500)
- IP 資料報 > MTU → IP 層分片
- 路徑 MTU (PMTU):端到端路徑上 最小 MTU
- PMTU 發現:設 DF bit,收到 ICMP "Packet Too Big" 調整發送大小
IP 路由選擇核心邏輯
路由表結構 (Windows route print 範例)
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.1.8.26 192.1.8.84 1 ← Default
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.1.8.0 255.255.255.0 192.1.8.84 192.1.8.84 1 ← Direct
192.1.8.84 255.255.255.255 127.0.0.1 127.0.0.1 1 ← Host
192.1.8.255 255.255.255.255 192.1.8.84 192.1.8.84 1 ← Broadcast
224.0.0.0 240.0.0.0 192.1.8.84 192.1.8.84 1 ← Multicast
255.255.255.255 255.255.255.255 192.1.8.84 192.1.8.84 1 ← Limited Bcast
路由查找演算法 (最長前綴匹配)
- 對每個路由表項:
目的 IP & 遮罩 == 目的地 & 遮罩
- 所有匹配項中選擇 遮罩最長 (最具體) 者
- 相同遮罩多條 → 依 Metric (度量) 選擇最小者
- 若無匹配且有預設路由 → 使用預設路由
- 仍無路由 → 本機產生送 ICMP Host/Net Unreachable;轉發封包送 ICMP Host Unreachable 給來源
直接 vs 間接遞送
- 直接:目的在同一連結 (遮罩匹配本機介面網路) → ARP 解析 MAC 直接送達
- 間接:送往閘道 (路由器) → 遞歸查找下一跳