Segment Routing : بررسی مفاهیم پایه و عملکرد

در این پست سعی شد تا دلایل و مشکلاتی که سبب پر رنگ شدن ایده ی Source Routing و تولد راهکاری با نام Segment Routing گشتند، بررسی شوند. Segment Routing تکنولوژی نه چندان جدید برای انجام Source Routing می باشد. در این روش، مبدا مسیری را انتخاب کرده و آن را در قالب لیستی از سگمنت ها در هدر پکت قرار می دهد. segment ها مشخص کننده ی رفتار و عملی هستند که باید در قبال پکت صورت گیرد. با استفاده از سگمنت روتینگ در شبکه ها، دیگر نیازی نیست که منطق ارسال پکت ها حتما بر اساس یک application خاص یا بر اساس یک جریان خاص باشد، بلکه forward پکت ها تنها بر اساس همان دستورالعملی که توسط سگمنت ها مشخص شده اند، صورت می گیرد.

تفاوت سگمنت روتینگ با MPLS و MPLS-TE در آن است که، Segment Routing از هیچ پروتکل اضافه تری چون LDP و RSVP برای سیگنالینگ و forward اطلاعات خود در طول یک دامنه ی SR استفاده نمی کند بلکه در مقابل، این اعمال را تنها با بهره گرفتن از قابلیت های توسعه یافته ی پروتکل هایی چون OSPF و IS-IS انجام می دهد. هم چنین در هنگام اجرا در یک ساختار MPLS یا IPv6، می تواند مستقیما از data plane آن ها بهره گیرد. اگر ساختار MPLS باشد، SR مستقیما از MPLS Data Plane بدون هیچ تغییری در آن، استفاده می کند. مزیت دیگر SR نسبت به MPLS در استفاده ی کارآمدتر از bandwidth و همینطور کاهش latency است.

Segment Routing: مفاهیم پایه

یک دامنه ی SR مجموعه ای از روترها است که اصطلاحا همه ی آن ها SR-Capable می باشند به این معنا که قابلیت تشخیص و کار با سگمنت ها را دارند. مشابه LSP در MPLS، مسیری در دامنه ی SR که به منظور ارتباط نقاط مختلف از آن استفاده می شود، SR-PATH نام دارد. SR-PATH الزاما کوتاهترین مسیر محاسبه شده توسط IGP نیست. به بیان بهتر SR-PATH می تواند کوتاهترین مسیر محاسبه شده توسط IGP و یا مسیری که بر حسب پارامترهای TE تعیین شده است، باشد. در واقع این سگمنت ها هستند که هر کدام بخشی از مسیر را مشخص می کنند که ترکیب آن ها با هم، نشان دهنده ی کل مسیر از یک مبدا تا یک مقصد مشخص می باشد.

اگر قرار بر بررسی SR در ساختار MPLS باشد، سگمنت ها معادل label ها در MPLS هستند و چندین سگمنت در قالب MPLS Label Stack گنجانده می شوند. در قبال سگمنت ها نیز همان اعمال مربوط به Label ها یعنی: PUSH، عمل POP (که در SR تحت عنوان NEXT خطاب می شود) و SWAP (که در SR تحت عنوان Continue خطاب می شود) صورت می گیرد. هنگامی که روتری پکتی را در دامنه ی SR دریافت می کند، بالاترین سگمنت در stack را مورد پردازش قرار داده و عمل تعیین شده برای سگمنت را در قبال آن انجام می دهد.

هر سگمنت توسط شناسه ای با نام Segment ID یا به اختصار SID، مشخص می شود. SID عددی صحیح و ۳۲ بیتی است. SID ها توسط IGP extension ها در دامنه ی SR توزیع می شوند.

SID ها یا globally unique هستند به این معنا که چنین SID هایی در کل دامنه ی SR توسط تمام روترها قابل تشخیص می باشند و یا locally هستند که چنین SID هایی تنها توسط روتری که تولید شده اند قابل شناسایی و فهم می باشند. در دامنه ی SR هر روتر (یا همان node) و هر لینک (یا همان adjacency) دارای یک SID است.

نهاد IETF انواع مختلفی از سگمنت ها را معرفی کرده که مهم ترین آن ها عبارتند از:

۱- IGP Prefix segment:
این سگمنت ها حاوی آدرس IP یک Prefix می باشند که توسط یک IGP فرا گرفته شده است. شناسه ی این سگمنت ها Prefix SID نام دارد و این SID ها globally unique می باشند. node segment ها فرم خاصی از Prefix segment ها هستند که حاوی آدرس IP اینترفیس loopback یک نود به صورت یک Prefix بوده و مشخص کننده ی یک نود می باشند.

۲-IGP adjacency segment:
این سگمنت ها حاوی ارتباطات adjacency یک روتر با همسایه اش می باشند. در واقع منظور از adjacency، لینک بین دو روتر همسایه است. به SID این سگمنت ها اصطلاحا adjacency SID گفته می شود. adjacency SID ها هم می توانند locally unique باشند و هم globally unique. به این معنا که یک adjacency segment هم می تواند تنها به لینک ارتباطی بین یک روتر و همسایه اش اشاره داشته و یا این که به چندین hop در دامنه ی IGP، اشاره داشته باشد.

۳- IGP Anycast segment:
این سگمنت ها مشابه Prefix segment ها می باشند با این تفاوت که مشخص کننده ی یک Prefix یا یک روتر خاص نیستند بلکه به مجموعه ای از روترها اشاره دارند. شناسه ی این سگمنت ها یا اصطلاحا Anycast SID ها نیز همانند Prefix SID ها globally unique هستند.

۴- Binding segment:
نشان دهنده ی یک tunnel در دامنه ی SR می باشد. حال این تانل می تواند یک SR-Path دیگر، یک سیگنال LDP یا یک سیگنال RSVP-TE و یا هر encapsulation دیگری باشد.

هر روتری که SR بر روی آن فعال شده باشد، رنجی از Label های MPLS را برای سگمنت های global ذخیره می کند که اصطلاحا SR Global Block یا به اختصار SRGB خطاب می شود.

ادمین شبکه به هر روتر، یک node SID منحصر به همان روتر اختصاص می دهد. از سوی دیگر adjacency SID ها توسط روتر تولید می شوند و مقدار آن ها متفاوت از مقادیر node SID هاست. SID ها هدایت کننده ی داده ها در طول یک مسیر مشخص می باشند.

Segment Routing: عملکرد

مثال اول: تعیین مسیر با استفاده از adj-SID ها

 adj-SID ها، در واقع local label هایی هستند که به یک اینترفیس خاص و next-hop ای که در سر دیگر اینترفیس قرار دارد، اشاره دارند. adj-SID ها نیاز به پیکربندی خاصی ندارند و به محض فعال شدن SR برای OSPF یا IS-IS، روتر به صورت خودکار به هر اینترفیسی که بر روی آن این IGP ها فعال باشند، یک adj-SID اختصاص می دهد.

 IS-IS برای تبلیغ این SID ها، از sub-TLV های جدیدی تحت عنوان Adj-SID sub-TLV بهره می گیرد که عبارتند از:

  • TLV 22 (Extended IS Reachability) [RFC 5305]
  • TLV-222 (Multitopology IS) [RFC5120]
  • TLV-23 (IS Neighbor Attribute) [RFC5311]
  • TLV-223 (Multitopology IS Neighbor Attribute) [RFC5311]
  • TLV-141 (inter-AS reachability information) [RFC5316]

در OSPF نیز برای تبلیغ این SID ها از adj-SID sub-TLV (Type 2) و LAN adj-SID sub-TLV (Type 3) بهره گرفته می شود.

لازم به ذکر است که این توسعه های جدید تعریف شده هنوز در حال بررسی و گسترش می باشند که برای آشنایی با قالب این TLVها و همچنین پیگیری روند تغییرات و پیشرفت آن ها برای IS-IS می توانید به این لینک و برای OSPF نیز به این لینک مراجعه نمایید.

ساختار زیر را در نظر بگیرید:

Segment Routing:adj-SID

در این ساختار، بر روی تمام روترها، SR فعال شده و هر روتر، adj-SID اختصاص داده به همسایه ی دیگر در آن سر لینک خود را از طریق IGP پیکربندی شده، به همسایه های خود تبلیغ می کند. هدف، انتقال ترافیک از روتر R1 به R7 می باشد. در حالت عادی و بدون هیچ پیکربندی خاصی، R1 برای انتقال ترافیک به سمت R7 از کوتاهترین مسیر ممکن (R1-R2-R3-R7) بهره می گیرد. اما قصد داریم تا با استفاده از SR کاری کنیم که ترافیک ها از مسیر: R1-R2-R4-R6-R7 ارسال شوند.

برای انجام این عمل، R1 یک stack مطابق آن چه در تصویر نشان داده شده ساخته، آن را به هدر پکت اضافه کرده و پکت را برای R2 ارسال می کند. R2 با دریافت این پکت، خارجی ترین lable در stack را بررسی کرده و متوجه می شود که گام بعدی برای ارسال پکت، R4 است. پس ابتدا خارجی ترین lable را PoP کرده و سپس پکت را به سمت R4 ارسال می کند. این عمل به همین منوال بر روی سایر روترهای تعیین شده در stack، ادامه می یابد تا پکت به مقصد مورد نظر یعنی R7 برسد.

مثال دوم: استفاده از Prefix-Segment

در یک ساختار MPLS، به صورت پیش فرض بدون هیچ پیکربندی خاصی، با فعال شدن Segment Routing بر روی یک روتر، روتر مجموعه ای از local label ها را تحت عنوان SR Global Block به منظور اختصاص این label ها به global segment ها، رزرو می کند. به عنوان مثال، رنج پیش فرض در نظر گرفته شده برای SRGB در روترهای سیسکو از ۱۶۰۰۰ تا ۲۳۹۹۹ می باشد که این رنج پیش فرض را می توان تغییر داد.

توصیه می شود که تمام روترهای داخل دامنه ی SR از رنج یکسانی برای SRGB استفاده نمایند اما امکان آن که هر نود، SRGB متفاوتی نسبت به سایر نودها داشته باشد نیز وجود دارد.

Prefix-SID ها به یک MPLS Local label ترجمه می شوند. نحوه ی ترجمه ی آن ها به این صورت است که: مقدار تعریف شده برای prefix-SID به علاوه ی کم ترین مقدار رنج در نظر گرفته شده برای SRGB می شود. به عنوان مثال در یک روتر سیسکو، اگر برای Prefix 10.10.10.0/24، مقدار ۱۰ به عنوان index یا همان Prefix-SID تعریف شود و رنج SRGB نیز همان رنج پیش فرض باشد، نهایتا آن چه به عنوان label به Prefix 10.10.10.0/24 اختصاص داده می شود مقدار ۱۶۰۱۰ خواهد بود.

ساختار زیر را در نظر بگیرید:

Segment Routing: node-SID

در این ساختار هدف آن است که R1 پکتی را به مقصد ۱۰٫۱۰٫۱۰٫۱ که متصل به R7 می باشد، از مسیر R1-R2-R4-R6-R7 ارسال نماید. همانطور که در بالا نیز اشاره گردید، Node-SID ها فرم خاصی از Prefix-SID ها می باشند که مشخص کننده ی یک نود بوده و معمولا به اینترفیس loopback پیکربندی شده بر روی روتر اختصاص می یابند. در این ساختار همانطور که در تصویر مشخص شده، در هر روتر به Prefix اینترفیس loopback آن روتر، index ای مطابق با شماره ی روتر اختصاص یافته است. به عنوان مثال: برای Prefix 1.1.1.1/32 مربوط به اینترفیس loopback روتر R1، مقدار ۱ به عنوان index در نظر گرفته شده است. از سوی دیگر تمام روترهای درون ساختار از رنج پیش فرض SRGB، استفاده می کنند. پس با توجه به فرمول بالا، آن چه به عنوان label یا node-SID از طرف R1 برای سایر همسایگان IGP اش، ارسال می شود: ۱۶۰۰۱ می باشد. برای سایر روترها نیز به همین صورت خواهد بود.

از سوی دیگر در روترR7 برای Prefix 10.10.10.0/24 مقدار ۱۰ به عنوان index تعیین شده است و آن چه به عنوان label این Prefix برای سایر روترهای دامنه ی SR تبلیغ شده و در RIB آن ها ثبت می گردد، مقدار ۱۶۰۱۰ است.

روتر R1 برای آن که پکت به مقصد ۱۰٫۱۰٫۱۰٫۰/۲۴ را بر اساس مسیر تعیین شده ارسال نماید، stack ای حاوی Prefix-SID مربوط به ۱۰٫۱۰٫۱۰٫۰/۲۴ و سپس node-SID روترهای R4-R6 ایجاد کرده، آن را به هدر پکت اضافه کرده و برای R2 ارسال می کند. روتر R2 با دریافت پکت و بررسی خارجی ترین label متوجه می شود که گام بعدی برای ارسال پکت، روتر R4 است. پس ابتدا خارجی ترین label را POP کرده و سپس پکت را برای R4 ارسال می کند. این روند به همین منوال ادامه می یابد تا نهایتا پکت به مقصد موردنظر برسد.

آن چه تا به اینجا شرح داده شد مفاهیم پایه و مثال هایی ساده از نحوه ی عملکرد Segment Rouing بودند. اگر علاقه مند به تست و پیکربندی SR برای یک ساختار ساده و بررسی موارد بیان شده در این پست می باشید، می توانید با مراجعه به این لینک، سناریوی پیکربندی SR برای یک ساختار ساده را دریافت نمایید.

 این مطلب ادامه دارد…

نویسنده: مینا رضائی

محقق و همیشه در حال یادگیری، عاشق نقاشی، گاهی هم نویسندگی یا تألیف کتابای بزرگ :) (مسئولیت و صحت و سقم کلیه ی مطالب منتشر شده از جانب من تنها بر عهده ی خودم می باشد)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site uses Akismet to reduce spam. Learn how your comment data is processed.