Trong hành trình vận hành hạ tầng mạng và xử lý sự cố máy chủ, chắc hẳn bạn đã không ít lần gặp tình huống dở khóc dở cười: máy chủ vẫn phản hồi tín hiệu ping nhưng các dịch vụ ứng dụng lại chập chờn, hoặc độ trễ mạng bỗng nhiên tăng đột biến mà không rõ nguyên nhân xuất phát từ đâu. Lúc này, việc thành thạo lệnh traceroute chính là chìa khóa vàng giúp bạn vén bức màn bí ẩn của các chặng định tuyến trung gian, xác định chính xác vị trí gói tin bị nghẽn hay rớt mạng trên toàn bộ hành trình truyền tải.

Thực tế thì lệnh traceroute là một trong những công cụ chẩn đoán mạng nền tảng lâu đời và mạnh mẽ nhất trên các hệ điều hành Unix và Linux. Thay vì chỉ kiểm tra tính thông suốt hai đầu như ping, tiện ích lệnh traceroute vẽ ra toàn bộ lộ trình từng bước nhảy (hop) mà gói tin phải vượt qua trước khi chạm đến máy chủ đích. Trong bài viết chuyên sâu này, Cypher sẽ hướng dẫn bạn chi tiết từ nguyên lý trường TTL cốt lõi, cách dùng traceroute chuẩn xác, cho đến việc giải mã các ký hiệu bí ẩn giúp bạn làm chủ kỹ năng chẩn đoán mạng với traceroute trong thực tế.

Lệnh traceroute là gì và vai trò cốt lõi trong xử lý sự cố mạng

Về mặt bản chất kỹ thuật, lệnh traceroute là một tiện ích dòng lệnh dùng để theo dõi đường đi của các gói tin Internet Protocol (IP) từ máy tính nguồn đến một thiết bị mạng đích bất kỳ trên toàn cầu. Khác với công cụ ping thông thường vốn chỉ cho biết đích đến có phản hồi hay không, tiện ích lệnh traceroute liệt kê chi tiết từng router trung gian mà gói tin đi qua, kèm theo độ trễ khứ hồi (Round Trip Time) tại từng trạm kiểm soát.

Đối với các kỹ sư hệ thống, chuyên viên mạng và DevOps, lệnh traceroute đóng vai trò như một chiếc máy quét X-quang đường truyền. Khi dịch vụ Web hoặc cơ sở dữ liệu bị phàn nàn là tải chậm, việc chạy lệnh traceroute sẽ ngay lập tức chỉ rõ điểm nghẽn nằm ở mạng LAN nội bộ, ở nhà cung cấp dịch vụ Internet (ISP) trong nước hay ở tuyến cáp quang biển quốc tế. Nhờ đó, bạn có thể nhanh chóng quy trách nhiệm và đưa ra phương án chuyển hướng lưu lượng dự phòng kịp thời.

Bên cạnh việc phát hiện độ trễ cao, lệnh traceroute còn giúp phát hiện các lỗi cấu hình định tuyến nghiêm trọng như vòng lặp mạng (routing loop) hoặc hiện tượng định tuyến bất đối xứng (asymmetric routing). Để hiểu sâu hơn về cách thức các gói tin di chuyển và đóng gói qua các tầng giao thức, bạn có thể tham khảo thêm bài phân tích về tìm hiểu bộ giao thức mạng TCP/IP căn bản để củng cố nền tảng kiến thức hạ tầng.

Nguyên lý hoạt động của lệnh traceroute: Trường TTL và gói tin ICMP

Cơ chế hoạt động tài tình của lệnh traceroute không dựa trên một giao thức đặc biệt nào mà tận dụng một tính năng sẵn có trong tiêu chuẩn IP: trường Time to Live (TTL). TTL là một trường 8-bit trong tiêu đề gói tin IP, được thiết kế nguyên bản để ngăn chặn việc các gói tin bị lạc và chạy vòng lặp vô tận trên mạng Internet làm nghẽn băng thông toàn cầu.

Mỗi khi gói tin đi qua một router (một bước nhảy – hop), router đó bắt buộc phải giảm giá trị TTL đi 1 đơn vị. Khi giá trị TTL chạm mốc 0, router sẽ lập tức hủy bỏ gói tin và gửi ngược về cho máy tính nguồn một gói tin thông báo lỗi tiêu chuẩn giao thức ICMP theo RFC 792 của IETF mang mã Time-to-Live Exceeded (ICMP Type 11, Code 0). Tiện ích lệnh traceroute đã khéo léo biến cơ chế hủy gói tin này thành một công cụ định vị địa chỉ router vô cùng hiệu quả.

Bằng cách tăng dần trường TTL từ 1, 2, 3 cho đến khi chạm tới đích, lệnh traceroute buộc từng router trên đường đi phải tự khai báo danh tính của mình thông qua gói tin ICMP Time Exceeded.

Cụ thể, ở bước đầu tiên, lệnh traceroute gửi các gói tin có TTL = 1. Router đầu tiên (thường là default gateway của bạn) giảm TTL về 0, loại bỏ gói tin và gửi lại phản hồi ICMP. Lệnh traceroute ghi lại địa chỉ IP của gateway này cùng thời gian phản hồi. Tiếp theo, lệnh traceroute tăng TTL lên 2 để nhận phản hồi từ router thứ hai. Tiến trình này tiếp tục lặp lại tuần tự cho đến khi gói tin chạm đến đích cuối cùng hoặc đạt giới hạn số bước nhảy tối đa.

Bước lặp TTLGiá trị TTL gửi điThiết bị phản hồi ICMPMục đích của lệnh traceroute
Hop 1TTL = 1Default Gateway / Router cục bộXác định địa chỉ và độ trễ router đầu tiên
Hop 2TTL = 2Router biên của ISP cung cấp mạngĐo độ trễ kết nối từ nhà ra nhà mạng
Hop NTTL = NRouter trung gian trên tuyến đườngXác định từng trạm trung chuyển dữ liệu
Hop CuốiTTL = MaxMáy chủ đích cuối cùngĐích đến gửi phản hồi kết thúc lộ trình

Cài đặt traceroute trên các bản phân phối Linux phổ biến

Trên hầu hết các bản phân phối Linux hiện đại, gói công cụ traceroute Linux thường không được cài đặt sẵn mặc định trong các bản cài đặt tối giản (minimal install). Tuy nhiên, bạn có thể dễ dàng bổ sung tiện ích lệnh traceroute chỉ bằng một câu lệnh duy nhất thông qua trình quản lý gói phần mềm tương ứng của hệ điều hành.

Đối với các bản phân phối thuộc nhánh Debian như Ubuntu, Debian hay Linux Mint, bạn hãy cập nhật danh sách gói và tiến hành cài đặt tiện ích lệnh traceroute bằng công cụ apt quen thuộc. Quá trình này diễn ra cực kỳ nhanh chóng và không yêu cầu cài đặt thêm các dịch vụ phức tạp nào khác.

# Cập nhật kho gói và cài đặt traceroute trên Ubuntu / Debian
sudo apt update && sudo apt install -y traceroute

# Kiểm tra phiên bản sau khi cài đặt thành công
traceroute --version

Nếu bạn đang quản trị các máy chủ doanh nghiệp sử dụng họ Red Hat như CentOS, RHEL, Rocky Linux hay AlmaLinux, hãy sử dụng trình quản lý gói dnf hoặc yum để cài đặt lệnh traceroute:

# Cài đặt traceroute trên CentOS / RHEL / AlmaLinux / Rocky Linux
sudo dnf install -y traceroute

# Đối với các bản phân phối CentOS cũ
sudo yum install -y traceroute

Sau khi hoàn tất cài đặt, bạn đã sẵn sàng sử dụng lệnh traceroute để bắt đầu các tác vụ chẩn đoán hạ tầng mạng thực tế trên máy chủ của mình.

Cú pháp cơ bản và cách đọc kết quả traceroute chuẩn xác

Cú pháp khởi chạy cơ bản nhất của lệnh traceroute vô cùng đơn giản: bạn chỉ cần gõ tên lệnh kèm theo tên miền hoặc địa chỉ IP của máy chủ đích cần kiểm tra. Tiện ích sẽ tự động thực hiện truy vấn qua hệ thống phân giải tên miền DNS toàn tập để chuyển đổi tên miền thành địa chỉ IP trước khi phát gói tin.

# Cú pháp chạy cơ bản của lệnh traceroute đến tên miền đích
traceroute vnhte.com

# Chạy trực tiếp tới địa chỉ IP công cộng
traceroute 1.1.1.1

Dưới đây là một mẫu kết quả đầu ra thực tế khi bạn thực hiện cách dùng traceroute để kiểm tra đường truyền đến máy chủ Cloudflare:

traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  _gateway (192.168.1.1)  1.214 ms  1.182 ms  1.150 ms
 2  10.0.0.1 (10.0.0.1)  3.451 ms  3.420 ms  3.390 ms
 3  172.16.20.1 (172.16.20.1)  12.312 ms  12.280 ms  12.250 ms
 4  * * *
 5  one.one.one.one (1.1.1.1)  15.420 ms  15.380 ms  15.350 ms

Để đọc kết quả traceroute một cách chuyên nghiệp, bạn cần hiểu rõ ý nghĩa của từng trường thông tin hiển thị trên mỗi dòng kết quả của lệnh traceroute:

  • Cột 1 (Số thứ tự Hop): Đại diện cho giá trị TTL của gói tin, tương ứng với số bước nhảy router mà gói tin đã vượt qua.
  • Cột 2 (Hostname và IP): Tên máy chủ (Reverse DNS) và địa chỉ IP thực tế của router trung gian tại bước nhảy đó.
  • Cột 3, 4, 5 (Thời gian RTT): Mặc định lệnh traceroute gửi 3 gói tin thăm dò cho mỗi bước nhảy. Ba giá trị này thể hiện thời gian khứ hồi (tính bằng mili-giây) của từng gói tin tương ứng.

Việc hiển thị 3 kết quả đo độc lập trong lệnh traceroute giúp quản trị viên dễ dàng phát hiện hiện tượng chập chờn (jitter) hoặc mất gói tin cục bộ tại một điểm nút cụ thể trên đường truyền.

8 tùy chọn nâng cao khi sử dụng lệnh traceroute trên Linux

Trong môi trường thực tế, nếu chỉ chạy lệnh traceroute mặc định, bạn sẽ thường xuyên gặp phải tình trạng tiến trình chạy rất chậm hoặc bị chặn lại bởi các tường lửa dọc đường. Theo tài liệu hướng dẫn sử dụng traceroute trên Linux man-pages, phần mềm cung cấp rất nhiều tham số mạnh mẽ giúp bạn tùy biến luồng thăm dò linh hoạt.

1. Tùy chọn -n: Tắt phân giải tên miền ngược (Reverse DNS)

Mặc định, tại mỗi hop, lệnh traceroute sẽ cố gắng phân giải địa chỉ IP thành tên miền (Reverse DNS lookup). Nếu máy chủ DNS phản hồi chậm hoặc router không có bản ghi PTR, lệnh sẽ bị khựng lại vài giây ở mỗi bước nhảy. Thêm cờ -n sẽ yêu cầu lệnh traceroute chỉ in địa chỉ IP số thuần túy, giúp quá trình kiểm tra kết thúc nhanh gấp 5 đến 10 lần.

# Chạy traceroute không phân giải tên miền để tăng tốc độ tối đa
traceroute -n 8.8.8.8

2. Tùy chọn -m: Giới hạn số bước nhảy tối đa (Max Hops)

Mặc định, lệnh traceroute sẽ dò tìm tối đa 30 hops. Nếu bạn biết chắc chắn máy chủ đích nằm trong mạng nội bộ hoặc ở khoảng cách gần, việc để mặc định 30 hops có thể gây lãng phí thời gian khi gặp sự cố đứt mạng ở chặng cuối. Bạn có thể sử dụng cờ -m để giới hạn số bước nhảy phù hợp.

# Giới hạn số bước nhảy tối đa là 15 hops
traceroute -m 15 vnhte.com

3. Tùy chọn -w: Thiết lập thời gian chờ phản hồi (Timeout)

Thời gian chờ mặc định cho mỗi gói tin phản hồi là 5 giây. Khi gặp các router không phản hồi, bạn sẽ phải chờ khá lâu. Tham số -w cho phép bạn rút ngắn thời gian timeout (tính bằng giây) để lệnh traceroute hoàn tất nhanh chóng hơn.

# Đặt thời gian chờ phản hồi tối đa là 2 giây cho mỗi gói tin
traceroute -w 2 vnhte.com

4. Tùy chọn -q: Tùy chỉnh số lượng gói tin thăm dò trên mỗi hop

Thay vì gửi 3 gói tin thăm dò trên mỗi bước nhảy như mặc định, bạn có thể tăng lên 5 gói để đo độ ổn định chính xác hơn, hoặc giảm xuống 1 gói duy nhất nếu chỉ cần quét nhanh lộ trình với lệnh traceroute.

# Chỉ gửi 1 gói tin thăm dò cho mỗi bước nhảy
traceroute -q 1 vnhte.com

5. Tùy chọn -p: Chỉ định số hiệu cổng đích

Khi sử dụng phương thức thăm dò UDP mặc định, lệnh traceroute sẽ gửi đến dải cổng từ 33434 trở lên. Tùy chọn -p cho phép bạn chỉ định cổng khởi đầu hoặc cổng đích cụ thể để kiểm tra xem một dịch vụ riêng biệt có bị chặn đường hay không.

# Gửi gói tin thăm dò đến cổng 53 (DNS Service)
traceroute -p 53 8.8.8.8

6. Tùy chọn -I: Sử dụng gói tin ICMP Echo Request

Trên Linux, mặc định lệnh traceroute sử dụng gói tin UDP. Tuy nhiên, rất nhiều quản trị viên hệ thống cấu hình tường lửa chặn toàn bộ gói tin UDP lạ từ bên ngoài. Bằng cách thêm tùy chọn -I, lệnh traceroute sẽ chuyển sang sử dụng gói tin ICMP Echo Request (tương tự như lệnh ping), giúp tỷ lệ nhận phản hồi cao hơn đáng kể.

# Thăm dò bằng giao thức ICMP Echo Request (cần quyền root/sudo)
sudo traceroute -I vnhte.com

7. Tùy chọn -T: Sử dụng giao thức TCP SYN vượt tường lửa

Đây là vũ khí tối thượng của các kỹ sư DevOps khi cần kiểm tra đường truyền đến các máy chủ Web hoặc API. Rất nhiều hệ thống tường lửa doanh nghiệp chặn cả UDP lẫn ICMP, nhưng bắt buộc phải mở cổng 80 (HTTP) hoặc 443 (HTTPS) để phục vụ người dùng. Tùy chọn -T kết hợp cổng -p 443 cho phép lệnh traceroute đóng gói cờ TCP SYN để đi xuyên qua các lớp tường lửa kiên cố nhất.

# Thăm dò bằng gói tin TCP SYN nhắm vào cổng HTTPS 443
sudo traceroute -T -p 443 vnhte.com

8. Tùy chọn -i: Chỉ định giao diện mạng xuất phát (Interface)

Nếu máy chủ của bạn sở hữu nhiều card mạng vật lý (multi-homed server) hoặc đang kết nối các mạng ảo VPN, bạn có thể chỉ định chính xác giao diện mạng mà lệnh traceroute sử dụng để phát gói tin đi.

# Chỉ định phát gói tin traceroute qua card mạng eth1
sudo traceroute -i eth1 vnhte.com

So sánh 3 phương thức thăm dò: UDP vs ICMP vs TCP SYN

Một hiểu lầm kinh điển giữa những người mới làm quen với mạng máy tính là cho rằng lệnh traceroute trên mọi hệ điều hành đều giống nhau. Theo bách khoa toàn thư Wikipedia về tiện ích Traceroute, có sự phân hóa rõ rệt về phương thức thăm dò mặc định giữa các nền tảng công nghệ phổ biến.

Trên hệ điều hành Windows, công cụ tracert mặc định sử dụng hoàn toàn gói tin ICMP Echo Request. Trong khi đó trên Linux, tiện ích traceroute Linux nguyên bản lại ưu tiên sử dụng các gói tin UDP với dải cổng đích ngẫu nhiên từ 33434 đến 33534. Sự khác biệt này dẫn đến hiện tượng cùng một máy chủ đích, chạy lệnh trên Windows cho kết quả thông suốt nhưng chạy trên Linux lại bị nghẽn dấu hoa thị * * * do tường lửa trung gian chặn gói UDP.

Phương thức thăm dòCờ tham số trên LinuxGiao thức tầng TransportƯu điểm nổi bậtNhược điểm cần lưu ý
UDP TracerouteMặc định (không cần cờ)UDP (Port 33434+)Tiêu chuẩn Unix, không cần quyền rootThường xuyên bị tường lửa chặn
ICMP Traceroute-IICMP Echo (Type 8)Tương thích cao, giống Windows tracertCần quyền root, bị giới hạn rate limit
TCP SYN Traceroute-T -p <port>TCP (Port 80/443)Xuyên qua tường lửa Web/API xuất sắcCần quyền root, tốn tài nguyên hơn

Lời khuyên thực tế của Cypher là khi bạn thực hiện chẩn đoán mạng với traceroute trên máy chủ Linux, hãy luôn chạy thử nghiệm lần đầu với lệnh mặc định. Nếu thấy xuất hiện quá nhiều dấu sao timeout từ các trạm giữa, hãy chuyển sang cờ -I hoặc -T -p 443 để có được kết quả lộ trình chuẩn xác nhất.

Giải mã các ký hiệu đặc biệt và troubleshooting lỗi (* * *, !H, !N)

Trong quá trình đọc kết quả traceroute, bạn chắc chắn sẽ bắt gặp những biểu tượng viết tắt lạ mắt thay vì hiển thị địa chỉ IP hoặc thời gian mili-giây. Dưới đây là ý nghĩa chi tiết của từng mã cảnh báo chuẩn theo quy định từ danh mục tham số mã lỗi ICMP từ tổ chức IANA.

Ký hiệu đầu raÝ nghĩa kỹ thuậtNguyên nhân cốt lõi trong thực tế
* * * (Dấu ba sao)Request Timed OutRouter không phản hồi do chặn gói tin hoặc quá tải
!HHost UnreachableKhông tìm thấy máy chủ đích trong mạng con cục bộ
!NNetwork UnreachableBảng định tuyến không có đường đi đến dải mạng đích
!PProtocol UnreachableGiao thức tầng Transport bị từ chối bởi máy chủ đích
!XCommunication ProhibitedBị chặn bởi bộ lọc tường lửa hoặc danh sách ACL
!FFragmentation NeededGói tin vượt quá kích thước MTU nhưng cờ DF được bật

Một hiện tượng rất phổ biến khi sử dụng lệnh traceroute là xuất hiện một vài hop ở giữa hiển thị * * *, nhưng các hop phía sau và đích đến cuối cùng vẫn hiển thị IP và thời gian phản hồi tốt. Trong trường hợp này, đường truyền của bạn hoàn toàn bình thường và không hề bị đứt mạng. Các dấu sao này chỉ đơn thuần là do router tại hop đó được quản trị viên cấu hình tắt tính năng gửi phản hồi ICMP Time Exceeded hoặc bật tính năng giới hạn tần suất (ICMP Rate Limiting) để tiết kiệm CPU của router.

Ngược lại, nếu từ một hop nào đó trở đi xuất hiện liên tiếp các dấu * * * kéo dài cho đến hết 30 hops, điều đó chứng minh kết nối đã thực sự bị đứt gãy tại router liền kề phía trước hoặc máy chủ đích đã cấu hình hướng dẫn cấu hình tường lửa UFW Firewall để âm thầm thả bỏ (drop) toàn bộ các gói tin thăm dò không mời mà đến.

Kinh nghiệm thực chiến của Cypher khi chẩn đoán mạng với traceroute

Thú thật là trong suốt những năm tháng xử lý sự cố mạng cho các hệ thống máy chủ phân tán, mình thấy rất nhiều bạn kỹ sư trẻ vội vã kết luận mạng bị lỗi khi vừa nhìn thấy một hop có độ trễ cao trên kết quả của lệnh traceroute. Tuy nhiên, nếu hop thứ 5 có RTT lên đến 150ms nhưng các hop thứ 6, 7 và máy chủ đích cuối cùng lại chỉ có RTT 30ms, thì con số 150ms ở hop thứ 5 hoàn toàn vô nghĩa đối với độ trễ tổng thể của ứng dụng.

Lý do là hầu hết các thiết bị mạng cao cấp của Cisco hay Juniper đều ưu tiên xử lý chuyển mạch gói tin qua phần cứng chuyên dụng (hardware ASIC). Khi gói tin của lệnh traceroute hết TTL, router phải chuyển gói tin đó lên vi xử lý điều khiển trung tâm (Control Plane CPU) để sinh gói tin ICMP phản hồi. Do CPU bận xử lý các tác vụ định tuyến phức tạp khác nên thời gian sinh ICMP bị chậm lại, trong khi luồng truyền tải dữ liệu bình thường của bạn vẫn lao đi với tốc độ ánh sáng.

Chỉ khi độ trễ cao bắt đầu xuất hiện tại một hop và tiếp tục duy trì mức độ trễ cao đó ở tất cả các hop phía sau cho đến đích đến cuối cùng, thì đó mới chính là điểm nút gây nghẽn cổ chai thực sự của đường truyền.

Bên cạnh việc sử dụng lệnh traceroute truyền thống, bạn nên kết hợp với công cụ kiểm tra thông lượng cơ bản theo bài viết về hướng dẫn sử dụng lệnh Ping trên Linux chuyên sâu và công cụ My Traceroute (MTR). MTR là sự kết hợp hoàn hảo giữa ping và traceroute, liên tục gửi các chuỗi gói tin thăm dò theo thời gian thực để cung cấp cho bạn tỷ lệ phần trăm mất gói (packet loss) trung bình trên từng trạm trung gian một cách trực quan nhất.

Hy vọng qua cẩm nang hướng dẫn chuyên sâu này, bạn đã nắm trọn vẹn bản chất nguyên lý và cách làm chủ lệnh traceroute trên hệ thống Linux của mình. Việc thành thạo các tùy chọn nâng cao và biết cách phân tích số liệu đa chiều sẽ giúp bạn nhanh chóng trở thành một chuyên gia gỡ lỗi mạng thực thụ trong mắt đồng nghiệp và khách hàng.