Lệnh tracepath: Kiểm tra hop và MTU đường truyền thay cho traceroute

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8iputils 20210202Tài khoản rootDebian 12 · traceroute 2.1.2 tài khoản thường
Lệnh mạngtracepathVị trí/usr/bin/tracepath

Trên máy chủ Linux, có thể kiểm tra đường đi (các hop) mà gói tin đi qua đến đích và MTU đường truyền bằng lệnh tracepath mà không cần quyền root. Trên một máy chủ AlmaLinux 9 không cài traceroute, chúng tôi giới hạn số hop là 10 và kiểm tra đường đi đến example.com: đến hop thứ tư đọc được thời gian phản hồi và MTU đường truyền 1500, còn sáu hop sau đó không phản hồi.

Kết quả bên dưới được chạy trên máy chủ AlmaLinux 9.8 (tài khoản root), còn phiên bản traceroute và trạng thái gói được kiểm tra trên máy chủ Debian 12 (tài khoản thường). Địa chỉ IPv6 của hop đầu tiên và các router trung gian đã được thay bằng địa chỉ mẫu dành cho tài liệu, còn thời gian phản hồi và giá trị pmtu được giữ nguyên.

1️⃣ Cách dùng lệnh tracepath

  • ↪️ Kiểm tra hop và MTU đường truyền đến đích

tracepath nhận một tên hoặc địa chỉ IP đích, gửi gói UDP và in ra các hop phản hồi, mỗi hop một dòng theo thứ tự TTL. Số hop tối đa mặc định là 30 và có thể đổi bằng -m.

Với example.com, chúng tôi thêm -m 10 để chỉ kiểm tra đến hop thứ mười.

tracepath -n -m 10 example.com
 1?: [LOCALHOST]                        0.006ms pmtu 9001
 1:  fe80::1%eth0                                          0.077ms pmtu 1500
 1:  2001:db8:a::5b                                        2.627ms asymm  8 
 2:  2001:db8:a::52                                        1.473ms asymm 12 
 3:  2001:db8:b::1e                                       19.653ms asymm  9 
 4:  2001:db8:c::                                          3.642ms asymm 11 
 5:  no reply
 6:  no reply
 7:  no reply
 8:  no reply
 9:  no reply
10:  no reply
     Too many hops: pmtu 1500
     Resume: pmtu 1500 

Máy chủ này gửi gói tin đến địa chỉ IPv6 của example.com, và thời gian phản hồi xuất hiện đến hop thứ tư. Từ hop thứ năm trở đi liên tục là no reply, nên dòng reached cho biết đã đến đích trong mười hop không xuất hiện, và lệnh mất khoảng 18 giây mới kết thúc.

Khi chạy đến cùng đích mà không có -m, lệnh không kết thúc trong 30 giây. Với đường đi có nhiều hop không phản hồi, hãy dùng -m để giảm số hop cần kiểm tra.

Phiên bản tracepath đã cài được kiểm tra bằng -V; tracepath trên máy chủ này là iputils 20210202.

tracepath -V
tracepath from iputils 20210202

2️⃣ Cách đọc kết quả tracepath

  • ↪️ Số hop, pmtu, asymm, reached

Mỗi dòng kết quả lần lượt gồm số hop, địa chỉ đã phản hồi và thời gian khứ hồi. Tại điểm MTU đường truyền thay đổi sẽ có pmtu, còn nếu số hop chiều đi và chiều về khác nhau sẽ có asymm. Dưới đây là những gì cần xem trên mỗi dòng.

Đầu raÝ nghĩa
1?:Cột số hop — số được ước đoán vì không lấy được TTL từ phản hồi sẽ có thêm dấu ?
[LOCALHOST]Dòng của chính máy chủ, trước khi gói tin ra mạng
0.077msThời gian khứ hồi đến hop đó
pmtu 1500MTU đường truyền (byte) thay đổi tại điểm đó — chỉ có khi thay đổi
asymm 8Chênh lệch số hop giữa chiều đi và chiều về — tài liệu chính thức cho biết đây không phải giá trị đáng tin
no replyHop không phản hồi gói tin gửi với TTL đó
reachedDòng đã đến đích
Too many hopsDừng sau khi kiểm tra đến số hop đặt bằng -m
Resume: pmtu … hops … back …MTU của cả đường truyền, số hop đến đích và số hop chiều về ước đoán

Trong kết quả của example.com, pmtu ở dòng đầu [LOCALHOST] là 9001 và đổi thành 1500 ở hop đầu tiên. Việc dòng TTL 1 xuất hiện hai lần chỉ khác địa chỉ cũng là dạng có trong ví dụ của tài liệu chính thức. Tài liệu giải thích rằng nếu gói đầu tiên bị từ chối ở hop đầu vì MTU đường truyền thì cùng dòng TTL đó sẽ xuất hiện thêm một lần.

Khi đến đích, cuối dòng sẽ có reached, và dòng Resume cuối cùng cho biết số hop đến đích. Khi gửi đến 127.0.0.1, reached xuất hiện chỉ sau một hop, và dòng Resume là [pmtu 65535 hops 1 back 1].

tracepath -n 127.0.0.1
 1:  127.0.0.1                                             0.047ms reached
     Resume: pmtu 65535 hops 1 back 1 

Đường đi kết thúc bằng Too many hops mà không có reached nghĩa là không nhận được phản hồi từ đích trong số hop đặt bằng -m. Đường đi đến example.com cũng không có reached trong mười hop, nên dòng Resume chỉ còn pmtu mà không có số hop.

3️⃣ Tùy chọn của tracepath

  • ↪️ -n, -b, -m và độ dài gói tin -l

tracepath chỉ có tám tùy chọn: -4, -6, -n, -b, -l, -m, -p và -V, và khi chạy mà không có đích, danh sách này hiện ra dưới dạng cách dùng. Khi chạy không có tùy chọn, lệnh sẽ phân giải địa chỉ phản hồi thành tên; khi gửi đến localhost, cột hop hiện localhost.

tracepath localhost
 1?: [LOCALHOST]                        0.003ms pmtu 65536
 1:  localhost                                             0.048ms reached
 1:  localhost                                             0.030ms reached
     Resume: pmtu 65536 hops 1 back 1 

[tracepath -n] chỉ in địa chỉ IP mà không phân giải tên. Khi thêm -n cho cùng localhost, cột hop đổi thành địa chỉ IPv6 ::1, và đường đi example.com chạy với -n cũng chỉ hiện địa chỉ ở cột hop.

tracepath -n localhost
 1?: [LOCALHOST]                        0.005ms pmtu 65536
 1:  ::1                                                   0.039ms reached
 1:  ::1                                                   0.010ms reached
     Resume: pmtu 65536 hops 1 back 1 

-b in cả tên và địa chỉ. Khi thêm -b cho 127.0.0.1, địa chỉ nằm trong ngoặc sau tên thành [localhost (127.0.0.1)].

tracepath -b 127.0.0.1
 1:  localhost (127.0.0.1)                                 0.050ms reached
     Resume: pmtu 65535 hops 1 back 1 

-m là tùy chọn đặt số hop tối đa cần kiểm tra, và nhận giá trị từ 0 đến 255. Khi thêm -m 0, chỉ có dòng Too many hops và Resume hiện ngay mà không có dòng hop nào, còn khi nhập 256 thì bị từ chối với [out of range].

tracepath -m 0 127.0.0.1
     Too many hops: pmtu 65535
     Resume: pmtu 65535 

-l là độ dài của gói tin gửi đầu tiên; mặc định là 65535 byte với IPv4 và 128000 byte với IPv6. Khi thêm -l 1500 cho 127.0.0.1, pmtu ở dòng Resume đổi từ 65535 thành 1500.

tracepath -l 1500 -n 127.0.0.1
 1:  127.0.0.1                                             0.028ms reached
     Resume: pmtu 1500 hops 1 back 1 

-p là tùy chọn đặt cổng UDP đích đầu tiên sẽ gửi đến. Kết quả khi thêm -p 33434 cho 127.0.0.1 giống như khi không thêm.

Tùy chọnSao chépMô tả
-nChỉ in địa chỉ IP, không phân giải tên
-bIn cả tên và địa chỉ
-msố hopĐặt số hop tối đa cần kiểm tra, mặc định 30
-lđộ dàiĐặt độ dài gói tin đầu tiên, mặc định IPv4 65535, IPv6 128000
-VIn phiên bản rồi thoát
Tùy chọnSao chépMô tả
-4Chỉ gửi tới địa chỉ IPv4
-6Chỉ gửi tới địa chỉ IPv6
-pCổngĐặt cổng UDP đích đầu tiên sẽ gửi đến

4️⃣ Khác biệt giữa tracepath và traceroute

  • ↪️ Cài đặt, quyền, gói tin gửi đi

Trên máy chủ không cài được traceroute, hãy kiểm tra đường đi bằng tracepath thay cho traceroute. Máy chủ AlmaLinux 9.8 mà chúng tôi kiểm tra không có gói traceroute, còn tracepath nằm trong gói iputils nên chạy được mà không cần cài thêm.

rpm -q traceroute
package traceroute is not installed

Máy chủ Debian 12 thì ngược lại: traceroute 2.1.2 đã được cài, còn gói iputils-tracepath chứa tracepath thì chưa được cài.

traceroute --version
Modern traceroute for Linux, version 2.1.2
Copyright (c) 2016  Dmitry Butskoy,   License: GPL v2 or any later
apt-cache policy iputils-tracepath
iputils-tracepath:
  Installed: (none)
  Candidate: 3:20221126-1+deb12u1

Như hai máy chủ này, các lệnh có sẵn khác nhau tùy bản phân phối, nên trước tiên hãy kiểm tra máy chủ đang kết nối có lệnh nào. tracepath không cần quyền root và tài khoản nào gửi được gói UDP cũng chạy được. Tệp thực thi tracepath trên máy chủ AlmaLinux 9.8 cũng có quyền rwxr-xr-x và không có quyền bổ sung (capability) nào.

Hạng mụctracepathtraceroute
Máy chủ AlmaLinux 9.8Có trong gói iputils, chạy được ngayChưa cài
Máy chủ Debian 12Chưa cài gói iputils-tracepathĐã cài traceroute 2.1.2
Gói tin gửi điUDPMặc định UDP, -I là ICMP, -T là TCP
Kết quả mỗi hopMột dòngMặc định gửi ba lần, ba thời gian (đổi bằng -q)
Số tùy chọnTám: -4 -6 -n -b -l -m -p -VHơn 20 chỉ riêng màn hình --help đầu tiên

Nếu cần xem đường đi bằng ICMP hoặc TCP, hay gửi nhiều lần mỗi hop để so sánh thời gian, bạn sẽ phải cài và dùng lệnh traceroute. Với máy chủ khó cài đặt hoặc cần xem cả MTU đường truyền, tracepath là lựa chọn phù hợp.

🔲 Trình mô phỏng lệnh tracepath

Trong trình mô phỏng bên dưới, bạn có thể xem lại đường đi đến example.com chỉ với số hop thay đổi, hoặc tự nhập -n, -b, -m và -l cho localhost và 127.0.0.1 để thấy sự khác biệt.

Trình mô phỏng lệnh tracepathiputils 20210202
[root@server work]#
Chỉ chạy trong trình duyệt của bạn và không gửi gói tin thật. Dùng ↑↓ để gọi lại các lệnh trước đó.

🔢 FAQ & nội dung đề xuất

Không, mã thoát không cho biết điều đó. Ngay cả khi chạy đến example.com với -m 10 và kết thúc bằng Too many hops mà không có reached, mã thoát vẫn là 0. Lỗi phân giải tên và đối số không hợp lệ cho 1, còn chạy mà không có đích cho 255. Mã thoát chỉ phân biệt lỗi khi chạy, nên hãy xem đã đến đích hay chưa qua dòng reached trong kết quả.

localhost được gửi đến địa chỉ IPv6 ::1 nên dòng đầu [LOCALHOST] hiện MTU của giao diện loopback là 65536, còn 127.0.0.1 là IPv4 nên hiện nguyên độ dài gói mặc định của IPv4 là 65535. MTU của giao diện lo kiểm tra bằng ip link cũng là 65536.

Thêm -4 thì chỉ gửi đến địa chỉ IPv4. Khi thêm -4 cho localhost, reached xuất hiện sau một hop qua IPv4 mà không có dòng [LOCALHOST]; ngược lại, thêm -6 cho 127.0.0.1 thì kết thúc với [Address family for hostname not supported].

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 2   +   1   =