Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

คำสั่ง Traceroute สำหรับ Linux

สรุปสิ่งที่ควรรู้

  • Parameter บังคับเพียงอย่างเดียวคือ Hostname หรือ IP Address ของปลายทาง
  • เริ่ม Probe ด้วย TTL=1 เพิ่มทีละ 1 จนได้ ICMP "port unreachable" หรือถึง Max Attempts

บทความนี้ครอบคลุมข้อมูล Traceroute สำหรับ Linux รวมคำอธิบาย Switches และการอ่านผลลัพธ์ Traceroute ใช้งานต่างใน Windows

Traceroute ทำงานอย่างไร

คำสั่ง traceroute แผนที่เส้นทางที่ Packet เดินทางจาก Source ไป Destination หนึ่งในการใช้งานคือ หาจุดที่ Data Loss เกิดขึ้นใน Network ซึ่งอาจบ่งบอก Node ที่ Down

แต่ละ Hop ใน Record แสดง Server หรือ Router ใหม่ระหว่าง PC ต้นทางและ Target การวิเคราะห์ผล Traceroute ช่วยระบุ Slow Points ที่อาจส่งผลต่อ Network Traffic

Troubleshooting ด้วย Traceroute

การประเมิน Route เฉพาะที่ Network Traffic เดิน (หรือหา Gateway ที่ Drop Packets) มีหลาย Challenge Traceroute ใช้ IP Protocol Time to Live Field เพื่อขอ ICMP TIME_EXCEEDED Response จากแต่ละ Gateway บน Path ไป Destination Host

Parameter บังคับเพียงอย่างเดียวตอนรัน traceroute คือ Hostname หรือ IP Address ของ Destination

Traceroute Syntax และ Switches

Traceroute ไวยากรณ์ทั่วไป:

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 ]

เปลี่ยน Performance หรือ Output ได้ด้วย Optional Switches:

Switchคำอธิบาย
-fตั้งค่า Initial Time-to-Live สำหรับ Probe Packet แรก
-FSet "Don't Fragment" Bit
-dEnable Socket Level Debugging
-gระบุ Loose Source Route Gateway (สูงสุด 8)
-iระบุ Network Interface เพื่อ Source IP ของ Outgoing Probe Packets เหมาะกับ Multi-homed Host (ดู Flag -s อีกวิธี)
-Iใช้ ICMP ECHO แทน UDP Datagrams
-mตั้งค่า Max Time-to-Live (Max Hops) Default 30 Hops (เหมือน TCP Default)
-nพิมพ์ Hop Addresses แบบตัวเลขอย่างเดียว (ประหยัด Nameserver Lookup)
-pตั้งค่า Base UDP Port Number สำหรับ Probes (Default 33434) หาก Port ใน Range Default ถูกใช้ ให้เปลี่ยนด้วย Option นี้
-rBypass Routing Tables ส่งตรงไป Host บน Attached Network หากไม่ใช่ Directly Attached จะ Error
-sใช้ IP Address ต่อไปนี้ (มักเป็น IP Number ไม่ใช่ Hostname) เป็น Source Address ใน Outgoing Probe Packets บน Multi-homed Hosts ใช้ Force Source Address ให้ไม่ใช่ IP ของ Interface ที่ส่ง Probe
-tตั้งค่า Type-of-Service ใน Probe Packets (Default 0) ค่า 0-255 ใช้ดูว่า TOS ต่างกันให้ Path ต่างกันหรือไม่
-vVerbose Output แสดง ICMP Packets อื่นๆ นอกจาก TIME_EXCEEDED และ UNREACHABLE
-wตั้งค่า Time (วินาที) รอ Response ของ Probe (Default 5 วิ)
-xToggle IP Checksums ปกติป้องกันไม่ให้ Traceroute คำนวณ IP Checksums บาง OS เขียนทับ Packet แต่ไม่ Recalculate Checksum
-zตั้งค่า Time (Milliseconds) หน่วงระหว่าง Probes (Default 0) ระบบบางตัว Rate Limit ICMP Messages ค่าที่ดีคือ 500 (0.5 วิ)

การอ่านผลลัพธ์

Traceroute แสดง Path ของ IP Packet ไป Internet Host โดยยิง UDP Probe Packets ด้วย TTL น้อย แล้วฟัง ICMP "Time Exceeded" Reply จาก Gateway เริ่ม TTL=1 เพิ่มทีละ 1 จนได้ ICMP "Port Unreachable" (มาถึงปลายทาง) หรือถึง Max Attempts (Default 30 Hops เปลี่ยนได้ด้วย Flag -m)

ตอน Traceroute รัน จะส่ง Probe 3 ตัวต่อ TTL Setting แล้วพิมพ์บรรทัดแสดง TTL, Gateway Address, Round-trip Time ของแต่ละ Probe หาก Probe ตอบจาก Gateway ต่างกัน จะแสดง Address ของแต่ละระบบ หากไม่ได้ Response ภายใน 5 วิ (เปลี่ยนด้วย Flag -w) จะพิมพ์ Asterisk (*) สำหรับ Probe นั้น

เพื่อป้องกัน UDP Probe-Packet Processing ท่วมท้น Destination Host Traceroute ตั้ง Destination Port เป็นค่าที่ Device ไม่น่าจะใช้ หาก Network/Service ที่ปลายทางใช้ Port นั้น ให้เปลี่ยนด้วย Flag -p

ตัวอย่างผลลัพธ์ Traceroute

การใช้งานตัวอย่างจะได้ผลลัพธ์คล้ายนี้:

[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

บรรทัดที่ 2 และ 3 เหมือนกัน เกี่ยวกับ Buggy Kernel บน Hop ที่ 2 (lbl-csam.arpa) ที่ Forward Packets ด้วย TTL=0 (Bug ใน 4.3 BSD) ต้องเดา Path ข้ามประเทศเพราะ NSFNet ไม่ให้ Address-to-Name Translations

ตัวอย่าง 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

Gateway ที่ Hop 12, 14, 15, 16, 17 ไม่ส่ง ICMP "Time Exceeded" หรือส่งด้วย TTL เล็กเกินไป บรรทัด 14-17 รัน MIT C Gateway Code ที่ไม่ส่ง "Time Exceeded"

Silent Gateway 12 อาจมาจาก Bug ใน 4.[23]BSD Network Code: Machines รัน 4.3 Code หรือเก่ากว่า ส่ง Unreachable Message ด้วย TTL ที่เหลือใน Datagram ต้นทาง สำหรับ Gateway TTL ที่เหลือคือ 0 ICMP "Time Exceeded" จะไม่กลับมาถึงเราแน่นอน

ตัวอย่าง Destination System Silent Gateway

พฤติกรรม Bug นี้น่าสนใจกว่าเมื่อปรากฏบน Destination System:

 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 !

สังเกตมี 12 "Gateways" (13 คือปลายทาง) ครึ่งหลังหายไป จริงๆ Server rip (Sun-3 รัน Sun OS 3.5) ใช้ TTL จาก Datagram ที่มาถึง เป็น TTL ใน ICMP Reply Reply จะ Timeout บน Return Path (ไม่มี Notice เพราะ ICMPs ไม่ส่ง ICMPs) จนกว่าเราจะ Probe ด้วย TTL อย่างน้อยสองเท่าของ Path Length กล่าวคือ Rip อยู่จริงๆ แค่ 7 Hops

Reply ที่กลับมาด้วย TTL=1 เป็น Clue ของปัญหานี้ Traceroute พิมพ์ ! หลัง Time หาก TTL ≤ 1 เนื่องจาก Vendor ส่ง Obsolete/Non-standard Software มาก ควรคาดการณ์ปัญหานี้และระวังเลือก Target Host

Annotations อื่นๆ หลัง Time: !H, !N, !P (Host/Network/Protocol Unreachable), !S (Source Route Failed), !F- (Fragmentation Needed - แสดง RFC1191 Path MTU Discovery), !X (Communication Administratively Prohibited), !V (Host Precedence Violation), !C (Precedence Cutoff), ! (ICMP Unreachable Code) กำหนดโดย RFC1812 (Supersedes RFC1716) หาก Probes เกือบทั้งหมด Unreachable Traceroute จะยอมแพ้และ Exit

โปรแกรมนี้สำหรับ Network Testing, Measurement, Management ใช้ 주로 Manual Fault Isolation เนื่องจาก Load ที่อาจเกิดกับ Network ไม่ควรใช้ Traceroute ระหว่าง Operations ปกติ หรือจาก Automated Scripts