Traceroute - ทุก ๆ แพ็คเก็ตมี TTL == 1


17

ฉันกำลังทำงานกับ Wireshark lab-IP ในระบบเครือข่ายคอมพิวเตอร์ - วิธีการจากบนลงล่างและฉันไม่เข้าใจว่าทำไมทุกแพ็กเก็ตที่หมดอายุตามปกติมี TTL เป็น 1

นี่คือไฟล์จับภาพ Wireshark ของฉัน https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng?dl=0

ฉันบันทึกการดำเนินการของtracerouteโปรแกรมใน Linux (ด้วยตัวเลือก 56 ไบต์) ตามที่ดำเนินการด้วยคำสั่งต่อไปนี้:

traceroute http://gaia.cs.umass.edu 56

คุณสามารถเห็นได้ว่าส่วนใหญ่ของแพ็กเก็ต TTL == 1 และฉันไม่รู้ว่าเพราะอะไรเพราะฉันรู้ว่าทุก ๆ การฟ้อนรำที่ตามมาจะมี TTL เป็น +1 (หรือมากกว่า)

PS:

  • ฉันใช้ Lubuntu บน VMware กับบริดจ์เชื่อมต่อกับโฮสต์
  • ฉันจับมันด้วย wireshark บนเครื่องโฮสต์ (Windows)
  • ฉันเชื่อมต่อกับ AP แบบไร้สายโดยใช้เซิร์ฟเวอร์ DHCP ของตัวเองบนโปรโตคอล NAT

คำตอบ:


14

ขอให้ฉันลองตอบคำถามนี้ดูเพราะมันซับซ้อนกว่านี้เล็กน้อย

ดูเหมือนว่าคุณรู้แล้วว่าการทำงานขั้นพื้นฐานของtracerouteแต่ก่อนที่สิ่งอื่นใดที่นี่เป็นบทสรุปที่เล็กมาก:

tracerouteพยายามกำหนดขั้นตอนทั้งหมดจากโฮสต์ของคุณไปยังโฮสต์ปลายทางหรือเพียงแค่ระยะทางเช่นจำนวนของฮ็อปจากโฮสต์ของคุณไปยังโฮสต์ปลายทาง เมื่อต้องการทำเช่นนั้นจะเริ่มส่งแพ็กเก็ตไปยังโฮสต์ปลายทางด้วยหมายเลขพอร์ตปลายทาง "สุ่ม" และ TTL ที่เริ่มต้นจาก 1 และเพิ่มขึ้นเรื่อย ๆ
แนวคิดคือเราเตอร์แต่ละตัวในระหว่างลด TTL โดย 1 ดังนั้นถ้า TTL ถึง 0 (ในความเป็นจริงมันไม่เคยทำเพราะเราเตอร์ที่กำลังจะลดลงถึง 0 ก่อให้เกิดข้อผิดพลาดก่อนหน้านั้น) เราเตอร์จะกลับ ICMP " เวลาที่จะมีชีวิตอยู่เกิน " ข้อผิดพลาดเช่นแพ็คเก็ตจำนวน 24ในแฟ้มการจับภาพของคุณ สิ่งที่คุณได้รับจากที่นั่นคือปลายทางของคุณอยู่ห่างออกไปและนี่คือเหตุผลที่คุณเพิ่ม TTL
เมื่อแพ็คเก็ตของคุณมี TTL ที่มีขนาดใหญ่พอที่จะไปถึงปลายทางคุณจะได้รับข้อความแสดงข้อผิดพลาด ICMP ที่แตกต่างกัน: " ปลายทางไม่สามารถเข้าถึงได้ (พอร์ตเข้าไม่ถึง) " เช่นหมายเลขแพ็คเก็ต 208ในไฟล์บันทึกของคุณ สิ่งที่คุณได้รับจากสิ่งนั้นก็คือ TTL ที่ใช้ล่าสุดคือจำนวนของฮ็อประหว่างคุณและโหนดปลายทาง เหตุผลที่คุณได้รับข้อผิดพลาดเพียงเพราะคุณกำลังส่งข้อความไปยังพอร์ต "สุ่ม" ที่โหนดปลายทาง (หวังว่า) ไม่ฟัง

ตอนนี้จะเจาะจงไฟล์การจับภาพของคุณ:
จากหน้าคู่มือของtracerouteเราจะเห็นว่าแต่ละ TTL ใช้ 3 ครั้ง (ตัวเลือก '-q') และโปรโตคอลเริ่มต้นที่ใช้คือUDP (ตัวเลือก '-P') โดยการตรวจสอบครั้งแรก 3 แพ็คเก็ต UDP คือแพ็คเก็ต 8-9-10เราสามารถมองเห็นแน่นอนว่าTTL เป็น 1 3 ถัดไปคือ11-12-13มีTTL 2เป็นต้น ดังนั้นจากมุมมองของแหล่งที่มาทุกอย่างดูเหมือนจะไปได้ดี

หลังจากนั้นบางครั้งขึ้นอยู่กับความล่าช้าของเครือข่ายเราเริ่มรับข้อความแสดงข้อผิดพลาดที่คาดไว้ ดังนั้นเราจะเห็นได้ว่าแพ็กเก็ตข้อผิดพลาด24-25-26เป็นแพ็กเก็ตข้อผิดพลาด" เวลามีชีวิตเกิน " และหมายความว่าปลายทางนั้นอยู่ไกลออกไป

ความพยายามและข้อผิดพลาดนี้ไปมาจนกระทั่งในที่สุดแพ็คเก็ต 208และคุณจะเห็นข้อความแสดงข้อผิดพลาด" พอร์ตที่เข้าไม่ถึง " ซึ่งหมายความว่าปลายทางของคุณมาถึงแล้ว

ด้วยการนับแพ็คเก็ตที่คุณส่งและการตอบกลับคุณสามารถค้นหาได้จากร่องรอยที่ TTL ใช้งานได้จริง แต่เป็นงานที่น่าเบื่อ :)

หวังว่าจะช่วย


คำอธิบาย super
ksp0422

14

ลูกค้าของคุณกำลังส่งแพ็กเก็ตสามชุดแรกที่มี TTL 1 สามชุดถัดไปจะถูกส่งด้วย TTL ที่ 2 สามชุดถัดไปจะส่งด้วย TTL ที่ 3 เป็นต้นไปเรื่อย ๆ

วิธีที่ง่ายกว่าในการดูนี่คือการตั้งค่าฟิลด์ IP TTL เป็นคอลัมน์ของตัวเองใน Wireshark เพียงคลิกขวาที่ค่า TTL ในแพ็คเก็ตใด ๆ และเลือก "ใช้เป็นคอลัมน์": ตั้งค่า TTL เป็นคอลัมน์ใน Wireshark

จากตรงนั้นคุณจะเห็นว่าแพ็กเก็ต 8,9,10 มี TTL เป็น 1 และแพ็คเก็ต 11,12,13 มี TTL เป็น 2 และต่อ ๆ ไปเรื่อย ๆ TTL ใน Traceroute

สิ่งนี้เกิดขึ้นเพราะ Traceroute ทำงาน มันต้องใช้ประโยชน์จากสิ่งที่เราเตอร์ไม่เมื่อมันลด TTL 0 แทนที่จะดำเนินการต่อการส่งต่อแพ็คเก็ตที่จะส่งกลับไปยังลูกค้าเดิม "ICMP TTL หมดอายุในข้อความการขนส่ง" (ดูแพ็คเก็ต # 24 ในการจับกุมของคุณ)

ดังนั้นในฐานะลูกค้าเมื่อคุณส่งแพ็กเก็ตชุดแรกที่มี TTL เป็น 1 เราเตอร์แรกในเส้นทางจะตอบกลับด้วยข้อความ TTL หมดอายุ จากนั้นคุณวัดระยะเวลาที่ใช้ในการรับข้อความหมดอายุของ TTL เมื่อคุณส่งข้อความเริ่มต้นและนั่นจะให้ค่าสามค่าแรกของคุณในผลลัพธ์ Traceroute

จากนั้นคุณส่งชุดข้อมูลสามชุดอีกชุดด้วย TTL 2 เราเตอร์แรกในเส้นทางลดขนาดนี้เป็น 1 จากนั้นส่งต่อไปยังเราเตอร์ถัดไปในเส้นทาง เมื่อเราเตอร์ตัวที่สองได้รับมันจะลด TTL เป็น 0 ซึ่งจะแจ้งให้มันวางแพ็กเก็ตและส่ง TTL หมดอายุระหว่างทาง

กระบวนการจะดำเนินต่อไปจนกว่าลูกค้าของคุณจะได้รับข้อความ (หมดอายุสาม) TTL ที่หมดอายุจากเราเตอร์ทุกตัวที่อยู่ระหว่างการส่งระหว่างคุณและปลายทางสุดท้ายที่คุณใช้งาน traceroute


อธิบายได้ดีที่สุดด้วยสายตา
ksp0422

@Eddie นี่อาจไม่เกี่ยวข้องกับคำถามนี้ แต่นี่เป็นรายละเอียดเล็ก ๆ น้อย ๆ ที่ฉันคิดว่าถามในความคิดเห็น คุณสามารถระบุว่าจะเกิดอะไรขึ้นหากโฮสต์ (ไม่ใช่เราเตอร์) รับดาตาแกรมด้วยฟิลด์ TTL 1
Vimal Patel

1
@VimalPatel หากแพ็กเก็ตถูกกำหนดไปยังโฮสต์โฮสต์ก็ยอมรับแพ็คเก็ต วางแพ็กเก็ตหาก TTL พบ 0 เป็นฟังก์ชันเราเตอร์
Eddie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.