วิธีใช้คำสั่ง traceroute บน Linux
คุณสามารถใช้traceroute
คำสั่งLinux เพื่อระบุขาที่ช้าของการเดินทางของแพ็กเก็ตเครือข่ายและแก้ไขปัญหาการเชื่อมต่อเครือข่ายที่ซบเซา เราจะแสดงให้คุณเห็น!
traceroute ทำงานอย่างไร
เมื่อคุณชื่นชมวิธีการtraceroute
ทำงานจะทำให้เข้าใจผลลัพธ์ได้ง่ายขึ้นมาก ยิ่งเส้นทางที่แพ็กเก็ตเครือข่ายต้องใช้เพื่อไปถึงปลายทางมีความซับซ้อนมากเท่าไหร่การระบุตำแหน่งที่อาจเกิดการชะลอตัวได้ยากขึ้นเท่านั้น
เครือข่ายท้องถิ่น (LAN) ขององค์กรขนาดเล็กอาจค่อนข้างง่าย มันอาจจะมีเซิร์ฟเวอร์อย่างน้อยหนึ่งตัวและเราเตอร์หรือสองตัว ความซับซ้อนเพิ่มขึ้นบนเครือข่ายบริเวณกว้าง (WAN) ที่สื่อสารระหว่างสถานที่ต่างๆหรือผ่านอินเทอร์เน็ต จากนั้นแพ็กเก็ตเครือข่ายของคุณจะพบ (และถูกส่งต่อและกำหนดเส้นทางโดย) ฮาร์ดแวร์จำนวนมากเช่นเราเตอร์และเกตเวย์
ส่วนหัวของข้อมูลเมตาบนแพ็กเก็ตข้อมูลจะอธิบายถึงความยาวที่มาที่มาที่ไปโปรโตคอลที่ใช้และอื่น ๆ ข้อกำหนดของโปรโตคอลกำหนดส่วนหัว หากคุณสามารถระบุโปรโตคอลได้คุณสามารถกำหนดจุดเริ่มต้นและจุดสิ้นสุดของแต่ละฟิลด์ในส่วนหัวและอ่านข้อมูลเมตา
traceroute
ใช้ชุดโปรโตคอล TCP / IP และส่งแพ็กเก็ต User Datagram Protocol ส่วนหัวประกอบด้วยฟิลด์ Time to Live (TTL) ซึ่งมีค่าจำนวนเต็มแปดบิต แม้ชื่อจะบอกอะไร แต่ก็แสดงถึงการนับไม่ใช่ระยะเวลา
แพ็กเก็ตเดินทางจากต้นทางไปยังปลายทางผ่านเราเตอร์ ทุกครั้งที่แพ็กเก็ตมาถึงเราเตอร์จะลดตัวนับ TTL หากค่า TTL ถึงค่าหนึ่งเราเตอร์ที่รับแพ็กเก็ตจะลดค่าลงและสังเกตว่าตอนนี้เป็นศูนย์ จากนั้นแพ็คเก็ตจะถูกทิ้งและไม่ถูกส่งต่อไปยังการเดินทางครั้งต่อไปเนื่องจากแพ็กเก็ตนั้น "หมดเวลา"
เราเตอร์จะส่งข้อความ Internet Message Control Protocol (ICMP) Time Exceeded กลับไปยังจุดเริ่มต้นของแพ็กเก็ตเพื่อแจ้งให้ทราบว่าแพ็กเก็ตหมดเวลา ข้อความ Time Exceeded ประกอบด้วยส่วนหัวเดิมและ 64 บิตแรกของข้อมูลของแพ็กเก็ตดั้งเดิม สิ่งนี้กำหนดไว้ในหน้าที่หกของคำขอความคิดเห็น 792
ดังนั้นหากtraceroute
ส่งแพ็กเก็ตออกไป แต่ตั้งค่า TTL เป็นหนึ่งแพ็กเก็ตจะไปได้ไกลถึงเราเตอร์ตัวแรกเท่านั้นก่อนที่จะทิ้ง จะได้รับข้อความเกินเวลา ICMP จากเราเตอร์และสามารถบันทึกเวลาที่ใช้ในการเดินทางไปกลับ
จากนั้นทำแบบฝึกหัดซ้ำโดยตั้งค่า TTL เป็น 2 ซึ่งจะล้มเหลวหลังจากกระโดดสองครั้ง traceroute
เพิ่ม TTL เป็นสามแล้วลองอีกครั้ง กระบวนการนี้จะทำซ้ำจนกว่าจะถึงปลายทางหรือทดสอบจำนวนฮ็อพสูงสุด (30 โดยค่าเริ่มต้น)
เราเตอร์บางตัวเล่นได้ไม่ดี
เราเตอร์บางตัวมีจุดบกพร่อง พวกเขาพยายามส่งต่อแพ็คเก็ตด้วย TTL เป็นศูนย์แทนที่จะทิ้งและเพิ่มข้อความเกินเวลา ICMP
ตามที่ Cisco ระบุว่าผู้ให้บริการอินเทอร์เน็ต (ISP) บางราย จำกัด อัตราจำนวนข้อความ ICMP ที่ส่งต่อเราเตอร์ของตน
อุปกรณ์บางอย่างได้รับการกำหนดค่าไม่ให้ส่งแพ็กเก็ต ICMP บ่อยครั้งเพื่อให้แน่ใจว่าอุปกรณ์จะไม่ถูกบีบบังคับโดยไม่เจตนาให้เข้าร่วมในการปฏิเสธการให้บริการแบบกระจายเช่นการโจมตี smurf
traceroute
มีการหมดเวลาเริ่มต้นสำหรับการตอบกลับห้าวินาที หากไม่ได้รับการตอบกลับภายในห้าวินาทีความพยายามนั้นจะถูกยกเลิก ซึ่งหมายความว่าการตอบสนองจากเราเตอร์ที่ช้ามากจะถูกละเว้น
การติดตั้ง traceroute
traceroute
ได้รับการติดตั้งบน Fedora 31 แล้ว แต่ต้องติดตั้งบน Manjaro 18.1 และ Ubuntu 18.04 ในการติดตั้งtraceroute
บน Manjaro ให้ใช้คำสั่งต่อไปนี้:
sudo pacman -Sy traceroute
ในการติดตั้งtraceroute
บน Ubuntu ให้ใช้คำสั่งต่อไปนี้:
sudo apt-get install traceroute
ใช้ traceroute
ดังที่เราได้กล่าวไว้ข้างต้นtraceroute's
วัตถุประสงค์คือเพื่อกระตุ้นการตอบสนองจากเราเตอร์ในแต่ละครั้งที่กระโดดจากคอมพิวเตอร์ของคุณไปยังปลายทาง บางคนอาจจะปากแห้งและไม่ให้อะไรเลยในขณะที่คนอื่น ๆ อาจจะทำถั่วหกโดยไม่รู้สึกตัว
ตัวอย่างเช่นเราจะtraceroute
ไปที่เว็บไซต์ Blarney Castle ในไอร์แลนด์ซึ่งเป็นที่ตั้งของ Blarney Stone ที่มีชื่อเสียง ตำนานเล่าว่าถ้าคุณจูบ Blarney Stone คุณจะได้รับพรด้วย“ ของขวัญจาก gab” หวังว่าเราเตอร์ที่เราพบระหว่างทางจะมีความสวยงามอย่างเหมาะสม
เราพิมพ์คำสั่งต่อไปนี้:
traceroute www.blarneycastle.ie
บรรทัดแรกให้ข้อมูลต่อไปนี้แก่เรา:
- ปลายทางและที่อยู่ IP
- จำนวนครั้งของการกระโดด
traceroute
จะพยายามก่อนที่จะยอมแพ้ - ขนาดของแพ็กเก็ต UDP ที่เรากำลังส่ง
บรรทัดอื่น ๆ ทั้งหมดมีข้อมูลเกี่ยวกับหนึ่งในฮ็อพ ก่อนที่เราจะเจาะลึกรายละเอียดเราจะเห็นว่ามีการกระโดด 11 ครั้งระหว่างคอมพิวเตอร์ของเราและเว็บไซต์ Blarney Castle Hop 11 ยังบอกด้วยว่าเรามาถึงจุดหมายแล้ว
รูปแบบของแต่ละสายการกระโดดมีดังนี้:
- ชื่อของอุปกรณ์หรือหากอุปกรณ์ไม่ระบุตัวตนที่อยู่ IP
- ที่อยู่ IP
- เวลาที่ใช้ไป - กลับสำหรับการทดสอบทั้งสามครั้ง หากมีเครื่องหมายดอกจันอยู่แสดงว่าไม่มีการตอบสนองสำหรับการทดสอบนั้น หากอุปกรณ์ไม่ตอบสนองเลยคุณจะเห็นเครื่องหมายดอกจันสามตัวและไม่มีชื่ออุปกรณ์หรือที่อยู่ IP
ลองทบทวนสิ่งที่เรามีด้านล่าง:
- Hop 1:พอร์ตแรกของการโทร (ไม่มีการเล่นสำนวน) คือ DrayTek Vigor Router บนเครือข่ายท้องถิ่น นี่คือวิธีที่แพ็กเก็ต UDP ของเราออกจากเครือข่ายท้องถิ่นและเข้าสู่อินเทอร์เน็ต
- Hop 2:อุปกรณ์นี้ไม่ตอบสนอง บางทีอาจมีการกำหนดค่าไม่ให้ส่งแพ็กเก็ต ICMP หรือบางทีมันตอบสนอง แต่ช้าเกินไปจึง
traceroute
หมดเวลา - Hop 3:อุปกรณ์ตอบสนอง แต่เราไม่ได้รับชื่อมีเพียงที่อยู่ IP โปรดทราบว่ามีเครื่องหมายดอกจันอยู่ในบรรทัดนี้ซึ่งหมายความว่าเราไม่ได้รับการตอบสนองต่อคำขอทั้งสาม สิ่งนี้อาจบ่งบอกถึงการสูญเสียแพ็คเก็ต
- Hops 4 และ5:กระโดดแบบไม่ระบุตัวตนเพิ่มเติม
- Hop 6:มีข้อความมากมายที่นี่เนื่องจากอุปกรณ์ระยะไกลที่แตกต่างกันจัดการคำขอ UDP สามรายการของเรา มีการพิมพ์ชื่อและที่อยู่ IP (ค่อนข้างยาว) สำหรับแต่ละอุปกรณ์ สิ่งนี้สามารถเกิดขึ้นได้เมื่อคุณพบเครือข่าย "ที่มีประชากรมาก" ซึ่งมีฮาร์ดแวร์จำนวนมากเพื่อรองรับปริมาณการใช้งานจำนวนมาก การกระโดดครั้งนี้อยู่ใน ISP ที่ใหญ่ที่สุดแห่งหนึ่งในสหราชอาณาจักรดังนั้นมันจะเป็นเรื่องมหัศจรรย์เล็กน้อยหากฮาร์ดแวร์ระยะไกลชิ้นเดียวกันจัดการกับคำขอเชื่อมต่อสามรายการของเรา
- Hop 7:นี่คือแพ็กเก็ต UDP ของเราที่สร้างขึ้นเมื่อออกจากเครือข่าย ISP
- Hop 8:อีกครั้งเราได้รับที่อยู่ IP แต่ไม่ใช่ชื่ออุปกรณ์ การทดสอบทั้งสามกลับมาเป็นผลสำเร็จ
- Hops 9 และ 10:อีกสองกระโดดที่ไม่ระบุตัวตน
- Hop 11:เรามาถึงเว็บไซต์ Blarney Castle แล้ว ปราสาทอยู่ใน Cork ประเทศไอร์แลนด์ แต่ตามตำแหน่งทางภูมิศาสตร์ของที่อยู่ IP เว็บไซต์อยู่ในลอนดอน
ดังนั้นมันจึงเป็นถุงผสม อุปกรณ์บางอย่างเล่นบอลบางชิ้นตอบสนอง แต่ไม่บอกชื่อเราและอุปกรณ์อื่น ๆ ยังคงไม่ระบุชื่อโดยสิ้นเชิง
อย่างไรก็ตามเราไปถึงจุดหมายปลายทางแล้วเรารู้ว่ามันอยู่ห่างออกไป 11 ครั้งและเวลาไป - กลับสำหรับการเดินทางคือ 13.773 และ 14.715 มิลลิวินาที
การซ่อนชื่ออุปกรณ์
อย่างที่เราเห็นบางครั้งการใส่ชื่ออุปกรณ์ทำให้จอแสดงผลรก เพื่อให้ดูข้อมูลได้ง่ายขึ้นคุณสามารถใช้-n
ตัวเลือก (ไม่มีการแมป)
ในการทำสิ่งนี้กับตัวอย่างของเราเราพิมพ์ดังต่อไปนี้:
traceroute -n blarneycastle.ie
วิธีนี้ทำให้ง่ายขึ้นในการเลือกตัวเลขจำนวนมากสำหรับการกำหนดเวลาไป - กลับซึ่งอาจบ่งบอกถึงปัญหาคอขวด
Hop 3 เริ่มดูเป็นผู้ต้องสงสัยเล็กน้อย ครั้งที่แล้วตอบเพียงสองครั้งและครั้งนี้ตอบเพียงครั้งเดียว แน่นอนว่าในสถานการณ์นี้เราไม่สามารถควบคุมได้
อย่างไรก็ตามหากคุณกำลังตรวจสอบเครือข่ายองค์กรของคุณคุณควรเจาะลึกเข้าไปในโหนดนั้นอีกเล็กน้อย
การตั้งค่าการหมดเวลา traceroute
บางทีถ้าเราขยายระยะหมดเวลาเริ่มต้น (ห้าวินาที) เราจะได้รับคำตอบเพิ่มเติม ในการดำเนินการนี้เราจะใช้-w
ตัวเลือก (เวลารอ) เพื่อเปลี่ยนเป็นเจ็ดวินาที (โปรดทราบว่านี่คือตัวเลขทศนิยม)
เราพิมพ์คำสั่งต่อไปนี้:
traceroute -w 7.0 blarneycastle.ie
นั่นไม่ได้สร้างความแตกต่างมากนักดังนั้นคำตอบอาจหมดเวลา เป็นไปได้ว่าฮ็อพที่ไม่ระบุชื่อกำลังถูกลับโดยเจตนา
การตั้งค่าจำนวนการทดสอบ
โดยค่าเริ่มต้นtraceroute
จะส่งแพ็กเก็ต UDP สามชุดไปยังแต่ละครั้งที่กระโดด เราสามารถใช้ตัวเลือก-q
(จำนวนคิวรี) เพื่อปรับขึ้นหรือลง
เพื่อเพิ่มความเร็วในtraceroute
การทดสอบให้พิมพ์ข้อความต่อไปนี้เพื่อลดจำนวนแพ็คเก็ตโพรบ UDP ที่เราส่งไปหนึ่ง:
traceroute -q 1 blarneycastle.ie
สิ่งนี้จะส่งโพรบเดียวไปยังแต่ละฮอป
การตั้งค่า TTL เริ่มต้น
เราสามารถกำหนดค่าเริ่มต้นของ TTL เป็นค่าอื่นที่ไม่ใช่ค่าหนึ่งและข้ามการกระโดดบางอย่าง โดยปกติค่า TTL จะถูกกำหนดเป็นค่าหนึ่งสำหรับการทดสอบชุดแรกสองค่าสำหรับการทดสอบชุดถัดไปและอื่น ๆ หากเราตั้งค่าเป็นห้าการทดสอบครั้งแรกจะพยายามกระโดดขึ้นไปห้าและข้ามกระโดดหนึ่งถึงสี่
เนื่องจากเราทราบว่าเว็บไซต์ Blarney Castle ใช้คอมพิวเตอร์เครื่องนี้ 11 ครั้งเราจึงพิมพ์ข้อความต่อไปนี้เพื่อตรงไปที่ Hop 11:
traceroute -f 11 blarneycastle.ie
นั่นทำให้เราได้รับรายงานที่ดีและย่อเกี่ยวกับสถานะของการเชื่อมต่อกับปลายทาง
มีความเกรงใจ
traceroute
เป็นเครื่องมือที่ยอดเยี่ยมในการตรวจสอบการกำหนดเส้นทางเครือข่ายตรวจสอบความเร็วในการเชื่อมต่อหรือระบุปัญหาคอขวด Windows ยังมีtracert
คำสั่งที่ทำงานในลักษณะเดียวกัน
อย่างไรก็ตามคุณไม่ต้องการทิ้งระเบิดอุปกรณ์ที่ไม่รู้จักด้วย torrents ของแพ็กเก็ต UDP และระวังการรวมtraceroute
ไว้ในสคริปต์หรืองานที่ไม่ต้องดูแล
การโหลดtraceroute
สามารถวางบนเครือข่ายอาจส่งผลเสียต่อประสิทธิภาพการทำงาน เว้นแต่คุณจะอยู่ในสถานการณ์ที่แก้ไขได้ทันทีคุณอาจต้องการใช้นอกเวลาทำการปกติ