การเลือกเส้นทาง: specificity vs metric


17

ผมเข้าใจว่าลินุกซ์เลือกเส้นทางที่เฉพาะเจาะจงมากที่สุดไปยังปลายทางเมื่อมันไม่เส้นทางเลือก แต่สิ่งที่เกี่ยวกับตัวชี้วัดเส้นทาง มันมีความสำคัญสูงกว่าความจำเพาะของเส้นทางหรือไม่

การอ้างอิงถึงรายละเอียดของอัลกอริทึมการเลือกเส้นทางที่ใช้โดย Linux จะได้รับการชื่นชม

คำตอบ:


26

ตัวชี้วัดเส้นทางคือการตั้งค่าในหมู่เส้นทางที่มีความจำเพาะเท่ากัน นั่นเป็นเรื่องจริงของการกำหนดเส้นทางโดยทั่วไป (เช่น Cisco, Windows, ฯลฯ ) ดังนั้นรูปแบบการทำงานเช่น:

  1. ค้นหาเส้นทางที่เฉพาะเจาะจงที่สุด (aka การจับคู่คำนำหน้าที่ยาวที่สุด * )
  2. หากมีหลายเส้นทางที่มีความเฉพาะเจาะจงเหมือนกันให้เลือกเส้นทางที่มีระยะทางในการดูแลต่ำที่สุด (สิ่งนี้จะแยกความแตกต่างระหว่างสิ่งต่าง ๆ เช่นเส้นทางที่แนบมาโดยตรงเส้นทางคงที่และโปรโตคอลเส้นทางต่างๆ)
  3. ภายในโปรโตคอลการกำหนดเส้นทางนั้นและเส้นทางเฉพาะ (หากความเฉพาะเจาะจงของเส้นทางและระยะทางการดูแลเหมือนกัน) ให้เลือกเส้นทางที่มีเมตริกต่ำสุด

โปรดทราบว่ามีสิ่งอื่น ๆ ที่อาจเกิดขึ้นเช่นการกำหนดเส้นทางตามนโยบายที่ให้คุณทำสิ่งต่าง ๆ เช่นเส้นทางตามที่อยู่ IP ต้นทาง แต่ความจำเพาะของเส้นทางระยะทางในการบริหารและจากนั้นการวัดก็เป็นสิ่งที่ฉันคิดว่าเป็นสามสิ่งหลัก

* มันถูกเรียกว่าคำนำหน้าการแข่งขันที่ยาวที่สุดเพราะเครือข่ายย่อยในไบนารี (/ 24 ตัวอย่าง) 11111111.11111111.11111111.00000000ลักษณะเช่น ดังนั้นเราเตอร์สามารถสแกนคำนำหน้าเพื่อหาเลขฐานสอง 1 และหยุดเมื่อมันมาถึงศูนย์แล้วก็จับคู่คำนำหน้า


1
นั่นไม่เป็นความจริงเลยบน Linux ซึ่งไม่มีความแตกต่างระหว่างระยะห่างระหว่างตัวชี้วัดและการดูแลระบบ
jch

1
@jch ทำ quagga และ co เลียนแบบโฆษณาโดยการตั้งค่าตัวชี้วัดตาม? (ไม่ว่าจุดของคุณไม่ได้สำคัญแค่อยากรู้)
ไคล์ Brandt

1
ไม่ Quagga ใช้ AD ภายในในzebradaemon และส่งเส้นทางที่เลือกไปยังเคอร์เนลเท่านั้นดังนั้นเคอร์เนลจึงไม่จำเป็นต้องจัดการกับ AD ฉันต้องตรวจสอบ แต่ฉันคิดว่า Quagga ตั้งค่าตัวชี้วัดเคอร์เนลเป็นค่าคงที่
jch

แค่ต้องการพูดถึงว่าสิ่งนี้ไม่ได้เกิดขึ้นจริงในสะพานอีเธอร์เน็ตตัวอย่างเช่นเส้นทางสองเส้นทางที่เหมือนกันผ่านอุปกรณ์ต่าง ๆ ที่มีตัวชี้วัดเดียวกันยังคงส่งผลให้ปริมาณการใช้ข้อมูลผิดพลาดผ่านลิงก์ที่ยาวและไม่ถูกต้อง
Areeb Soo Yasir

9

Linux มีเครื่องมือมากมายสำหรับการเลือกเส้นทางที่ยืดหยุ่น

ตารางเส้นทางเดียว

ในกรณีที่ง่ายที่สุดมีตารางการเราต์เคอร์เนลเพียงหนึ่งตารางและไม่มีเส้นทางที่มีแอ็ตทริบิวต์ SRC ตารางนี้มีจำนวนเส้นทางซึ่งถูกวางไว้ที่นั่นด้วยตนเอง ( ip route add) โดย DHCP daemon หรือโดยเส้นทาง daemons ในกรณีนี้เคอร์เนลเลือก:

  • เส้นทางเฉพาะที่สุด
  • หากมีเส้นทางที่เฉพาะเจาะจงหลายเส้นทางเท่ากันเส้นทางนั้นจะมีเคอร์เนลที่เล็กที่สุด

โปรดทราบว่าเคอร์เนลตัวชี้วัด (แสดงโดยip route show) ถูกเลือกโดย routing daemon และไม่จำเป็นต้องเกี่ยวข้องกับตัวชี้วัดของโปรโตคอลการกำหนดเส้นทางเฉพาะใด ๆ ตัวอย่างเช่น Quagga ใช้ตัวชี้วัดเดียวกันสำหรับเส้นทางทั้งหมดที่ติดตั้งในเคอร์เนลเป็นอิสระจากตัวชี้วัดของโปรโตคอล

เส้นทางเฉพาะที่มา

ลินุกซ์ยังสนับสนุนเส้นทางด้วยแอตทริบิวต์ SRC ซึ่งจับคู่แพ็กเก็ตกับแหล่งที่อยู่ที่กำหนดเท่านั้น SRC ใช้งานได้กับ IPv6 เท่านั้นและเริ่มใหม่จนกระทั่งเมื่อไม่นานมานี้ (3.11 หากใช้หน่วยความจำ) ฉันไม่แนะนำให้ใช้เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่

ตารางเส้นทางหลายรายการ

หากคุณต้องการความยืดหยุ่นมากกว่าที่ระบุไว้ข้างต้นคุณจะต้องเล่นกับตารางเส้นทางหลายเส้นทางและเขียนกฎเพื่อเลือกตารางเส้นทางหนึ่งตารางสำหรับแต่ละแพ็คเก็ต เทคนิคทั่วไปคือการส่งที่อยู่แหล่งที่มาเพื่อจำลองเส้นทางเฉพาะแหล่งที่มา อีกเทคนิคหนึ่งคือการเรียกใช้ดีมอนแต่ละตัวในตารางเส้นทางของตัวเองและจำลอง "ระยะทางการดูแล" ของซิสโก้ ทั้งหมดนี้จะอธิบายในรายละเอียดในบทที่ 4 ของ LARTC


นั่นไม่ใช่สิ่งที่srcแอตทริบิวต์ทำ คุณจะต้องการอ่านman ip-routeหรือเอกสารอื่น ๆ และใช้งานได้กับ IPv4 ฉันใช้เพื่อรับการรับส่งข้อมูลทั้งหมดรวมถึงทราฟฟิกของเราเตอร์ผ่านอุโมงค์ IPSec net-to-net เดียว
Zan Lynx

1
RTA_SRCแอตทริบิวต์ไม่ตรงกับสิ่งที่ผมพูด; มันสามารถเข้าถึงได้ด้วยfromตัวเลือกของipคำสั่ง ipคำสั่งของsrcตัวเลือกที่กำหนดRTA_PREFSRCแอตทริบิวต์ซึ่งเป็นสิ่งที่คุณอธิบาย
jch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.