iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0

說到 OSI 模型,很多人的第一個反應大概是:

實體層、資料連結層、網路層、傳輸層……

接著開始努力回想第五層到底是 Session 還是 Presentation,腦中甚至會自動播放考證照時背過的口訣。

學生時代看到 OSI 七層模型,很容易覺得它只是一張為了考試而存在的表格。每一層都有自己的 Protocol、PDU 和設備,背完考完,然後迅速交還給老師。

但開始工作後,我才發現真正好用的地方,不是讓我們背出七層名稱,而是協助我們回答:

現在的問題,大概發生在哪一層?

當使用者只丟下一句「網路不能用」,我們很難直接知道答案。但如果按照分層逐步檢查,就能避免從應用程式一路亂猜到 ISP,最後每個設定都碰過,只有問題本身還活得好好的。


先快速認識 OSI 七層

OSI 模型將網路通訊拆成七個層級:

層級 名稱 關注內容
Layer 7 Application 使用者與應用服務
Layer 6 Presentation 格式、編碼、加密
Layer 5 Session 工作階段的建立與維持
Layer 4 Transport TCP、UDP、Port
Layer 3 Network IP、Routing
Layer 2 Data Link MAC、VLAN、Switching
Layer 1 Physical 線材、訊號、介面

現實世界不一定會乖乖按照七層切得乾乾淨淨。

例如 TLS 可能被放在不同層解釋,許多現代應用也同時跨越多層。排錯時不用為了「這個 Protocol 到底算第幾層」和同事開一場哲學辯論。

對我們來說,OSI 最重要的用途是:

  • 建立檢查順序
  • 將問題分類
  • 避免跳過基礎條件
  • 協助團隊描述故障位置

接下來讓我們細看每層

Layer 1:Physical 實體層

實體層處理的是最基礎的傳輸媒介與訊號。

常見項目包括:

  • 網路線
  • 光纖
  • 無線電波
  • 網卡
  • Switch Port
  • SFP 模組
  • 電力與 PoE
  • 訊號品質
  • 速度與雙工協商

這一層出問題時,常見現象有:

  • 網卡顯示未連線
  • Switch Port 沒有 Link
  • 介面持續 Up/Down
  • 無線訊號太弱
  • 傳輸時出現大量錯誤
  • 設備完全無法被管理
  • AP 或 IP Phone 沒有電

實體層怎麼檢查?

可以先確認:

  1. 設備是否供電
  2. 網路線兩端是否插緊
  3. 網卡與 Switch Port 是否有 Link
  4. Port 是否被 Shutdown
  5. 換一條已知正常的線是否恢復
  6. 換一個設定相同的正常 Port 是否恢復
  7. 介面是否有持續增加的錯誤
  8. 無線訊號與干擾是否合理

實體層最常見的陷阱,是工程師覺得問題不可能那麼簡單,因此直接跳過。

結果查了半小時 VLAN 和 Firewall,最後發現網路線被清潔阿姨移動設備時拉鬆。

技術難度沒有很高,精神傷害倒是相當完整。


Layer 2:Data Link 資料連結層

資料連結層負責同一個 Layer 2 網路中的 Frame 傳遞。

常見概念包括:

  • MAC Address
  • Ethernet Frame
  • Switch
  • VLAN
  • Access Port
  • Trunk Port
  • 802.1Q
  • STP
  • Port Security
  • MAC Address Table

這一層出問題時,可能出現:

  • 同 VLAN 的設備無法互通
  • Client 被放進錯誤 VLAN
  • 特定 VLAN 無法通過 Trunk
  • MAC Address 學到錯誤介面
  • Port 因安全機制被封鎖
  • STP 將介面置於 Blocking
  • 網路 Loop 導致大量 Broadcast

Layer 2 排錯可以看什麼?

先確認:

  • Switch Port 是 Access 還是 Trunk
  • Access VLAN 是否正確
  • Trunk 是否允許目標 VLAN
  • Native VLAN 是否一致
  • MAC Address Table 是否學到 Client
  • Port Security 是否發生 Violation
  • STP 狀態是否正常
  • 是否出現 MAC Flapping

假設 Client 應該位於 VLAN 20,實際 Port 卻被設定成 VLAN 30,它可能拿到完全不同網段的 IP。

網路線有 Link、DHCP 也成功,表面看起來沒有壞,但所有流量都進入錯誤的邏輯網路。

這也是為什麼「有 IP」不等於「網路設定正確」。


Layer 3:Network 網路層

網路層負責讓封包跨越不同網段。

常見內容包括:

  • IPv4、IPv6
  • Subnet Mask
  • Default Gateway
  • Routing Table
  • Router
  • Layer 3 Switch
  • ICMP
  • ARP 與 Neighbor Discovery
  • Static Route
  • Dynamic Routing

這一層出問題時,常見現象包括:

  • 同網段可以連,跨網段不行
  • 可以連 Gateway,不能連遠端
  • 封包走錯出口
  • VPN 連線後找不到內部網段
  • 只有去程,沒有回程
  • 多網卡主機選錯 Route
  • Traceroute 在某個節點後停止

Layer 3 排錯常用問題

  • Client IP 是否正確?
  • Subnet Mask 是否合理?
  • Default Gateway 是否正確?
  • Gateway 是否可達?
  • Routing Table 是否包含目的網段?
  • Next Hop 是否能到達?
  • 目的端是否有回程路由?
  • 是否存在更精確或 Metric 更低的錯誤 Route?
  • VPN 是否正確派送企業網段?

例如 Client 是:

10.10.20.35/24

它要連:

10.10.50.10

兩者不在同一個 /24 網段,因此 Client 會把封包交給 Default Gateway。

如果 Gateway 填錯,即使 Client 可以和同網段設備互通,也無法跨到 Server VLAN。


Layer 4:Transport 傳輸層

傳輸層常見的兩個 Protocol 是:

  • TCP
  • UDP

這一層也包含 Port Number,例如:

服務 常見 Port
DNS TCP/UDP 53
HTTP TCP 80
HTTPS TCP 443
SSH TCP 22
RDP TCP 3389
DHCP UDP 67、68
SNMP UDP 161
NTP UDP 123

Layer 4 出問題時,可能出現:

  • Ping 成功,但網站打不開
  • Server 可達,但 RDP 無法連線
  • 只有特定 Port 被擋
  • TCP Connection 被拒絕
  • Firewall 沒有允許服務流量
  • Server 沒有監聽對應 Port

Ping 成功,不代表服務可以使用

Ping 通常使用 ICMP。

網站則可能使用 TCP 443。

因此:

Ping Server:成功

只能證明某種 ICMP 流量收到回覆,不能證明 HTTPS 正常。

反過來,Ping 失敗也不代表網站一定失敗,因為有些 Server 或 Firewall 會封鎖 ICMP,卻允許 TCP 443。

這時應該直接測試目標服務。

Windows PowerShell 可以使用:

Test-NetConnection 10.10.50.10 -Port 443

Linux 可以使用:

nc -vz 10.10.50.10 443

或:

curl -I https://10.10.50.10

每個工具驗證的內容不完全相同。

Test-NetConnectionnc 比較偏向 TCP 連線;curl 則會繼續測試 TLS 與 HTTP 回應,已經開始往應用層前進。


Layer 5:Session 工作階段層

Session Layer 關心兩個端點之間的工作階段如何建立、維持與終止。

現代網路裡,它經常和其他層一起實作,不一定能在設備介面裡找到一個明確的「Session Layer 按鈕」。

實務上可以從以下問題理解:

  • 使用者登入後 Session 是否成功建立?
  • VPN Session 是否持續存在?
  • RDP Session 是否中斷?
  • 應用 Token 是否過期?
  • 連線閒置後是否被 Timeout?
  • Load Balancer 是否把請求送到不同後端?
  • NAT/Firewall Session 是否仍然存在?

例如網站首頁可以開,但使用者登入後立刻被踢回登入頁。

底層網路、TCP 與 HTTPS 可能都正常,問題可能出在:

  • Session Cookie
  • Token
  • Load Balancer Persistence
  • 後端 Session Store
  • 應用 Timeout
  • 使用者端時間

這時繼續換網路線,多少有點為難網路線了。


Layer 6:Presentation 表示層

Presentation Layer 關心資料的格式、編碼、壓縮與加密。

常見內容包括:

  • TLS/SSL
  • 憑證
  • 字元編碼
  • 資料序列化
  • 壓縮格式
  • 加解密

這一層的常見問題有:

  • HTTPS 憑證過期
  • 憑證名稱不符
  • Client 不信任企業 CA
  • TLS 版本不相容
  • 加密套件不相容
  • 網頁出現亂碼
  • 傳輸內容無法被正確解析

例如:

TCP 443:連線成功
瀏覽器:顯示憑證不受信任

這時網路與 TCP 可能沒有問題。

應檢查:

  • 憑證有效期限
  • Common Name/SAN
  • Client 系統時間
  • Root CA
  • Intermediate CA
  • TLS Version
  • Server 是否提供完整憑證鏈

若只是為了讓畫面消失,就叫使用者按下「繼續前往不安全網站」,雖然很快,但等於把安全機制當成煩人的彈窗。

它會跳出來,通常是有原因的。


Layer 7:Application 應用層

Application Layer 是最接近使用者的一層。

常見 Protocol 與服務包括:

  • HTTP/HTTPS
  • DNS
  • SMTP
  • FTP/SFTP
  • SSH
  • RDP
  • SNMP
  • DHCP
  • 各種企業應用系統

這一層出問題時,常見現象包括:

  • 網站回傳 HTTP 500
  • 帳號無法登入
  • DNS 查不到 Record
  • 郵件寄送失敗
  • ERP 某個功能不能用
  • API 回傳錯誤
  • 服務相依的資料庫無法使用
  • 使用者缺少權限

如果網站 TCP 443 可以連、TLS 也正常,但登入後出現:

Internal Server Error

那麼問題可能在:

  • Web Application
  • API
  • Database
  • 檔案權限
  • 應用設定
  • 後端相依服務

此時網路團隊能證明連線路徑正常,但不能因此說「反正網路沒問題,結案」。

對使用者而言,服務仍然不能用。

更好的做法是整理測試證據,轉交應用負責團隊:

Client 至 Server TCP 443 正常,TLS Handshake 成功;登入請求於 10:32 收到 HTTP 500,Request ID 為 ABC123,請協助確認後端應用與資料庫 Log。

這才是在職場中健康的合作方式。


三種常見的分層排錯方式

OSI 模型不是只能從第一層一路查到第七層。

實務上可以依情況選擇不同策略。


方法一:Bottom-up

從底層往上檢查:

L1 → L2 → L3 → L4 → L7

適合:

  • 問題描述非常模糊
  • 完全無法連線
  • 沒有取得 IP
  • 網卡顯示未連接
  • 整個區域斷線
  • 剛完成設備安裝

例如 Client 完全沒有網路,可以先看 Link、VLAN、IP、Gateway,再往 DNS 和應用檢查。

優點是不容易漏掉基本條件。

缺點是如果問題明顯只發生在某個應用,仍從網路線開始查,效率會比較低。


方法二:Top-down

從應用層往下檢查:

Application → DNS/TLS → Port → IP → Link

適合:

  • 只有特定系統異常
  • 其他網路服務正常
  • 已知底層連線大致正常
  • 問題與帳號或應用功能有關

例如所有網站都正常,只有 ERP 某個功能出錯,可以先看:

  • 應用錯誤訊息
  • 使用者權限
  • API
  • Server Log
  • Database

而不是先替使用者更換網路線。


方法三:Divide and Conquer

先從中間某一層測試,再根據結果決定往上或往下。

例如:

  1. 先 Ping Default Gateway
  2. Gateway 不通,往 L1~L3 的本地網路查
  3. Gateway 正常,再 Ping 遠端 IP
  4. 遠端 IP 不通,查 Routing/Firewall
  5. 遠端 IP 正常,再測 TCP 443
  6. TCP 正常,再查 DNS、TLS 或應用

這種方法每次都把範圍大致切成兩半,通常比從頭到尾完整跑一次更有效率。

但前提是你要理解每個測試能證明什麼,不能證明什麼。


實際案例:內部網站打不開

假設使用者回報:

「內部網站不能用。」

已知資訊:

  • 只有一台 Client 發生
  • 同部門其他使用者正常
  • Client 連接有線網路
  • 瀏覽器顯示無法連線

接著按照分層檢查。


Layer 1:確認實體連線

  • 網卡顯示已連線
  • Switch Port Up
  • 沒有持續增加的實體錯誤

目前沒有明顯 L1 問題。


Layer 2:確認 VLAN

  • Client 所接 Port 位於 VLAN 20
  • MAC Address 出現在正確介面
  • 正常 Client 也位於 VLAN 20

L2 大致正常。


Layer 3:確認 IP 與路由

Client 設定為:

IP:10.10.20.35/24
Gateway:10.10.20.1
DNS:10.10.10.53

測試結果:

Ping 10.10.20.1:成功
Ping 10.10.50.10:成功

代表本地 Gateway 與遠端 Server IP 可達。


Layer 4:確認服務 Port

測試:

Test-NetConnection 10.10.50.10 -Port 443

結果成功。

表示 TCP 443 可以建立連線。


上層:確認名稱與應用

測試:

nslookup intranet.example.local

結果卻顯示 DNS Query Timeout。

此時問題已經縮小到 DNS 路徑。

進一步查看後發現,Client 的 DNS 被手動改成公共 DNS,因此無法解析企業內部 Zone。

將它恢復成公司 DNS 後,網站正常開啟。


這個案例告訴我們什麼?

如果一開始只看到「網站打不開」,可能會:

  • 重裝瀏覽器
  • 清除網站快取
  • 重啟 Web Server
  • 修改 Firewall
  • 重新插網路線

但按照分層檢查後,可以知道:

  • L1:正常
  • L2:正常
  • L3:正常
  • L4:正常
  • DNS:異常

每一層的成功測試,都在排除一部分可能性。

最後找到 DNS 問題,不是因為運氣好猜中,而是證據將我們帶到那裡。


建立自己的 OSI 排錯工具箱

可以把常用工具依用途整理起來。

Layer 1~2

  • 介面燈號
  • 網路線測試器
  • Switch Interface Status
  • Interface Counter
  • MAC Address Table
  • VLAN 查詢
  • STP 狀態
  • LLDP/CDP

Layer 3

  • ipconfig
  • ip addr
  • ping
  • arp
  • ip neigh
  • route print
  • ip route
  • tracert
  • traceroute

Layer 4

  • Test-NetConnection
  • nc
  • telnet
  • ss
  • netstat
  • Firewall Session/Log

應用層

  • nslookup
  • dig
  • curl
  • 瀏覽器開發者工具
  • Event Viewer
  • journalctl
  • 應用程式 Log
  • Server Health Check

工具不需要一次全部背起來。

比較重要的是知道:

我現在想驗證哪一件事,而哪個工具能提供需要的證據?

同一個 Ping 指令用得再熟,也不能拿來證明所有網路功能。


不要把 OSI 模型用得太死

OSI 模型很好用,但現實中的故障可能跨越多層。

例如:

網路線品質不良

起因位於 Layer 1,卻可能造成:

  • Packet Loss
  • TCP Retransmission
  • 網站載入緩慢
  • VPN 中斷
  • 應用程式 Timeout

最後使用者看到的是 Layer 7 的症狀。

DNS Record 錯誤

起因位於應用服務,使用者卻可能說:

「網路連不到伺服器。」

防火牆阻擋 TCP 443

Layer 3 的 IP 可能正常、Ping 也成功,但應用仍然無法使用。

因此,OSI 模型的目標不是強迫每個問題只能住在一層,而是協助我們整理:

  • 哪些條件已經成立
  • 哪些測試尚未完成
  • 下一步應該往上還是往下
  • 症狀可能由哪個底層原因造成

Day.5 小結:七層不是拿來背,是拿來縮小範圍

OSI 模型真正的價值,不是讓我們在面試時快速回答 Layer 3 是什麼。

它能幫助我們在事故現場保持順序:

  • 沒有 Link,先別查 DNS
  • 沒有正確 VLAN,先別怪 Server
  • Ping 成功,不代表 TCP Port 正常
  • TCP 連線成功,不代表應用功能正常
  • 網站錯誤,也可能源自更底層的丟包

排錯時可以採用:

  • Bottom-up
  • Top-down
  • Divide and Conquer

選擇哪一種方法,取決於目前掌握的線索。

只要每一次測試都清楚知道自己在驗證哪一層,就不會陷入「什麼都試過了,但還是不知道為什麼」的狀態。


上一篇
Day.4|從網路拓撲開始:先搞懂封包要去哪裡
下一篇
Day.6|第一層就翻車:網路線、燈號與實體連線
系列文
連網路壞在哪都不知道,怎麼成為系統網路工程師?11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言