Những điều cần biết
- Tham số bắt buộc duy nhất của lệnh traceroute là tên host hoặc địa chỉ IP đích.
- Khởi tạo probe với TTL=1, tăng dần 1 cho đến khi nhận ICMP "port unreachable" hoặc đạt giá trị tối đa số lần thử.
Bài viết bao gồm thông tin traceroute áp dụng cho Linux: giải thích các switch lệnh và cách đọc kết quả. Traceroute trên Windows dùng khác.
Cách Traceroute hoạt động
Lệnh traceroute ánh xạ hành trình gói tin từ nguồn đến đích. Ứng dụng: xác định vị trí mất gói tin trong mạng – dấu hiệu node down.
Mỗi hop trong bản ghi phản ánh server/router mới giữa PC gốc và đích. Xem kết quả traceroute giúp tìm điểm chậm ảnh hưởng traffic mạng.
Khắc phục sự cố với Traceroute
Đánh giá tuyến đường traffic theo dõi (hoặc tìm gateway "tội nghiệp" hủy gói tin) đặt ra nhiều thách thức. Traceroute dùng trường time to live của giao thức IP để yêu cầu phản hồi ICMP TIME_EXCEEDED từ mỗi gateway trên đường đến host đích.
Tham số bắt buộc khi chạy traceroute chỉ là tên host hoặc IP đích.
Cú pháp và Switch của Traceroute
Cú pháp chung:
traceroute [ -dFInrvx ] [ -f first_ttl ] [ -g gateway ] [ -i iface ] [ -m max_ttl ] [ -p port ] [ -q nqueries ] [ -s src_addr ] [ -t tos ] [ -w waittime ] [ -z pausemsecs ] host [ packetlen ]
Thay đổi hiệu năng/xuất ra bằng các switch tùy chọn:
| Các Switch của lệnh Traceroute | |
|---|---|
| -f | Thiết lập time-to-live ban đầu cho gói probe đầu tiên. |
| -F | Set bit "don't fragment". |
| -d | Bật debug cấp socket. |
| -g | Chỉ định loose source route gateway (tối đa 8). |
| -i | Chỉ định network interface lấy source IP cho gói probe đi. Hữu ích trên multi-homed host. (Xem flag -s cách khác). |
| -I | Dùng ICMP ECHO thay vì UDP datagrams. |
| -m | Set max time-to-live (số hop tối đa) cho gói probe. Mặc định 30 hop (giống TCP). |
| -n | In địa chỉ hop dưới dạng số thay vì symbolic+numeric (tiết kiệm lookup nameserver cho mỗi gateway). |
| -p | Set base UDP port cho probe (mặc định 33434). Traceroute hy vọng không service nào lắng nghe trên port base đến base+nhops-1 tại đích (để nhận ICMP PORT_UNREACHABLE kết thúc trace). Nếu port mặc định bị chiếm, dùng option này chọn range port khác. |
| -r | Bỏ qua routing table thông thường, gửi trực tiếp đến host trên mạng gắn trực tiếp. Nếu host không trên mạng trực tiếp, báo lỗi. Dùng ping local host qua interface không có route (ví dụ sau khi interface bị dropped bởi routed(8C)). |
| -s | Dùng IP address sau (thường là số IP, không phải hostname) làm source address cho gói probe. Trên multi-homed host (nhiều IP), ép source address khác IP interface gửi probe. Nếu IP không phải interface của máy, báo lỗi không gửi gì. (Xem flag -i cách khác). |
| -t | Set type-of-service trong probe packets (mặc định 0). Giá trị số nguyên 0-255. Kiểm tra các type-of-service khác cho ra đường đi khác. (Nếu không chạy 4.4bsd, có thể không ý nghĩa vì telnet/ftp không cho kiểm soát TOS). Không phải giá trị TOS nào cũng hợp lệ – xem IP spec. Giá trị hữu ích: -t 16 (low delay), -t 8 (high throughput). |
| -v | Verbose output. Liệt kê các gói ICMP nhận được khác TIME_EXCEEDED và UNREACHABLE. |
| -w | Set thời gian chờ phản hồi probe (giây, mặc định 5s). |
| -x | Toggle IP checksums. Mặc định ngăn traceroute tính checksum. Một số OS ghi đè phần gói đi nhưng không tính lại checksum; lúc đó mặc định không tính checksum, dùng -x mới tính. Checksum thường cần cho hop cuối khi dùng ICMP ECHO (-I), nên luôn tính khi dùng ICMP. |
| -z | Set thời gian nghỉ giữa các probe (milliseconds, mặc định 0). Một số hệ thống (Solaris, router Cisco) rate-limit ICMP. Giá trị tốt: 500 (0.5 giây). |
Diễn giải kết quả
Traceroute vẽ đường đi gói IP đến internet host bằng cách gửi UDP probe với TTL nhỏ, lắng nghe ICMP "time exceeded" từ gateway. Probe bắt đầu TTL=1, tăng 1 cho đến khi nhận ICMP "port unreachable" (đã đến đích) hoặc đạt max attempts (mặc định 30 hop, đổi bằng flag -m).
Khi chạy, traceroute gửi 3 probe mỗi TTL, in ra dòng: TTL, địa chỉ gateway, round-trip time của mỗi probe. Nếu probe phản hồi từ gateway khác nhau, in địa chỉ từng hệ thống. Nếu không nhận phản hồi trong 5 giây (đổi bằng -w), in dấu sao (*) cho probe đó.
Để tránh quá tải destination host bởi xử lý UDP probe, traceroute đặt port đích ở giá trị thiết bị khó dùng. Nếu mạng/dịch vụ đích dùng port đó, đổi bằng flag -p.
Ví dụ kết quả Traceroute
Mẫu chạy và output tương tự:
[yak 71]% traceroute nis.nsf.net. traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 38 byte packet 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms
Dòng 2 và 3 giống nhau. Nguyên nhân: kernel lỗi trên hệ thống hop 2 (lbl-csam.arpa) forward gói với TTL=0 (bug 4.3 BSD). Bạn phải đoán đường đi cross-country vì NSFNet (129.140) không cung cấp address-to-name cho NSS.
Ví dụ Silent Gateway
[yak 72]% traceroute allspice.lcs.mit.edu. traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms 8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms 9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms 10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms 11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms 12 * * * 13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms 14 * * * 15 * * * 16 * * * 17 * * * 18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms
Lưu ý gateway ở hop 12, 14, 15, 16, 17 hoặc không gửi ICMP "time exceeded", hoặc gửi với TTL quá nhỏ không đến được chúng ta. Dòng 14-17 chạy MIT C Gateway code không gửi "time exceeded".
Silent gateway 12 có thể do bug network code 4.[23]BSD và biến thể: máy chạy 4.3 trở xuống gửi unreachable message dùng TTL còn lại của datagram gốc. Với gateway, TTL còn lại = 0, ICMP "time exceeded" chắc chắn không về được.
Ví dụ Silent Gateway tại hệ thống đích
1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms 6 csgw.Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms 7 * * * 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 rip.Berkeley.EDU (128.32.131.22) 59 ms ! 39 ms ! 39 ms !
Chú ý: có 12 "gateway" (13 là đích cuối), nửa sau bị mất. Thực tế server rip (Sun-3 chạy Sun OS 3.5) dùng TTL từ datagram đến làm TTL cho ICMP reply. Reply sẽ timeout trên đường về (không thông báo vì ICMP không sinh ICMP) cho đến khi probe với TTL ít nhất gấp đôi độ dài đường – rip thực chất chỉ 7 hop.
Reply trả về TTL=1 là dấu hiệu vấn đề này. Traceroute in ! sau thời gian nếu TTL ≤ 1. Vì nhiều vendor ship phần mềm lỗi thời (DEC Ultrix, Sun 3.x) hoặc non-standard (HPUX), thường gặp vấn đề này – cẩn trọng chọn target host.
Các chú thích khác sau thời gian: !H, !N, !P (host/network/protocol unreachable), !S (source route failed), !F (fragmentation needed – hiển thị giá trị RFC1191 Path MTU Discovery), !X (communication administratively prohibited), !V (host precedence violation), !C (precedence cutoff), ! (ICMP unreachable code). Định nghĩa bởi RFC1812 (thay thế RFC1716). Nếu hầu hết probe unreachable, traceroute bỏ thoát.
Chương trình dành cho network testing, measurement, management. Dùng chủ yếu cho manual fault isolation. Vì tải trọng lên mạng, không khuyến khích dùng traceroute trong vận hành bình thường hoặc script tự động.