วิธีใช้คำสั่ง 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สามารถวางบนเครือข่ายอาจส่งผลเสียต่อประสิทธิภาพการทำงาน เว้นแต่คุณจะอยู่ในสถานการณ์ที่แก้ไขได้ทันทีคุณอาจต้องการใช้นอกเวลาทำการปกติ