網路與 IP

TCP/IP 協議是什麼?四層模型、OSI 對照與各層協議

TCP/IP 協議不是一個協議,而是網際網路通訊所用的一整套協議,因其中最核心的 TCP 和 IP 而得名。它把通訊分成鏈路層、網路層、傳輸層、應用層四層,每層只管一件事:鏈路層在同一網段內送幀,網路層按 IP 位址跨網段選路,傳輸層按連接埠把資料交給程式,應用層規定 HTTP、DNS 這類具體業務的格式。

作者 頂聯產品團隊發布於 8 分鐘閱讀

TCP/IP 協議是網際網路以及幾乎所有企業網、機房網路使用的協議簇(也叫協議族、協議套件),名字取自其中最核心的兩個協議:負責定址和選路的 IP(Internet Protocol,網際協議),以及負責可靠傳輸的 TCP(Transmission Control Protocol,傳輸控制協議)。除了這兩個,它還包括 UDP、ICMP、ARP、DNS、HTTP 等大量協議。RFC 1122 把它們按功能分成四層:鏈路層、網路層(也叫網際層)、傳輸層、應用層。作業系統核心裡實現這套協議的部分,就是常說的 TCP/IP 協議棧。弄清分層的實際用處在於排障:每一層只依賴它下面那一層,故障落在哪一層,就用那一層的工具去查。

TCP/IP 四層模型:每層負責什麼

層 負責什麼 資料單位 用什麼定址 典型協議
應用層 規定具體業務的資料格式和互動規則 訊息(報文) 域名、URL HTTP、DNS、SSH、SMTP、SNMP
傳輸層 在兩台主機的程式之間傳資料,區分交給哪個程式 段(TCP)、資料包(UDP) 連接埠號 TCP、UDP
網路層 跨網段把包從源主機送到目的主機,逐跳選路 包(分組) IP 位址 IPv4、IPv6、ICMP
鏈路層 在同一個物理網段或 VLAN 內,把幀送到下一跳裝置 幀 MAC 位址 乙太網、ARP、802.1Q VLAN

四層的分工可以這樣理解:

  • 鏈路層只管“一跳”。一個乙太網幀從伺服器發出,只能送到同一網段裡的下一個裝置:要麼是同網段的目標主機,要麼是預設閘道器。跨網段時,每經過一台路由器,幀都會被拆掉再重新封裝,源 MAC 和目的 MAC 每一跳都在變。
  • 網路層管“端到端”。IP 包頭裡的源、目的位址從發出到收到一般保持不變(經過 NAT 時除外)。路由器根據目的位址查路由表決定下一跳,每轉發一次把 TTL 減 1,減到 0 就丟棄,以免包在環路里無限打轉。
  • 傳輸層管“交給哪個程式”。IP 只負責把包送到主機,主機上同時跑著 Web、SSH、資料庫等程式,要靠目的連接埠區分。TCP 在這一層提供連線、確認、重傳和按序交付;UDP 只做連接埠區分和校驗,其餘交給應用。
  • 應用層管“說什麼”。HTTP 規定請求行和頭部怎麼寫,DNS 規定查詢和應答的格式。它們把可靠傳輸交給下層,只關心業務本身。

TCP/IP 四層和 OSI 七層怎麼對應

OSI 七層模型是國際標準化組織(ISO)制定的參考模型,概念劃分細緻,但它配套的協議沒有普及;TCP/IP 則是實際執行的協議簇。兩者的對應關係如下,教材裡常見的五層模型也一併列出:

OSI 七層 編號 TCP/IP 四層 五層教學模型
應用層 7 應用層 應用層
表示層 6 應用層 應用層
會話層 5 應用層 應用層
傳輸層 4 傳輸層 傳輸層
網路層 3 網路層 網路層
資料鏈路層 2 鏈路層 資料鏈路層
物理層 1 鏈路層 物理層

機房裡有一個常讓新人困惑的地方:協議按 TCP/IP 分組,口頭說法卻用 OSI 的編號。“二層交換器”“二層不通”說的是資料鏈路層;“三層交換器”“三層介面”說的是網路層;“四層負載均衡”按 IP 和連接埠轉發,“七層負載均衡”能識別 HTTP 的域名和 URL;“七層攻擊”就是應用層攻擊。OSI 的第 5、6 層在 TCP/IP 裡沒有對應的獨立協議,會話保持、編碼和加密由應用自己或 TLS 完成。

各層常見協議對照表

層 協議 下層靠什麼識別它 說明
應用層 HTTP / HTTPS TCP 80 / 443 HTTP/3 改走 UDP 443 上的 QUIC
應用層 DNS UDP 53、TCP 53 域名解析
應用層 SSH TCP 22 遠端登入、SFTP
應用層 DHCP UDP 67 / 68 自動分配位址、閘道器和 DNS
應用層 SNMP UDP 161 / 162 裝置監控與告警
應用層 BGP TCP 179 雖然是路由協議,但跑在 TCP 之上,按封裝位置算應用層
傳輸層 TCP IP 協議號 6 面向連線、可靠、按序
傳輸層 UDP IP 協議號 17 無連線、開銷小
網路層 IPv4 / IPv6 乙太網型別 0x0800 / 0x86DD 定址和逐跳轉發
網路層 ICMP / ICMPv6 IP 協議號 1 / 58 ping、traceroute 和差錯報告;ICMPv6 還承擔鄰居發現
網路層 OSPF IP 協議號 89 直接封裝在 IP 裡,不經過 TCP 或 UDP
網路層 IPsec(ESP / AH) IP 協議號 50 / 51 VPN 加密與認證
鏈路層 ARP 乙太網型別 0x0806 由 IP 位址查 MAC 位址;也有教材把它劃到網路層
鏈路層 乙太網(IEEE 802.3) — 幀格式與 MAC 位址
鏈路層 802.1Q VLAN 乙太網型別 0x8100 在幀裡插入 4 位元組的 VLAN 標籤
鏈路層 LACP 乙太網型別 0x8809 鏈路聚合協商

“下層靠什麼識別它”這一列,正是協議棧把資料一層層往上交的依據:網路卡收到幀,看乙太網型別欄位,0x0800 交給 IPv4,0x0806 交給 ARP;IP 層看協議號,6 交給 TCP,17 交給 UDP,1 交給 ICMP;TCP 和 UDP 再看目的連接埠,交給監聽該連接埠的程序。防火牆規則裡的 -p tcp --dport 443、交換器 ACL 裡的 permit tcp ... eq 443,匹配的就是這幾個欄位。

網線、交換器、路由器、防火牆各工作在哪層

說一台裝置“工作在第幾層”,意思是它最多解析到第幾層的包頭,並據此做轉發決定。

裝置 OSI 層 依據什麼轉發或處理 機房裡常見的問題
網線、光纖、光模組、配線架 1 物理層 只傳位元,不看內容 線纜損壞、光功率不足、速率或雙工協商異常
網路卡 1–2 收發幀,過濾掉目的 MAC 不是自己的幀 驅動、協商速率、bond 配置
二層交換器 2 資料鏈路層 MAC 位址表和 VLAN VLAN 配錯、環路、MAC 漂移
三層交換器 2–3 同 VLAN 內按 MAC 轉發,VLAN 之間按路由錶轉發 閘道器介面未啟用、缺路由
路由器 3 網路層 路由表、NAT 回程路由缺失、NAT 規則寫錯
狀態檢測防火牆、ACL 3–4 IP 位址、協議號、連接埠、連線狀態 漏放回程、會話表打滿
四層負載均衡(如 LVS) 4 IP 加連接埠 後端健康檢查、會話保持
七層負載均衡、WAF、反向代理 7 HTTP 的域名、URL、頭部 證書、超時、正常請求被誤攔
伺服器作業系統 1–7 完整協議棧 任一層都可能出問題

分清裝置的層次,能少走很多彎路。二層交換器不看 IP:同一 VLAN 裡兩台伺服器配了不同網段的位址,交換器照樣轉發它們之間的幀,但兩台主機的協議棧都會認為對方不在本網段,把包發給閘道器去繞路。路由器轉發時只看目的 IP,不看連接埠:某個連接埠被攔了,要去防火牆、ACL 或伺服器上查,查路由表找不到原因。

一次 HTTP 請求的封裝過程

假設一台伺服器 198.51.100.23(閘道器 198.51.100.1)執行 curl http://www.example.com/,從發出到對端收到要經過下面幾步:

  1. 應用層:解析域名,生成請求。curl 先呼叫系統解析器查詢 www.example.com,這次 DNS 查詢本身也是一次完整的逐層封裝(走 UDP 53)。拿到位址 203.0.113.10 後生成 HTTP 請求,內容大約 78 位元組:
GET / HTTP/1.1
Host: www.example.com
User-Agent: curl/8.5.0
Accept: */*
  1. 傳輸層:建立 TCP 連線,加 TCP 頭。先完成三次握手(SYN、SYN-ACK、ACK),再把這 78 位元組作為資料裝進 TCP 段。源連接埠由系統從臨時連接埠範圍裡挑一個,例如 51324;目的連接埠是 80;此外還有序號、確認號、視窗等欄位。TCP 頭最少 20 位元組;Linux 預設啟用時間戳選項,對端也支援時,資料段的 TCP 頭是 32 位元組。
  2. 網路層:加 IP 頭。源位址 198.51.100.23,目的位址 203.0.113.10,協議號 6 表示裡面是 TCP,TTL 的初始值 Linux 預設是 64。IPv4 頭 20 位元組。
  3. 鏈路層:查路由、做 ARP、加乙太網頭。系統查路由表,發現 203.0.113.10 不在本網段,下一跳是預設閘道器 198.51.100.1;到 ARP 表裡找閘道器的 MAC,找不到就先廣播一次 ARP 請求。然後加上 14 位元組的乙太網頭和 4 位元組的幀校驗序列(FCS)。注意這裡的目的 MAC 是閘道器的,不是 Web 伺服器的。
  4. 物理層:轉成電訊號或光訊號發出。

每一層加了多少位元組:

層 加上的部分 位元組 累計
應用層 HTTP 請求 78 78
傳輸層 TCP 頭(含時間戳選項) 32 110
網路層 IPv4 頭 20 130
鏈路層 乙太網頭 14 + FCS 4 18 148

路上的每台路由器收到幀後,校驗 FCS、剝掉乙太網頭,讀 IP 頭查路由表,把 TTL 減 1,再按出介面的鏈路型別重新加上新的幀頭交給下一跳。全程 IP 位址不變,MAC 位址每跳都換。Web 伺服器收到後反向拆包:乙太網型別 0x0800 交給 IPv4,協議號 6 交給 TCP,目的連接埠 80 交給 Nginx 這樣的 Web 程序。

抓包能直接看到這幾層。-e 顯示鏈路層頭部,-nn 不把位址和連接埠翻譯成名字:

tcpdump -i eth0 -e -nn host 203.0.113.10 and tcp port 80

建立連線的第一個包大致如下:

10:15:02.183412 52:54:00:aa:bb:01 > 00:1a:2b:3c:4d:5e, ethertype IPv4 (0x0800), length 74: 198.51.100.23.51324 > 203.0.113.10.80: Flags [S], seq 1938204312, win 64240, options [mss 1460,sackOK,TS val 3012 ecr 0,nop,wscale 7], length 0

從左往右讀:兩個 MAC 和 ethertype IPv4 屬於鏈路層;兩個 IP 位址屬於網路層;.51324、.80 和 Flags [S] 屬於傳輸層;末尾的 length 0 表示這個 SYN 包還沒有攜帶應用層資料。前面的 length 74 是整幀長度(不含 FCS):14 位元組乙太網頭、20 位元組 IP 頭和 40 位元組 TCP 頭,握手包帶著 MSS、視窗縮放等選項,所以 TCP 頭比資料包更長。

用分層思路定位故障:從下往上查

排障時從下往上,每層用一條命令得出“通”或“不通”的結論再往上走。反過來也成立:上層已經正常,下面各層一定沒問題,例如能 ping 通外網的某個 IP,就可以直接從傳輸層查起。

層 典型現象 檢查命令 怎麼判斷
物理層 網口燈不亮,或速率只有 100 Mb/s ethtool eth0 Link detected: no 表示沒有鏈路;Speed 低於連接埠速率是協商問題;ethtool -S eth0 裡 CRC 類錯誤持續增長,多為線纜或光模組故障
鏈路層 同網段的閘道器 ping 不通 ip neigh show 閘道器那一行是 FAILED 或 INCOMPLETE,說明 ARP 沒有應答:VLAN 配錯、交換器連接埠被關閉或做了 MAC 繫結
網路層 閘道器能通,外網 IP 不通 ip route、traceroute -n 203.0.113.10、mtr -n 203.0.113.10 沒有預設路由,或者從某一跳開始往後全是 * * *(中間個別跳不回應是正常的)
傳輸層 ping 得通,連接埠連不上 客戶端 nc -zv 203.0.113.10 443,伺服器 ss -tlnp 立即報 refused 多是沒有程式監聽,或防火牆設定了拒絕;一直等到超時多是防火牆丟棄
應用層 連接埠能通,頁面報錯或域名打不開 curl -v http://www.example.com/、dig www.example.com 看 HTTP 狀態碼、證書報錯和域名解析結果

鏈路層的問題,交換器一側也要對著查:華為、新華三用 display mac-address 和 display arp,思科用 show mac address-table 和 show ip arp,確認伺服器的 MAC 是否出現在預期的連接埠和 VLAN 裡。

有些故障跨在兩層之間,單看一層會誤判:

  • 小包通、大包不通。ping 正常、SSH 能登入,但傳大檔案或開啟內容多的頁面時卡住。常見原因是路徑上某段 MTU 變小(隧道封裝、VLAN 巢狀),而通知傳送方減小包長的 ICMP 訊息又被防火牆過濾。症狀出現在應用層,根因在網路層和鏈路層之間。
  • IP 位址衝突。兩台機器配了同一個 IP,閘道器 ARP 表裡這個 IP 對應的 MAC 來回變化,表現為時通時斷。在閘道器上連續檢視 ARP 表,或者看裝置日誌裡的 MAC 變更告警,就能找到衝突的那台。
  • 單向通。去程路由正常、回程路由缺失,或者回程走了另一個出口被狀態防火牆丟棄。表現是對端抓包能看到請求,本機卻收不到應答,要在兩端分別抓包對比。

在管理系統裡怎麼落地

按層排障時,敲命令往往不費時間,費時間的是找資訊:這台伺服器接在哪台交換器的哪個連接埠、在哪個 VLAN、IP 和閘道器是多少。Toplink DCIM 的交換器管理裡,伺服器列表裡就能看到每台機器的上聯交換器、連接埠號、連接埠速率與所屬 VLAN;二層問題可以在網頁上開關連接埠、修改 VLAN,也可以開啟瀏覽器裡的交換器終端執行 display、show 命令。IP 位址管理按段登記位址、閘道器和所在 VLAN,配合交換器側的 ARP 繫結和源位址校驗,把 IP 與伺服器網路卡 MAC、交換器連接埠鎖定,減少位址衝突和盜用這類二三層交界處的故障。

常見問題

TCP/IP 四層模型和五層模型有什麼區別?

五層模型是教材為了講解方便,把四層模型的鏈路層拆成了物理層和資料鏈路層,其餘三層不變。RFC 1122 定義的是四層;機房裡口頭說“二層”“三層”,用的則是 OSI 七層的編號。

三層交換器和路由器都工作在網路層,有什麼區別?

三層交換器以乙太網口為主,用硬體按路由表高速轉發,適合在機房內部做 VLAN 之間的路由;路由器介面型別更多,NAT、VPN、策略路由等功能更完整,通常放在出口。具體能力以裝置型號為準。

HTTPS 裡的 TLS 屬於哪一層?

TLS 執行在 TCP 之上、HTTP 之下。按 TCP/IP 四層模型歸入應用層;對照 OSI 時,有的資料放在會話層,有的放在表示層,並無統一說法。理解封裝時只要記住順序:HTTP 資料先經 TLS 加密,再交給 TCP。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88