Nền tảng Mạng máy tính
11/17
Bài 11 / 17~8 phútĐịa chỉ & Định tuyếnMiễn phí… lượt xem

ICMP & chẩn đoán — ping và traceroute thực sự làm gì

ICMP đứng sau ping và traceroute: echo request/reply, mẹo TTL, các message lỗi, và vì sao ping được không có nghĩa app chạy được.

TL;DR: ICMP không phải TCP/UDP, mà là giao thức điều khiển và báo lỗi ở tầng Internet. ping dùng ICMP echo request/reply để đo "máy còn sống + RTT". traceroute dùng mẹo TTL: gửi gói TTL=1, 2, 3… mỗi router giảm TTL, khi về 0 router gửi lại ICMP time exceeded → lộ ra từng hop. Các message như destination unreachable (host/port unreachable) cho biết vì sao gói không tới. Quan trọng: ping được ≠ app chạy được — ping chỉ kiểm tra tầng Internet, không đụng TCP/TLS/HTTP, và firewall thường chặn ICMP nên ping fail chưa chắc do dịch vụ chết.

ping google.com trả về vài chục ms, ngon lành. Nhưng ping server-cua-ban.com lại Request timeout, dù web của server đó vẫn mở bình thường trên trình duyệt. Vậy ping thực sự đo cái gì, và một kết quả ping nói (và không nói) lên điều gì?

Bài này giải thích ICMP, giao thức đứng sau ping và traceroute, và cách dùng chúng để chẩn đoán đúng thay vì kết luận vội.

Nhớ lại — mo hinh tcp ip 4 tang

Ôn lại kiến thức nền tảng từ bài mo hinh tcp ip 4 tang trước khi đi sâu vào nội dung bài học này.

1. Analogy — phiếu báo lỗi của bưu điện

Bạn gửi một lá thư. Nếu giao được, bưu điện im lặng; bên nhận muốn trả lời thì tự viết thư khác. Nhưng nếu không giao được, bưu điện không gửi thư trả lời hộ ai cả. Nó gửi về cho bạn một phiếu báo riêng, ghi rõ lý do: "địa chỉ không tồn tại", "quá số lần chuyển tiếp, thư bị huỷ". Phiếu báo không phải thư; nó là kênh riêng để hệ thống nói với bạn chuyện gì đã xảy ra với thư.

Còn muốn biết địa chỉ kia có người ở không mà chưa có gì để gửi, bạn gửi một bưu thiếp trống, chỉ xin một chữ ký nhận. Ký nhận về là biết có người, và biết mất mấy ngày.

Bưu điệnICMP
Lá thưGói IP
Phiếu báo lỗi (kênh riêng, không phải thư)ICMP error message
"Quá số lần chuyển tiếp, thư bị huỷ"Time exceeded (TTL về 0)
Bưu thiếp xin chữ ký nhậnEcho request / reply (ping)

2. ICMP là gì — không phải TCP/UDP

ICMP (Internet Control Message Protocol) sống ở tầng Internet, cạnh IP, không phải tầng Transport như TCP/UDP. Nó không chở dữ liệu ứng dụng; nhiệm vụ của nó là báo trạng thái và lỗi về cho bên gửi: "đích không tới được", "gói sống quá lâu, đã huỷ", "máy còn đó không?".

Vì ICMP không có port (không thuộc Transport), nó không gắn với một ứng dụng cụ thể nào. Vì thế ping kiểm tra được "máy có sống" mà không cần biết máy đó chạy dịch vụ gì.

3. ping — echo request / reply

ping gửi một ICMP echo request; máy đích (nếu trả lời) gửi lại echo reply. Thời gian khứ hồi (gửi đi rồi nhận lại) gọi là RTT (Round-Trip Time), tức con số time=24ms bạn thấy.

Sơ đồ tuần tự ping: máy bạn gửi ICMP echo request hỏi còn sống không, máy đích trả ICMP echo reply — RTT là khoảng thời gian từ lúc gửi request tới lúc nhận reply, chính là con số time bằng 24 ms

Bash
ping google.com
# 64 bytes from ... time=24.3 ms
# 64 bytes from ... time=23.8 ms

Ping thành công cho biết: gói tới được đích ở tầng Internet và quay về, tức định tuyến + máy đích cơ bản OK. Nó không cho biết web server, database hay TLS có hoạt động không.

4. traceroute lộ ra từng router bằng cách nào?

Mỗi gói IP có trường TTL (Time To Live): qua mỗi router, TTL giảm 1; khi TTL = 0, router huỷ gói và gửi lại ICMP time exceeded cho người gửi (cơ chế chống gói chạy vòng vô tận).

traceroute lợi dụng điều đó để ép từng router tự lộ diện:

Sơ đồ tuần tự traceroute với bốn cột máy bạn, router 1, router 2 và đích: gói 1 TTL bằng 1 chết ở router 1 và nhận time exceeded; gói 2 TTL bằng 2 đi lọt router 1 rồi chết ở router 2; gói 3 TTL bằng 3 tới đích và được trả lời — mỗi time exceeded lộ ra một router, ghép lại là danh sách hop

  • Gói TTL=1 → router đầu tiên giảm còn 0 → gửi lại "time exceeded" → ta biết hop 1.
  • Gói TTL=2 → đi qua hop 1 (còn 1), tới hop 2 thành 0 → "time exceeded" → biết hop 2.
  • Tăng dần TTL tới khi gói chạm đích. Ghép lại = toàn bộ danh sách hop (như bài routing đã thấy).

5. Đọc các ICMP error message

Khi gói không tới đích, ICMP báo về lý do. Các loại hay gặp:

ICMP messageNghĩaGợi ý
Echo replyMáy còn sốngTầng Internet OK
Time exceededTTL về 0 dọc đườngDùng cho traceroute; hoặc loop định tuyến
Destination host unreachableTới được mạng nhưng không thấy hostHost tắt / sai IP / ARP fail
Destination net unreachableKhông có route tới mạng đíchThiếu route / gateway sai
Destination port unreachableTới host nhưng không ai nghe cổng đó (thường UDP)Service chưa chạy / sai cổng
Fragmentation neededGói lớn hơn MTU (Maximum Transmission Unit, kích thước gói tối đa một chặng cho qua), cấm phân mảnhVấn đề MTU (module TCP sau)

Đọc đúng message tiết kiệm hàng giờ debug: net unreachable chỉ về routing/gateway, còn port unreachable chỉ về dịch vụ/cổng.

Thử ngẫmbạn ping một máy cùng LAN và nhận Destination host unreachable gần như ngay lập tức, khác hẳn kiểu timeout chờ lâu. Phản hồi tức thì đó gợi ý điều gì đang xảy ra ở tầng bên dưới?

6. Chẩn đoán đúng — ping được ≠ app chạy

Đây là điểm dễ sai nhất. ping chỉ chạm tầng Internet (ICMP); nó không mở TCP, không chạy TLS, không gửi HTTP. Vậy nên:

  • Ping được nhưng app timeout: bình thường. Có thể service chưa chạy, sai cổng, firewall chặn cổng TCP (nhưng cho ICMP qua), hay TLS hỏng.
  • Ping fail nhưng web vẫn mở: rất hay gặp, vì nhiều server/firewall chặn ICMP vì lý do an ninh, nên ping timeout dù dịch vụ HTTP/HTTPS chạy tốt. Đừng kết luận "server chết" chỉ vì ping fail.

Thử ngẫmping tới server thấy reply đều 20 ms, traceroute cũng chạm đích, nhưng curl https://server treo rồi timeout. Theo mô hình tầng, lỗi còn có thể nằm ở những chỗ nào mà cả hai công cụ ICMP đều không nhìn thấy?

📌 Nối lại Module 1

Nhớ pitfall ở Module 1: "ping được nên lỗi do code". Giờ bạn hiểu cơ chế: ping kiểm tra tầng Internet bằng ICMP, hoàn toàn tách biệt với tầng Transport/Application nơi app thật sự chạy. Quy trình đúng: ping (mạng tới được chưa?) → traceroute (tắc ở hop nào?) → rồi mới test đúng cổng/dịch vụ bằng nc/curl (module sau).

7. Pitfall — hiểu nhầm thường gặp

❌ Nhầm 1: "Ping fail = server chết." ✅ Rất nhiều server/firewall chặn ICMP chủ động. Ping fail có thể chỉ là ICMP bị chặn trong khi HTTP/HTTPS vẫn chạy. Kiểm tra bằng đúng giao thức của dịch vụ (curl), đừng dựa mỗi ping.

❌ Nhầm 2: "Ping được nghĩa là dịch vụ sẵn sàng." ✅ Ping chỉ chứng minh máy sống ở tầng Internet. Cổng dịch vụ có mở, app có chạy hay TLS có hợp lệ thì phải test riêng ở tầng Transport/Application.

❌ Nhầm 3: "traceroute thấy đủ mọi hop và luôn chính xác." ✅ Một số router không trả ICMP time exceeded (hiện * * *), và routing có thể bất đối xứng, nên traceroute chỉ phản ánh chiều đi tại thời điểm đo, không phải bản đồ tuyệt đối.

8. 📚 Deep Dive — tài liệu gốc

📚 Spec & reference chính thức

Đọc khi muốn tới gốc ICMP:

Ghi chú: ICMP nhỏ nhưng là "hệ thần kinh báo lỗi" của IP. ping/traceroute là hai công cụ debug đầu tiên ai cũng chạm; hiểu chúng làm gì giúp bạn đọc kết quả đúng thay vì đoán.

9. Tóm tắt

  • ICMP ở tầng Internet (không phải TCP/UDP, không có port), dùng để báo trạng thái/lỗi của IP.
  • ping = ICMP echo request/reply → "máy còn sống + RTT", chỉ kiểm tra tầng Internet.
  • traceroute dùng mẹo TTL: tăng dần TTL, mỗi router hết TTL gửi lại time exceeded → lộ từng hop.
  • Đọc message: net unreachable → routing/gateway; host unreachable → host/ARP; port unreachable → dịch vụ/cổng; fragmentation needed → MTU.
  • Ping được ≠ app chạy, và ping fail ≠ server chết (firewall hay chặn ICMP). Phải test đúng giao thức dịch vụ.

10. Tự kiểm tra

Tự kiểm tra
0/6 câu đã trả lời
  1. Q1
    ICMP khác TCP/UDP ở chỗ nào về vai trò và vị trí trong mô hình tầng?
  2. Q2
    Giải thích mẹo TTL mà traceroute dùng để lộ ra từng router.
  3. Q3
    Bạn ping một server thì timeout, nhưng mở web của nó trên trình duyệt vẫn vào được. Giải thích vì sao, và bài học rút ra.
  4. Q4
    Phân biệt 'destination net unreachable' và 'destination port unreachable': mỗi cái chỉ về vấn đề ở đâu?
  5. Q5
    Một quy trình chẩn đoán mạng hợp lý đi theo thứ tự nào, và vì sao không dừng ở ping?
  6. Q6
    Vì sao traceroute đôi khi hiện * * * ở một số hop, và điều đó có nghĩa mạng hỏng không?

Bài tiếp theo: Module 2 — Tổng kết & cheat sheet

Bài này có giúp bạn hiểu bản chất không?

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Module 2 — Tổng kết & cheat sheet