ทำไมการยุ่งเกี่ยวกับ TTL ของ IP จึงเป็นอันตราย


51

ฉันได้อ่าน iptables man-page (อ่านก่อนนอนเบา ๆ ) และฉันเจอเป้าหมาย 'TTL' แต่มันเตือน:

การตั้งค่าหรือเพิ่มฟิลด์ TTL อาจมีอันตรายมาก

และ

ไม่เคยตั้งค่าหรือเพิ่มค่าในแพ็กเก็ตที่ออกจากเครือข่ายท้องถิ่นของคุณ!

ฉันเห็นได้ว่าการลดหรือการตั้งค่า TTL ที่ต่ำกว่าอาจทำให้แพ็กเก็ตหล่นก่อนที่จะถึงปลายทางได้ แต่การเพิ่มขึ้นของผลกระทบใดบ้าง

คำตอบ:


67

TTL ลดลงเมื่อมันผ่านเราเตอร์ สิ่งนี้ทำให้แน่ใจว่าหากแพ็กเก็ตเดินทางเป็นวงกลมมันจะตายในที่สุด

ฟิลด์ TTL ของแพ็กเก็ต IP v4 เป็นฟิลด์ 8 บิต (255 ฐานสิบ) ดังนั้นการตั้งค่าให้สูงในตอนเริ่มต้นนั้นไม่ใช่เรื่องใหญ่เพราะมันไม่สามารถมีขนาดใหญ่ในแพ็คเก็ตที่มีรูปแบบที่ดี (แม้ว่าบางสิ่งบางอย่างอาจยอมรับแพ็กเก็ต IP ที่มีรูปแบบไม่ถูกต้อง)

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


20

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


นี่เป็นข้อมูลเพิ่มเติมเกี่ยวกับการหมดอายุของ TTL แต่จะมีรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับสิ่งที่คุณพูด: cisco.com/web/about/security/intelligence/ttl-expiry.html
NickW

5

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

ปรับปรุง: ตามหน้านี้ใน Wikipedia :

ในทางทฤษฎีภายใต้ IPv4 เวลาที่ใช้งานจริงวัดเป็นวินาทีแม้ว่าโฮสต์ทุกตัวที่ผ่านดาตาแกรมจะต้องลด TTL ลงอย่างน้อยหนึ่งยูนิต ในทางปฏิบัติฟิลด์ TTL จะลดลงทีละหนึ่งทุก ๆ การฟ้อนรำ เพื่อสะท้อนถึงการปฏิบัตินี้ฟิลด์จะถูกเปลี่ยนชื่อขีด จำกัด การกระโดดใน IPv6

อัปเดต 2: เมื่อมีคนอัพเดตโพสต์ของฉันและอ้างอิง Wikipedia ฉันคิดว่ามันจะเป็นการดีที่สุดถ้าจะอ้างอิง RFC เอง - http://www.ietf.org/rfc/rfc791.txt - เพียงแค่ค้นหา TTL ในนั้นและมันค่อนข้าง เป็นงานที่ดีในการอธิบาย:

ฟิลด์นี้ระบุเวลาสูงสุดที่เดตาแกรมได้รับอนุญาตให้อยู่ในระบบอินเทอร์เน็ต ... ทุกโมดูลที่ประมวลผลดาตาแกรมจะต้องลด TTL ลงอย่างน้อยหนึ่งครั้งแม้ว่ามันจะประมวลผลดาตาแกรมในเวลาน้อยกว่าหนึ่งวินาที

2
อย่างไรก็ตาม - หากคุณเพิ่มแพ็กเก็ตที่เกิดขึ้นในเครือข่ายของคุณตามมูลค่าที่มีหากพวกเขามีต้นกำเนิดมาจากเราเตอร์ของคุณแพ็กเก็ตส่งคืนจะไปถึงเราเตอร์ของคุณ (และจากนั้นคุณสามารถเพิ่มแพ็คเก็ตได้ เครือข่ายท้องถิ่น)
สุ่ม 832

ฉันชอบมุมมองใหม่เกี่ยวกับวิธีการและคุณจะได้รับ upvote ของฉันสำหรับสิ่งนั้น อย่างไรก็ตามเดิมที TTL นั้นตั้งใจจะลดลงหนึ่งครั้งทุกวินาทีที่แพ็กเก็ตที่ใช้ในเครือข่ายเช่นเดียวกับทุก ๆ การฟ้อนรำ นิยามทางประวัติศาสตร์นั้นถูกเพิกเฉยในทุกวันนี้ - อย่างไรก็ตามมันไม่สามารถสันนิษฐานได้ว่าเส้นทางระหว่างสองโหนดนั้นสมมาตรหรือแม้กระทั่งเหมือนกันจากการส่งแพ็กเก็ตหนึ่งไปยังอีก
PP

จริง คุณสามารถได้ผลลัพธ์แปลก ๆ โดยใช้ tracert บางครั้งถ้า packet x ใช้เส้นทางที่แตกต่างจาก packet y! นอกจากนี้ขอขอบคุณสำหรับข้อมูลเกี่ยวกับเวลาในการติดตามด้วยเช่นกันฉันไม่รู้ด้วยซ้ำว่า (แม้ว่าถ้าแพ็กเก็ตไม่ได้ประทับเวลาที่จะลดลงได้ก็ต่อเมื่อเราเตอร์ที่ยึดไว้ไม่สามารถทำได้)
Matthew Steeples

@PP คุณมีข้อมูลอ้างอิงสำหรับการอ้างสิทธิ์ว่า TTL นั้นควรจะลดลงหนึ่งครั้งต่อวินาทีหรือไม่ หากไม่มีนาฬิกาซิงโครไนซ์ที่มีความแม่นยำสูงซึ่งแน่นอนว่าไม่ใช่เรื่องธรรมดาในยุคแรก ๆ ของอินเทอร์เน็ต (นับประสาที่โฮสต์จำนวนมากจัดการกับเวลาท้องถิ่นเท่านั้น) ฉันไม่เห็นว่าจะทำอย่างไรได้อย่างน่าเชื่อถือ
CVn

3
@ MichaelKjörlingมันถูกกำหนดไว้ใน RFC 791 ซึ่งกำหนด IPv4
Michael Hampton

3

ฉันรู้ว่าเพียงแค่โปรแกรมหนึ่งที่สามารถใช้ค่า TTL tracerouteที่สูงขึ้นและนั่นคือ ดังที่ชื่อกล่าวมันจะติดตามเส้นทางไปยังโฮสต์ปลายทางโดยปรับเปลี่ยนค่า TTL กระโดดสูงสุดมาตรฐานคือ 20 แต่คุณสามารถเพิ่มได้


2
(การใช้งานส่วนใหญ่) traceroute ยังพึ่งพาข้อความ ICMP Time Exceededเพื่อบอกว่าแพ็กเก็ตมาถึงปลายทางหรือไม่ นอกเหนือจากข้อความที่เกินเวลาเป็นเหตุผลหนึ่งที่ทำให้การบล็อก ICMP ทันทีเป็นความคิดที่ไม่ดี
CVn

0

เราเตอร์แต่ละตัวที่จัดการแพ็คเก็ตจะลดค่า TTL จนกว่าแพ็กเก็ตจะถึงปลายทางหรือ TTL ถึงศูนย์และตาย

อย่างที่คนอื่นพูดการเพิ่ม TTL อาจส่งผลให้แพ็กเก็ตที่ไม่เคยตายถ้ามีวงจรลบ โดยทั่วไปหากค่า TTL ไม่ใหญ่พอตรรกะในการลอง TTL ที่มีขนาดใหญ่กว่านั้นน่าจะถูกจัดการโดยไคลเอนต์แบบ end-to-end

หากคุณแน่ใจว่าเราเตอร์ไม่ได้อยู่ในวัฏจักร (โทโพโลยีแบบต้นไม้) ในทางทฤษฎีคุณสามารถเพิ่มค่า TTL ได้อย่างปลอดภัย ต้องบอกว่าการอนุญาตให้ฮ็อปมากกว่ามาตรฐานอาจทำให้แออัดในเครือข่ายภายนอกมีแนวโน้มมากขึ้น หากคุณมีเราเตอร์ที่มีสายยาวระหว่างเครือข่ายภายในและภายนอกตราบใดที่ไม่มีวัฏจักรค่า TTL ที่มากขึ้นอาจช่วยได้ ต้องบอกว่ามันอาจเป็นเรื่องง่ายสำหรับบางคนที่จะเพิ่มขอบเครือข่ายและสร้างวงจรดังนั้นเริ่มต้นด้วยค่า TTL ที่ใหญ่กว่าซึ่งแพ็กเก็ตที่มาในตอนแรกนั้นปลอดภัยกว่ามาก

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