National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 72 24°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 14

ICMP 與網路診斷

ping、traceroute,以及由下往上的排錯流程
Interaction 25 minute(s)

Learning Objectives

  • 說明 ICMP 在 IP 網路裡負責回報錯誤與診斷,並認得 echo、目的地無法到達、逾時三種常見訊息
  • 讀懂 ping 的輸出:序號、TTL、來回時間與遺失率各代表什麼
  • 分辨「有設備回報無法到達」和「完全沒有回應」兩種失敗,推論問題可能在哪裡
  • 依照由下往上的順序排錯:實體連線、位址與遮罩、閘道、DNS、路由與回程、防火牆
  • 在模擬網路裡用 show、ping、nslookup、traceroute 找出並修好設定錯誤

IP 送丟了封包,誰來告訴你

IP 只負責「盡力」把封包送到目的地,路上出了問題,封包就被丟掉。可是被丟掉的原因很多: 沒有路由、目的主機不存在、TTL 用完了。如果什麼訊息都沒有,送出的人只會一直等,不知道該修哪裡。

ICMP(Internet Control Message Protocol,網際網路控制訊息協定)就是負責回報這些狀況的協定,定義在 RFC 792(1981 年)。 ICMP 訊息也裝在 IP 封包裡送出(IP 標頭的協定欄位是 1),由出問題的那台設備送回給原本的來源。

類型 名稱 誰送出 什麼時候
8 echo request(回音請求) ping 的來源 想知道對方在不在、路通不通
0 echo reply(回音回覆) 目的地 收到 echo request 時回覆
3 destination unreachable(目的地無法到達) 路由器或目的主機 code 0:網路無法到達(沒有路由);code 1:主機無法到達(問不到 MAC);code 3:連接埠無法到達(對方沒有程式在用這個 UDP 埠)
11 time exceeded(逾時) 路由器 TTL 減到 0,封包被丟掉

兩件事要記住:

  • 錯誤訊息裡會附上出問題那個封包的 IP 標頭與開頭的一段資料,來源才知道是哪一個封包、送給誰的出了事。
  • ICMP 錯誤訊息本身出問題時,不會再回報,不然兩台設備可能互相回報、沒完沒了。

ICMP 屬於網路層的輔助協定,沒有連接埠號碼。IPv6 也有自己的 ICMPv6,角色相同,還多負責了鄰居探索(取代 ARP)。

互動練習:三種 ping 的結果

路徑上的兩台路由器都已經設好路由。在 PC1 ping 三個不同的位址,比較輸出有什麼不一樣, 再看下方封包紀錄:回報錯誤的 ICMP 封包是誰送出的。

讀懂 ping 的輸出

模擬器的輸出比較精簡。實際系統的 ping(以 Linux 為例,各作業系統的格式略有不同)長這樣:

$ ping -c 3 192.0.2.10
PING 192.0.2.10 (192.0.2.10) 56(84) bytes of data.
64 bytes from 192.0.2.10: icmp_seq=1 ttl=62 time=1.42 ms
64 bytes from 192.0.2.10: icmp_seq=2 ttl=62 time=1.38 ms
64 bytes from 192.0.2.10: icmp_seq=3 ttl=62 time=1.40 ms

--- 192.0.2.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.380/1.400/1.420/0.016 ms
欄位 意思 怎麼用
icmp_seq 第幾個 echo request 序號跳號(1、2、4)表示中間那個沒有收到回覆
ttl 回覆抵達時剩下的 TTL 初始值常見 64 或 128,相減可以估計經過幾台路由器
time 來回時間(RTT) 同一個區域網路通常在幾毫秒內;忽大忽小可能是線路壅塞
packet loss 遺失率 偶爾遺失可能是壅塞或無線訊號差;100% 表示完全沒有回覆

ping 失敗時有兩種很不一樣的情況:

你看到的 代表 下一步
From 10.0.0.2 … Destination Host Unreachable 路上有設備回報:送到那裡就過不去了 去那台設備看路由表、ARP,或目的主機是否存在
沒有任何回覆行,最後 100% packet loss 沒有人回報:封包或回覆在某處被默默丟掉 可能是回程沒有路由、防火牆擋掉 ICMP、對方主機關機;用 traceroute 找停在哪一跳

另外兩個常見的誤會:

  • ping 不通,不代表對方壞了。 很多伺服器與防火牆會擋掉 echo request,網頁照樣能開。
  • ping 得通,不代表服務正常。 ping 只證明 IP 這一層通了,網頁伺服器有沒有在跑、TCP 80 有沒有被擋,要用 http 或瀏覽器另外測。

traceroute 的原理在第 9 課學過:依序送出 TTL 1、2、3… 的封包,讓路上每台路由器回報「逾時」(類型 11),最後由目的地回覆。 某一行是 * 但後面的行正常,表示那一跳沒有回報;從某一行開始全部是 *,就要懷疑那附近的路由,特別是回程。

小測驗:ICMP 與 ping

1.

traceroute 能找出路徑上的每一台路由器,靠的是哪一種 ICMP 訊息?

2.

ping -c 5 的輸出只有 icmp_seq=1、2、3、5 四行,統計寫 20% packet loss。哪一個說法正確?

3.

PC 執行 ping 後看到 From 10.0.0.2 icmp_seq=1 Destination Host Unreachable。這行是誰送給你的?

第 1 次作答

由下往上排錯

「網路不通」可能是任何一層出了問題。與其亂猜,不如照分層的順序由下往上一層一層排除。 每一步都只回答一個問題,確認沒問題再往上走:

順序 檢查什麼 怎麼檢查(本模擬器的指令) 常見的錯
1 實體連線 線有沒有接、介面有沒有連線燈號、Wi-Fi 有沒有連上 看燈號與介面狀態;show ip 會標出「介面未連線」,link <介面> up 把線接回去 線沒插好、接錯埠、介面被關閉
2 位址與遮罩 自己的位址和前綴是否落在正確的網段 show ip,和同網段運作正常的電腦比較 位址打錯、遮罩錯、DHCP 沒拿到位址
3 閘道 能不能到達預設閘道 ping <閘道> 閘道寫錯、閘道不在自己的網段
4 DNS 名稱能不能查到位址 nslookup <名稱>;比較「用 IP 通、用名稱不通」 DNS 伺服器位址打錯、伺服器沒有這筆紀錄
5 路由與回程 封包到得了對方、回覆回得來嗎 ping <遠端 IP>、traceroute、各路由器的 show route 少了去程或回程的路由
6 防火牆 某一種流量是否被擋 ping 通、但 http 不通;show acl 規則擋掉需要的埠,或順序寫錯

順序的道理:上層依賴下層。位址設錯時連閘道都到不了,查 DNS 只是白費力氣; 而第 4 步把「名稱的問題」和「路的問題」分開:用 IP 位址能通、用名稱不通,就是 DNS;用 IP 位址也不通,就繼續往路由找。

實際排錯時常常先做一個「跳到中間」的測試,例如直接 ping 遠端的 IP:通了,下面幾層都沒問題,往上找;不通,再往下逐層檢查。 不管從哪裡開始,每次只改一個設定、改完馬上再測,才知道是哪一個修改解決了問題。

互動練習:找出藏在網路裡的四個錯誤

社團的 PC1 打不開社團網站 www.club.tw,同一個網段的 PC2 一切正常。這個網路裡藏了四個錯誤。 依照由下往上的順序檢查,每一個任務修好一個;PC2 是很好的對照組,可以用 show ip 比較兩台的設定。 交換器、DNS 伺服器與網頁伺服器已經鎖定,不需要改。

小測驗:排錯的順序

1.

PC 的位址是 192.168.1.10/24,預設閘道設成 192.168.2.1。ping 任何其他網段都失敗。問題在哪一步?

2.

ping 203.0.113.80 成功,但 ping www.example.com 顯示找不到主機。最該先檢查什麼?

3.

可以 ping 通網頁伺服器,瀏覽器卻連不上它的網頁。哪一個推論最合理?

4.

筆電接上有線網路後什麼都不通,show ip 顯示介面「沒有位址」,網路孔的連線燈號也沒亮。最先做什麼?

第 1 次作答

重點整理

  • ICMP 由發現問題的設備送回來源,負責回報錯誤與診斷:echo request/reply(ping)、目的地無法到達(類型 3)、逾時(類型 11,traceroute 靠它)。
  • 讀 ping:icmp_seq 跳號=遺失、ttl 估計經過幾台路由器、time 是來回時間、最後看遺失率。
  • 「有設備回報無法到達」告訴你停在哪裡;「完全沒有回應」要懷疑回程路由、防火牆或對方沒開機。
  • ping 不通不一定是壞了(可能擋 ICMP),ping 通也不代表服務正常(還要測 TCP)。
  • 排錯由下往上:實體連線 → 位址與遮罩 → 閘道 → DNS → 路由與回程 → 防火牆;每次只改一個設定,改完馬上再測。

到這裡,封包已經能在網路之間正確來回。下一課往上一層到傳輸層:同一台電腦上有很多程式同時連網,收到的資料要交給哪一個程式?答案是連接埠,以及最簡單的傳輸協定 UDP。

這一課完成了!
Next lesson:UDP 與連接埠
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。