首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

TCP/IP 協定族基礎架構與 IP 協定核心機制完整指南

     編輯:關於VC++

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)

類別首位元組模式範圍網路位/主機位適用場景
A0xxxxxxx1.0.0.0 - 126.255.255.2558/24極大型網路
B10xxxxxx128.0.0.0 - 191.255.255.25516/16大型網路
C110xxxxx192.0.0.0 - 223.255.255.25524/8小型網路
D1110xxxx224.0.0.0 - 239.255.255.255多播群組通訊
E1111xxxx240.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   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

關鍵欄位詳細說明

欄位長度核心功能
Version4 bits4 = IPv4, 6 = IPv6
IHL4 bits標頭長度 (32-bit 字單位),最小 5 (20 bytes),最大 15 (60 bytes)
Type of Service (TOS)8 bits優先權(3) + TOS(4: 最小延遲/最大吞吐/最高可靠/最小成本) + 保留(1) — 現多用 DSCP (DiffServ)
Total Length16 bits整個 IP 資料報長度 (標頭+資料),最大 65,535 bytes
Identification16 bits唯一標識資料報,分片時複製到所有片段
Flags3 bits保留(1) + DF(1: 不分片) + MF(1: 更多片段)
Fragment Offset13 bits片段相對原始資料報起始位移 (8 bytes 為單位)
TTL8 bits生存時間 (跳數/秒),每跳遞減 1,為 0 丟棄並送 ICMP Time Exceeded
Protocol8 bits上層協定:1=ICMP, 2=IGMP, 6=TCP, 17=UDP
Header Checksum16 bits僅覆蓋 IP 標頭,每跳重新計算 (TTL 變化)
Source/Dest Address32 bitsIPv4 位址
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)
  • 送往環回的封包:不出現在任何實體網路上
  • 三大特性:
    1. 送往環回 = IP 輸入 (內部回環)
    2. 廣播/多播封包:複製一份送環回,一份送實體網卡
    3. 送往本機 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

路由查找演算法 (最長前綴匹配)

  1. 對每個路由表項:目的 IP & 遮罩 == 目的地 & 遮罩
  2. 所有匹配項中選擇 遮罩最長 (最具體) 者
  3. 相同遮罩多條 → 依 Metric (度量) 選擇最小者
  4. 若無匹配且有預設路由 → 使用預設路由
  5. 仍無路由 → 本機產生送 ICMP Host/Net Unreachable;轉發封包送 ICMP Host Unreachable 給來源

直接 vs 間接遞送

  • 直接:目的在同一連結 (遮罩匹配本機介面網路) → ARP 解析 MAC 直接送達
  • 間接:送往閘道 (路由器) → 遞歸查找下一跳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved