คำสั่ง tracepath: ตรวจฮอปและ MTU ของเส้นทางแทน traceroute

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8iputils 20210202บัญชี rootDebian 12 · traceroute 2.1.2 บัญชีผู้ใช้ทั่วไป
คำสั่งเครือข่ายtracepathตำแหน่ง/usr/bin/tracepath

บนเซิร์ฟเวอร์ Linux สามารถตรวจสอบเส้นทาง (ฮอป) ที่แพ็กเก็ตผ่านไปจนถึงปลายทางและ MTU ของเส้นทางได้ด้วยคำสั่ง tracepath โดยไม่ต้องใช้สิทธิ์ root บนเซิร์ฟเวอร์ AlmaLinux 9 ที่ไม่ได้ติดตั้ง traceroute เราจำกัดจำนวนฮอปไว้ที่ 10 แล้วตรวจเส้นทางไปยัง example.com พบว่าอ่านเวลาตอบกลับและ MTU ของเส้นทาง 1500 ได้จนถึงฮอปที่สี่ จากนั้นอีกหกฮอปไม่มีการตอบกลับ

ผลลัพธ์ด้านล่างรันบนเซิร์ฟเวอร์ AlmaLinux 9.8 (บัญชี root) ส่วนเวอร์ชันของ traceroute และสถานะแพ็กเกจตรวจบนเซิร์ฟเวอร์ Debian 12 (บัญชีทั่วไป) ที่อยู่ IPv6 ของฮอปแรกและเราเตอร์ระหว่างทางเปลี่ยนเป็นที่อยู่ตัวอย่างสำหรับเอกสาร ส่วนเวลาตอบกลับและค่า pmtu คงไว้ตามเดิม

1️⃣ วิธีใช้คำสั่ง tracepath

  • ↪️ ตรวจฮอปและ MTU ของเส้นทางจนถึงปลายทาง

tracepath รับชื่อหรือที่อยู่ IP ปลายทางหนึ่งรายการ ส่งแพ็กเก็ต UDP แล้วแสดงฮอปที่ตอบกลับทีละบรรทัดตามลำดับ TTL จำนวนฮอปสูงสุดค่าเริ่มต้นคือ 30 และเปลี่ยนได้ด้วย -m

สำหรับ example.com เราใส่ -m 10 เพื่อตรวจแค่ถึงฮอปที่สิบ

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 

เซิร์ฟเวอร์นี้ส่งแพ็กเก็ตไปยังที่อยู่ IPv6 ของ example.com และมีเวลาตอบกลับขึ้นจนถึงฮอปที่สี่ ตั้งแต่ฮอปที่ห้าเป็น no reply ต่อเนื่อง จึงไม่มีบรรทัด reached ที่บอกว่าถึงปลายทางภายในสิบฮอป และใช้เวลาราว 18 วินาทีกว่าจะจบ

เมื่อรันไปยังปลายทางเดียวกันโดยไม่ใส่ -m คำสั่งไม่จบภายใน 30 วินาที เส้นทางที่มีฮอปไม่ตอบกลับจำนวนมากควรใช้ -m ลดจำนวนฮอปที่ตรวจ

ตรวจเวอร์ชัน tracepath ที่ติดตั้งได้ด้วย -V โดย tracepath ของเซิร์ฟเวอร์นี้คือ iputils 20210202

tracepath -V
tracepath from iputils 20210202

2️⃣ วิธีอ่านผลลัพธ์ tracepath

  • ↪️ หมายเลขฮอป, pmtu, asymm, reached

ผลลัพธ์แต่ละบรรทัดเรียงเป็นหมายเลขฮอป ที่อยู่ที่ตอบกลับ และเวลาไป-กลับ ตรงจุดที่ MTU ของเส้นทางเปลี่ยนจะมี pmtu และถ้าจำนวนฮอปขาไปกับขากลับไม่เท่ากันจะมี asymm สิ่งที่ตรวจในแต่ละบรรทัดมีดังนี้

เอาต์พุตความหมาย
1?:ช่องหมายเลขฮอป — มี ? ต่อท้ายหมายเลขที่ประมาณเอาเพราะไม่ได้ TTL จากการตอบกลับ
[LOCALHOST]บรรทัดของเซิร์ฟเวอร์เองก่อนแพ็กเก็ตออกสู่เครือข่าย
0.077msเวลาไป-กลับจนถึงฮอปนั้น
pmtu 1500MTU ของเส้นทาง (ไบต์) ที่เปลี่ยน ณ จุดนั้น — มีเฉพาะเมื่อเปลี่ยน
asymm 8ผลต่างจำนวนฮอประหว่างขาไปกับขากลับ — คู่มือทางการระบุว่าไม่ใช่ค่าที่เชื่อถือได้
no replyฮอปที่ไม่ตอบกลับแพ็กเก็ตที่ส่งด้วย TTL นั้น
reachedบรรทัดที่ถึงปลายทาง
Too many hopsหยุดหลังตรวจถึงจำนวนฮอปที่กำหนดด้วย -m
Resume: pmtu … hops … back …MTU ของทั้งเส้นทาง จำนวนฮอปถึงปลายทาง และค่าประมาณจำนวนฮอปขากลับ

ในผลลัพธ์ของ example.com ค่า pmtu ของบรรทัดแรก [LOCALHOST] คือ 9001 แล้วเปลี่ยนเป็น 1500 ที่ฮอปแรก การที่บรรทัด TTL 1 ขึ้นสองครั้งโดยเปลี่ยนแค่ที่อยู่ก็เป็นรูปแบบเดียวกับตัวอย่างในคู่มือทางการ คู่มืออธิบายว่าถ้าแพ็กเก็ตแรกถูกปฏิเสธที่ฮอปแรกเพราะ MTU ของเส้นทาง บรรทัด TTL เดิมจะขึ้นอีกครั้ง

เมื่อถึงปลายทาง ท้ายบรรทัดจะมี reached และบรรทัด Resume สุดท้ายจะแสดงจำนวนฮอปถึงปลายทาง เมื่อส่งไปยัง 127.0.0.1 ได้ reached ในฮอปเดียว และบรรทัด Resume คือ [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 

เส้นทางที่จบด้วย Too many hops โดยไม่มี reached หมายถึงไม่ได้รับการตอบกลับจากปลายทางภายในจำนวนฮอปที่กำหนดด้วย -m เส้นทาง example.com ก็ไม่มี reached จนถึงสิบฮอป บรรทัด Resume จึงเหลือแค่ pmtu โดยไม่มีจำนวนฮอป

3️⃣ ตัวเลือกของ tracepath

  • ↪️ -n, -b, -m และความยาวแพ็กเก็ต -l

tracepath มีตัวเลือกเพียงแปดตัว คือ -4, -6, -n, -b, -l, -m, -p และ -V และถ้ารันโดยไม่ใส่ปลายทาง รายการนี้จะแสดงเป็นวิธีใช้ หากรันโดยไม่มีตัวเลือก จะแปลงที่อยู่ที่ตอบกลับเป็นชื่อ เมื่อส่งไปยัง localhost ช่องฮอปแสดง 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] แสดงเฉพาะที่อยู่ IP โดยไม่แปลงเป็นชื่อ เมื่อใส่ -n กับ localhost เดิม ช่องฮอปเปลี่ยนเป็นที่อยู่ IPv6 ::1 และเส้นทาง example.com ที่รันด้วย -n ก็แสดงเฉพาะที่อยู่ในช่องฮอป

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 แสดงทั้งชื่อและที่อยู่ เมื่อใส่ -b กับ 127.0.0.1 ที่อยู่จะอยู่ในวงเล็บหลังชื่อเป็น [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 เป็นตัวเลือกกำหนดจำนวนฮอปสูงสุดที่ตรวจ และรับค่าได้ตั้งแต่ 0 ถึง 255 เมื่อใส่ -m 0 จะขึ้นเฉพาะบรรทัด Too many hops และ Resume ทันทีโดยไม่มีบรรทัดฮอป และเมื่อใส่ 256 ถูกปฏิเสธด้วย [out of range]

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

-l คือความยาวของแพ็กเก็ตแรกที่ส่ง ค่าเริ่มต้นคือ 65535 ไบต์สำหรับ IPv4 และ 128000 ไบต์สำหรับ IPv6 เมื่อใส่ -l 1500 กับ 127.0.0.1 ค่า pmtu ในบรรทัด Resume เปลี่ยนจาก 65535 เป็น 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 เป็นตัวเลือกกำหนดพอร์ต UDP ปลายทางแรกที่จะส่ง ผลของการใส่ -p 33434 กับ 127.0.0.1 เหมือนกับตอนไม่ใส่

ตัวเลือกคัดลอกคำอธิบาย
-nแสดงเฉพาะที่อยู่ IP โดยไม่แปลงเป็นชื่อ
-bแสดงทั้งชื่อและที่อยู่
-mจำนวนฮอปกำหนดจำนวนฮอปสูงสุดที่ตรวจ ค่าเริ่มต้น 30
-lความยาวกำหนดความยาวแพ็กเก็ตแรก ค่าเริ่มต้น IPv4 65535, IPv6 128000
-Vแสดงเวอร์ชันแล้วจบ
ตัวเลือกคัดลอกคำอธิบาย
-4ส่งไปยังที่อยู่ IPv4 เท่านั้น
-6ส่งไปยังที่อยู่ IPv6 เท่านั้น
-pพอร์ตกำหนดพอร์ต UDP ปลายทางแรกที่จะส่ง

4️⃣ ความต่างระหว่าง tracepath กับ traceroute

  • ↪️ การติดตั้ง สิทธิ์ และแพ็กเก็ตที่ส่ง

บนเซิร์ฟเวอร์ที่ติดตั้ง traceroute ไม่ได้ ให้ตรวจเส้นทางด้วย tracepath แทน traceroute เซิร์ฟเวอร์ AlmaLinux 9.8 ที่เราตรวจไม่มีแพ็กเกจ traceroute ส่วน tracepath อยู่ในแพ็กเกจ iputils จึงรันได้โดยไม่ต้องติดตั้งเพิ่ม

rpm -q traceroute
package traceroute is not installed

เซิร์ฟเวอร์ Debian 12 กลับตรงข้าม คือติดตั้ง traceroute 2.1.2 ไว้แล้ว แต่ยังไม่ได้ติดตั้งแพ็กเกจ iputils-tracepath ที่มี tracepath

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

เช่นเดียวกับสองเซิร์ฟเวอร์นี้ คำสั่งที่มีให้ใช้ต่างกันตามดิสทริบิวชัน จึงควรตรวจก่อนว่าเซิร์ฟเวอร์ที่เชื่อมต่ออยู่มีคำสั่งไหน tracepath ไม่ต้องใช้สิทธิ์ root และบัญชีใดก็รันได้หากส่งแพ็กเก็ต UDP ได้ ไฟล์โปรแกรม tracepath บนเซิร์ฟเวอร์ AlmaLinux 9.8 ก็มีสิทธิ์ rwxr-xr-x และไม่มีสิทธิ์พิเศษ (capability) เพิ่ม

รายการtracepathtraceroute
เซิร์ฟเวอร์ AlmaLinux 9.8อยู่ในแพ็กเกจ iputils รันได้ทันทีไม่ได้ติดตั้ง
เซิร์ฟเวอร์ Debian 12ไม่ได้ติดตั้งแพ็กเกจ iputils-tracepathติดตั้ง traceroute 2.1.2 แล้ว
แพ็กเก็ตที่ส่งUDPค่าเริ่มต้น UDP, -I คือ ICMP, -T คือ TCP
ผลลัพธ์ต่อฮอปหนึ่งบรรทัดค่าเริ่มต้นส่งสามครั้ง ได้เวลาสามค่า (เปลี่ยนด้วย -q)
จำนวนตัวเลือกแปดตัว: -4 -6 -n -b -l -m -p -Vเกิน 20 ตัวแค่ในหน้าแรกของ --help

ถ้าต้องดูเส้นทางด้วย ICMP หรือ TCP หรือต้องส่งหลายครั้งต่อฮอปเพื่อเทียบเวลา ก็ต้องติดตั้งและใช้คำสั่ง traceroute ส่วนเซิร์ฟเวอร์ที่ติดตั้งยากหรือต้องดู MTU ของเส้นทางไปด้วย tracepath เหมาะกว่า

🔲 ตัวจำลองคำสั่ง tracepath

ในตัวจำลองด้านล่าง คุณดูเส้นทาง example.com อีกครั้งโดยเปลี่ยนแค่จำนวนฮอป หรือพิมพ์ -n, -b, -m และ -l กับ localhost และ 127.0.0.1 เองเพื่อดูความต่างได้

ตัวจำลองคำสั่ง tracepathiputils 20210202
[root@server work]#
ทำงานในเบราว์เซอร์ของคุณเท่านั้นและไม่ส่งแพ็กเก็ตจริง ใช้ ↑↓ เพื่อเรียกคำสั่งก่อนหน้ากลับมา

🔢 FAQ & เนื้อหาแนะนำ

รหัสออกบอกไม่ได้ แม้ตอนรันไปยัง example.com ด้วย -m 10 แล้วจบด้วย Too many hops โดยไม่มี reached รหัสออกก็เป็น 0 การแปลงชื่อล้มเหลวและอาร์กิวเมนต์ไม่ถูกต้องได้ 1 และการรันโดยไม่ใส่ปลายทางได้ 255 รหัสออกแยกได้แค่ข้อผิดพลาดในการรัน จึงต้องดูว่าถึงปลายทางหรือไม่จากบรรทัด reached ในผลลัพธ์

localhost ถูกส่งไปยังที่อยู่ IPv6 ::1 บรรทัดแรก [LOCALHOST] จึงแสดง MTU ของอินเทอร์เฟซลูปแบ็ก 65536 ส่วน 127.0.0.1 ซึ่งเป็น IPv4 แสดงความยาวแพ็กเก็ตค่าเริ่มต้นของ IPv4 คือ 65535 ตามเดิม MTU ของอินเทอร์เฟซ lo ที่ตรวจด้วย ip link ก็เป็น 65536 เช่นกัน

ใส่ -4 แล้วจะส่งไปยังที่อยู่ IPv4 เท่านั้น เมื่อใส่ -4 กับ localhost ได้ reached ในฮอปเดียวผ่าน IPv4 โดยไม่มีบรรทัด [LOCALHOST] กลับกัน เมื่อใส่ -6 กับ 127.0.0.1 จบด้วย [Address family for hostname not supported]

🔗 เนื้อหาแนะนำ
เครือข่าย · IP คำสั่ง ip: ตรวจ IP บน Linux และจัดการอินเทอร์เฟซกับเราติ้ง คำสั่ง ip สำหรับตรวจและจัดการอินเทอร์เฟซเครือข่าย ที่อยู่ IP และการตั้งค่าเราติ้งของเซิร์ฟเวอร์ที่เป็นจุดเริ่มต้นของเส้นทาง อ่านบทความ → แผนภาพอธิบายคำสั่ง ip: ผลลัพธ์ ip route get 8.8.8.8 กับ eth0 ของเซิร์ฟเวอร์นี้ เกตเวย์เริ่มต้น และปลายทาง

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 2   +   1   =