Split Horizon چیست؟ جلوگیری از حلقه مسیریابی در RIP و MikroTik

پروتکل‌های مسیریابی وظیفه دارند اطلاعات مربوط به شبکه‌های مقصد و بهترین مسیر دسترسی به آن‌ها را میان روترها مبادله کنند. اگر این اطلاعات به شکل نادرست منتشر شوند، ممکن است دو یا چند روتر یک مسیر اشتباه را از یکدیگر یاد بگیرند و بسته‌ها را به‌صورت مداوم میان خود جابه‌جا کنند.

این وضعیت با نام Routing Loop یا حلقه مسیریابی شناخته می‌شود. حلقه مسیریابی می‌تواند باعث Packet Loss، افزایش تأخیر، مصرف بیهوده پهنای باند، اشغال منابع پردازنده روترها و قطع دسترسی کاربران به مقصد شود.

Split Horizon یکی از مکانیزم‌های جلوگیری از حلقه در پروتکل‌های Distance Vector مانند RIP است. قانون اصلی آن ساده است:

روتر نباید مسیری را از همان Interface یا همسایه‌ای که آن را آموخته است، دوباره به همان سمت Advertise کند.

برای مثال، اگر Router B مسیر شبکه X را از Router A یاد بگیرد، نباید همان مسیر را دوباره به Router A اعلام کند. زیرا Router A ممکن است پس از خرابی مسیر اصلی، تصور کند Router B یک مسیر جایگزین برای شبکه X دارد؛ درحالی‌که مسیر Router B نیز در اصل از خود Router A آموخته شده است.

در این مقاله علاوه بر مفهوم Split Horizon، نحوه ایجاد Routing Loop، مشکل Count to Infinity، تفاوت Split Horizon با Poison Reverse و Route Poisoning، محدودیت آن در شبکه‌های Hub-and-Spoke و روش تنظیم آن در MikroTik RouterOS v7 را بررسی می‌کنیم.

نتیجه سریع: Split Horizon جلوی بازگشت Advertisement یک Route به سمت منبع یادگیری آن را می‌گیرد. در حالت ساده، Route از Update حذف می‌شود؛ در Poison Reverse همان Route با Metric غیرقابل‌دسترسی به سمت منبع اعلام می‌شود. این مکانیزم برای RIP و بعضی پروتکل‌های Distance Vector اهمیت دارد، اما جایگزین طراحی صحیح توپولوژی، Route Filtering و مانیتورینگ شبکه نیست.

Split Horizon چیست؟

Split Horizon یک قانون کنترلی در فرایند انتشار اطلاعات Routing است. براساس این قانون، مسیری که از یک Interface یا Neighbor آموخته شده است، از همان مسیر به منبع آن بازگردانده نمی‌شود.

فرض کنید Router B از طریق Interface متصل به Router A، مسیر زیر را یاد گرفته است:

Destination: 10.10.10.0/24
Next Hop: Router A
Metric: 1
Learned via: ether1

هنگام ارسال RIP Update روی همان Interface، Router B نباید به Router A اعلام کند که شبکه 10.10.10.0/24 از طریق Router B قابل دسترسی است.

اگر این Advertisement ارسال شود و مسیر اصلی در Router A از دسترس خارج شود، Router A ممکن است Router B را به‌عنوان مسیر جایگزین انتخاب کند. در این صورت:

Router A → Router B → Router A → Router B → ...

بسته‌ها تا زمانی که TTL آن‌ها به صفر برسد میان دو روتر گردش خواهند کرد.

پروتکل Distance Vector چگونه کار می‌کند؟

پروتکل‌های Distance Vector معمولاً درباره کل توپولوژی شبکه دید کاملی ندارند. هر روتر اطلاعاتی درباره موارد زیر از همسایه‌های خود دریافت می‌کند:

  • شبکه مقصد
  • فاصله یا Metric مقصد
  • همسایه‌ای که مسیر را Advertise کرده است

در RIP، Metric براساس تعداد Hopها محاسبه می‌شود. هر روتر هنگام دریافت یک Route، یک واحد به Metric آن اضافه می‌کند.

مثال:

شبکه X مستقیماً به Router A متصل است: Metric 0
Router B شبکه X را از A یاد می‌گیرد: Metric 1
Router C شبکه X را از B یاد می‌گیرد: Metric 2

این روش ساده و کم‌هزینه است، اما یک محدودیت مهم دارد: هر روتر به اطلاعاتی که همسایه‌هایش Advertise می‌کنند وابسته است و همیشه نمی‌داند مسیر اعلام‌شده از چه زنجیره‌ای عبور کرده است.

Routing Loop چیست؟

Routing Loop زمانی ایجاد می‌شود که مجموعه‌ای از روترها بسته یک مقصد را به یکدیگر ارسال کنند، بدون اینکه بسته به مقصد واقعی برسد.

یک حلقه دو روتره می‌تواند به شکل زیر باشد:

Router A:
10.10.10.0/24 via Router B

Router B:
10.10.10.0/24 via Router A

وقتی بسته‌ای به مقصد 10.10.10.20 برسد:

  1. Router A آن را به Router B ارسال می‌کند.
  2. Router B همان بسته را به Router A برمی‌گرداند.
  3. مراحل تا صفرشدن TTL ادامه پیدا می‌کنند.
  4. بسته حذف می‌شود و مقصد در دسترس نخواهد بود.

TTL از گردش بی‌نهایت یک بسته جلوگیری می‌کند، اما Routing Loop را اصلاح نمی‌کند. تا زمانی که جدول‌های مسیریابی اصلاح نشوند، بسته‌های جدید نیز وارد همان حلقه خواهند شد.

مثال ایجاد حلقه بدون Split Horizon

توپولوژی زیر را در نظر بگیرید:

Network X
10.10.10.0/24
 │
 Router A
 │
 Router B
 │
 Router C

در حالت عادی:

  • Router A شبکه X را به‌صورت Connected می‌شناسد.
  • Router B آن را از Router A با Metric 1 یاد می‌گیرد.
  • Router C آن را از Router B با Metric 2 یاد می‌گیرد.

حال اتصال Network X به Router A قطع می‌شود.

Router A مسیر Connected را حذف می‌کند، اما ممکن است پیش از رسیدن Update مربوط به خرابی، Router B یا Router C همچنان اطلاعات قدیمی را نگه داشته باشند.

اگر Router B مسیر شبکه X را از Router C دریافت کند، ممکن است تصور کند Router C یک مسیر جایگزین دارد:

Router B:
X via Router C, Metric 3

Router C:
X via Router B, Metric 2

در Update بعدی Metricها به‌تدریج افزایش پیدا می‌کنند:

2 → 3 → 4 → 5 → 6 → ... → 16

این وضعیت با نام Count to Infinity شناخته می‌شود.

Count to Infinity چیست؟

Count to Infinity یکی از مشکلات شناخته‌شده پروتکل‌های Distance Vector است. در این وضعیت، روترها یک Route خراب را از یکدیگر دریافت کرده و Metric آن را در هر Update افزایش می‌دهند.

برای جلوگیری از ادامه نامحدود این فرایند، RIP مقدار Infinity را محدود کرده است:

  • Metricهای ۱ تا ۱۵: مسیر قابل استفاده
  • Metric برابر با ۱۶ یا بیشتر: مقصد غیرقابل‌دسترسی

به همین دلیل RIP برای شبکه‌هایی که بیش از ۱۵ Hop میان دو مقصد دارند مناسب نیست.

Split Horizon می‌تواند از شکل‌گیری بسیاری از حلقه‌های ساده و Count to Infinity جلوگیری کند؛ زیرا روتر اجازه ندارد همان Route را به منبع یادگیری آن بازگرداند.

Split Horizon چگونه از حلقه جلوگیری می‌کند؟

به مثال قبلی بازگردیم. Router C مسیر شبکه X را از Router B یاد گرفته است.

با فعال‌بودن Split Horizon، Router C هنگام ارسال Update به Router B، شبکه X را داخل Advertisement قرار نمی‌دهد.

Router B → Router C:
10.10.10.0/24, Metric 1

Router C → Router B:
Route 10.10.10.0/24 Advertise نمی‌شود

در نتیجه Router B نمی‌تواند مسیر اشتباه شبکه X را از Router C یاد بگیرد؛ زیرا Router C می‌داند منبع اصلی اطلاعات همان Router B بوده است.

انواع Split Horizon

دو رفتار رایج برای جلوگیری از بازگشت Route وجود دارد:

Split Horizon ساده

Route آموخته‌شده از یک Interface، هنگام ارسال Update روی همان Interface کاملاً حذف می‌شود.

Route learned from ether1
Update sent to ether1
Result: Route omitted

مزیت این روش، کاهش حجم Routing Update است.

Split Horizon with Poison Reverse

Route به‌جای حذف‌شدن، با Metric غیرقابل‌دسترسی به سمت منبع یادگیری آن Advertise می‌شود.

در RIP:

Metric = 16
Status = Unreachable

این پیام به همسایه اعلام می‌کند:

«این مسیر را از تو آموخته‌ام و نباید من را به‌عنوان مسیر جایگزین همان مقصد در نظر بگیری.»

Poison Reverse چیست؟

Poison Reverse نسخه صریح‌تر Split Horizon است. روتر Route را به سمت منبع آن Advertise می‌کند، اما Metric را برابر Infinity قرار می‌دهد.

مثال:

Router B مسیر X را از Router A یاد می‌گیرد.

Split Horizon ساده:
Router B مسیر X را به Router A اعلام نمی‌کند.

Poison Reverse:
Router B مسیر X را با Metric 16 به Router A اعلام می‌کند.

Poison Reverse می‌تواند باعث شود همسایه سریع‌تر متوجه شود که نباید مسیر برگشتی را از این روتر انتخاب کند. در مقابل، حجم Routing Update را افزایش می‌دهد؛ زیرا Routeهای Unreachable نیز در Update قرار می‌گیرند.

تفاوت Poison Reverse و Route Poisoning

این دو اصطلاح شبیه هستند، اما مفهوم یکسانی ندارند.

مکانیزمزمان استفادهنحوه عملکرد
Poison Reverseدر Advertisement برگشتی به منبع یادگیریRoute با Metric برابر Infinity به همان سمت Advertise می‌شود
Route Poisoningپس از خرابی واقعی مسیرRoute خراب با Metric برابر Infinity به همسایه‌ها اعلام می‌شود

در Route Poisoning، روتر مالک یا استفاده‌کننده مسیر پس از تشخیص خرابی، به تمام همسایه‌های مرتبط اعلام می‌کند که مقصد دیگر قابل دسترسی نیست.

در Poison Reverse، هدف جلوگیری از این است که منبع یک Route، روتر دریافت‌کننده را به‌عنوان مسیر جایگزین همان Route انتخاب کند.

Triggered Update چیست؟

پروتکل‌های Distance Vector معمولاً در بازه‌های زمانی مشخص Routing Update ارسال می‌کنند. اگر روتر برای اعلام خرابی تا Update دوره‌ای بعدی صبر کند، Convergence شبکه کند خواهد شد.

Triggered Update باعث می‌شود تغییر مهمی مانند خرابی Route بدون انتظار برای Timer دوره‌ای Advertise شود.

فرایند کلی:

  1. روتر خرابی Route را تشخیص می‌دهد.
  2. Metric مسیر به Infinity تغییر می‌کند.
  3. Triggered Update برای همسایه‌ها ارسال می‌شود.
  4. همسایه‌ها جدول مسیریابی خود را اصلاح می‌کنند.

Split Horizon، Route Poisoning و Triggered Update در کنار یکدیگر می‌توانند زمان ماندگاری Route اشتباه را کاهش دهند.

Hold-Down Timer چیست؟

Hold-Down Timer برای جلوگیری از پذیرفتن فوری اطلاعات متناقض درباره یک Route خراب استفاده می‌شود.

وقتی Route در وضعیت خرابی قرار می‌گیرد، روتر ممکن است برای مدت مشخصی Advertisementهایی را که ادعا می‌کنند مسیر دوباره با Metric نامناسب قابل دسترسی است نپذیرد.

این مکانیزم می‌تواند از نوسان Route جلوگیری کند، اما در صورت تنظیم نامناسب ممکن است Convergence صحیح را نیز به تأخیر بیندازد.

مقایسه مکانیزم‌های جلوگیری از حلقه

مکانیزمهدف اصلیمحدودیت
Split Horizonجلوگیری از بازگشت Route به منبع یادگیریتمام حلقه‌های چندروتره را تضمینی حذف نمی‌کند
Poison Reverseاعلام صریح Unreachable بودن Route در جهت برگشتحجم Update را افزایش می‌دهد
Route Poisoningاعلام خرابی واقعی Routeبه تشخیص سریع خرابی وابسته است
Triggered Updateاعلام سریع تغییر بدون انتظار Timerدر نوسان زیاد می‌تواند Update بیشتری ایجاد کند
Hold-Downجلوگیری از پذیرش اطلاعات متناقضممکن است Convergence را کند کند
TTLمحدودکردن عمر بسته در Data Planeخود Routing Loop را اصلاح نمی‌کند
Route Filteringکنترل دقیق Routeهای ورودی و خروجینیازمند طراحی و مستندسازی صحیح است

Split Horizon در چه پروتکل‌هایی استفاده می‌شود؟

RIP و RIPng

Split Horizon یکی از مکانیزم‌های اصلی کنترل Loop در RIP برای IPv4 و RIPng برای IPv6 است.

RIP یک پروتکل Distance Vector است و فقط از تعداد Hop به‌عنوان Metric اصلی استفاده می‌کند. به همین دلیل در برابر اطلاعات قدیمی و Count to Infinity آسیب‌پذیر است.

EIGRP

EIGRP نیز از Split Horizon و Poison Reverse استفاده می‌کند، اما منطق آن پیشرفته‌تر از RIP است. در EIGRP، Routeهای Successor معمولاً از Interfaceی که از آن آموخته شده‌اند دوباره Advertise نمی‌شوند.

OSPF و IS-IS

OSPF و IS-IS پروتکل‌های Link-State هستند و از مدل کلاسیک Split Horizon مربوط به Distance Vector استفاده نمی‌کنند. هر روتر اطلاعات توپولوژی را دریافت کرده و با الگوریتم SPF بهترین مسیر را محاسبه می‌کند.

این پروتکل‌ها مکانیزم‌های مستقل برای Sequence Number، Flooding، Aging و جلوگیری از استفاده از اطلاعات قدیمی دارند.

BGP

در iBGP قانونی وجود دارد که براساس آن Route آموخته‌شده از یک iBGP Peer به iBGP Peer دیگر Advertise نمی‌شود. این رفتار گاهی با عنوان iBGP Split Horizon معرفی می‌شود، اما با Split Horizon کلاسیک RIP یکسان نیست.

در شبکه‌های iBGP بزرگ، Route Reflector یا Full Mesh برای حل این محدودیت استفاده می‌شود.

Split Horizon در MikroTik RouterOS v7

در RouterOS v7، تنظیمات RIP در ساختار زیر قرار دارند:

/routing/rip

بخش‌های مهم عبارت‌اند از:

  • /routing/rip/instance: ایجاد و مدیریت RIP Instance
  • /routing/rip/interface-template: مشخص‌کردن Interfaceها و رفتار Split Horizon
  • /routing/rip/interface: نمایش Interfaceهای فعال به‌صورت Read-only
  • /routing/rip/neighbor: مشاهده همسایه‌های RIP
  • /routing/rip/static-neighbor: تعریف همسایه Unicast

اصلاح مهم RouterOS v7: دستور قدیمی /routing rip interface set ... مربوط به ساختار قدیمی RouterOS است. در نسخه هفتم باید Split Horizon را در بخش interface-template تنظیم کنید.

ساخت یک RIP Instance در RouterOS v7

نمونه زیر یک RIP Instance برای IPv4 ایجاد می‌کند:

/routing rip instance
add name=rip-v4 \
 afi=ip \
 routing-table=main \
 redistribute=connected

پارامترها:

  • name=rip-v4: نام Instance
  • afi=ip: استفاده از IPv4
  • routing-table=main: نصب Routeها در جدول Main
  • redistribute=connected: انتشار Routeهای Connected

در شبکه عملیاتی، Redistribute باید با Routing Filter کنترل شود تا تمام شبکه‌های Connected، مدیریت یا WAN بدون برنامه Advertise نشوند.

فعال‌کردن Split Horizon در RouterOS v7

برای فعال‌کردن RIP روی یک Interface همراه با Split Horizon:

/routing rip interface-template
add instance=rip-v4 \
 interfaces=ether2 \
 split-horizon=yes \
 poison-reverse=no

برای Interface دوم:

/routing rip interface-template
add instance=rip-v4 \
 interfaces=ether3 \
 split-horizon=yes \
 poison-reverse=no

در این حالت Route آموخته‌شده از هر Interface از همان Interface دوباره Advertise نمی‌شود.

فعال‌کردن Poison Reverse در RouterOS v7

RouterOS در Interface Template پارامتر جداگانه‌ای برای Poison Reverse ارائه می‌دهد.

ابتدا Templateها را مشاهده کنید:

/routing rip interface-template print detail

سپس شماره Template موردنظر را مشخص کرده و Poison Reverse را فعال کنید:

/routing rip interface-template
set 0 split-horizon=yes poison-reverse=yes

عدد 0 باید با شماره واقعی Template در روتر شما جایگزین شود.

پس از تغییر، رفتار Advertisement را در محیط آزمایشگاهی و با Packet Capture بررسی کنید؛ زیرا فعال‌کردن یا غیرفعال‌کردن این قابلیت باید براساس توپولوژی واقعی انجام شود.

مشاهده وضعیت RIP در RouterOS

مشاهده Instanceها:

/routing rip instance print detail

مشاهده Interface Templateها:

/routing rip interface-template print detail

مشاهده Interfaceهای عملیاتی RIP:

/routing rip interface print detail

مشاهده همسایه‌های RIP:

/routing rip neighbor print detail

مشاهده Routeهای موجود:

/ip route print detail

مشاهده Logهای Routing:

/log print where topics~"route|rip"

سناریوی آزمایش Split Horizon با سه روتر MikroTik

توپولوژی آزمایش:

LAN-A
10.10.10.0/24
 │
 R1
10.0.12.1/30
 │
10.0.12.2/30
 R2
10.0.23.1/30
 │
10.0.23.2/30
 R3
 │
LAN-C
10.30.30.0/24

آدرس‌دهی Router R1

/ip address
add address=10.10.10.1/24 interface=bridge-LAN
add address=10.0.12.1/30 interface=ether1

RIP روی Router R1

/routing rip instance
add name=rip-v4 \
 afi=ip \
 routing-table=main \
 redistribute=connected

/routing rip interface-template
add instance=rip-v4 \
 interfaces=ether1 \
 split-horizon=yes \
 poison-reverse=no

آدرس‌دهی Router R2

/ip address
add address=10.0.12.2/30 interface=ether1
add address=10.0.23.1/30 interface=ether2

RIP روی Router R2

/routing rip instance
add name=rip-v4 \
 afi=ip \
 routing-table=main \
 redistribute=connected

/routing rip interface-template
add instance=rip-v4 \
 interfaces=ether1 \
 split-horizon=yes \
 poison-reverse=no

/routing rip interface-template
add instance=rip-v4 \
 interfaces=ether2 \
 split-horizon=yes \
 poison-reverse=no

آدرس‌دهی Router R3

/ip address
add address=10.0.23.2/30 interface=ether1
add address=10.30.30.1/24 interface=bridge-LAN

RIP روی Router R3

/routing rip instance
add name=rip-v4 \
 afi=ip \
 routing-table=main \
 redistribute=connected

/routing rip interface-template
add instance=rip-v4 \
 interfaces=ether1 \
 split-horizon=yes \
 poison-reverse=no

روش آزمایش خرابی مسیر

  1. از R3 شبکه 10.10.10.0/24 را بررسی کنید.
  2. از یک Client پشت R3 به 10.10.10.1 Ping بگیرید.
  3. Interface شبکه LAN-A را روی R1 غیرفعال کنید.
  4. تغییر Route در R2 و R3 را مشاهده کنید.
  5. همین آزمایش را با Split Horizon غیرفعال در محیط Lab تکرار کنید.
  6. Routing Updateها را با Packet Sniffer بررسی کنید.

نمونه غیرفعال‌کردن موقت برای آزمایش:

/routing rip interface-template
set 0 split-horizon=no poison-reverse=no

هشدار: Split Horizon را فقط در Lab یا پس از تحلیل کامل توپولوژی غیرفعال کنید. این تغییر ممکن است زمینه ایجاد Routing Loop و Count to Infinity را فراهم کند.

بررسی RIP Update با Packet Sniffer

برای مشاهده بسته‌های RIP می‌توان از Sniffer داخلی RouterOS استفاده کرد:

/tool sniffer quick \
 interface=ether1 \
 ip-protocol=udp \
 port=520

پورت UDP 520 برای RIPv2 استفاده می‌شود. در زمان آزمایش Poison Reverse باید Route برگشتی را با Metric غیرقابل‌دسترسی مشاهده کنید.

برای ذخیره Capture و بررسی در Wireshark:

/tool sniffer
set filter-interface=ether1 \
 filter-ip-protocol=udp \
 filter-port=520 \
 file-name=rip-test.pcap

/tool sniffer start

بعد از پایان آزمایش:

/tool sniffer stop

فایل Capture را از منوی Files دانلود و در Wireshark تحلیل کنید.

محدودیت Split Horizon در شبکه Hub-and-Spoke

Split Horizon در بعضی توپولوژی‌های Point-to-Multipoint یا Hub-and-Spoke می‌تواند مانع انتشار Routeهای صحیح شود.

توپولوژی زیر را در نظر بگیرید:

 Spoke A
 │
 │
Spoke B ── Hub ── Spoke C
 │
 │
 Spoke D

اگر تمام Spokeها از دید Hub روی یک Interface منطقی مشترک باشند، Hub مسیر Spoke A را از همان Interface یاد می‌گیرد.

Split Horizon اجازه نمی‌دهد Hub آن مسیر را دوباره روی همان Interface برای Spoke B یا Spoke C Advertise کند؛ حتی اگر مقصد آن Update یک Spoke دیگر باشد.

نتیجه ممکن است این باشد که Spokeها Routeهای یکدیگر را یاد نگیرند.

راهکارهای شبکه Hub-and-Spoke

  • ایجاد Interface یا Tunnel جداگانه برای هر Spoke
  • استفاده از لینک‌های Point-to-Point منطقی
  • استفاده از Static Route در شبکه‌های کوچک
  • استفاده از OSPF در توپولوژی‌های مناسب
  • استفاده از BGP در شبکه‌های بزرگ‌تر یا Policyمحور
  • اعلام Default Route از Hub به Spokeها
  • غیرفعال‌کردن Split Horizon فقط پس از بررسی احتمال Loop
  • استفاده از Route Filter برای کنترل دقیق Advertisementها

غیرفعال‌کردن Split Horizon ساده‌ترین راه به نظر می‌رسد، اما همیشه بهترین راه نیست. ابتدا باید مشخص شود آیا Hub واقعاً مسیر جایگزین، حلقه فیزیکی یا چند مسیر Redistributeشده دارد یا خیر.

چه زمانی Split Horizon را غیرفعال کنیم؟

غیرفعال‌کردن Split Horizon فقط در شرایط خاص قابل توجیه است:

  • شبکه Hub-and-Spoke با یک Interface چندنقطه‌ای
  • نیاز به Advertisement مسیر یک Spoke به Spoke دیگر
  • وجود کنترل Loop در سطح دیگری از طراحی
  • استفاده از Route Filtering دقیق
  • توپولوژی کاملاً مستند و آزمایش‌شده

پیش از غیرفعال‌کردن باید موارد زیر مشخص شوند:

  1. Route از کدام همسایه وارد می‌شود؟
  2. به کدام همسایه‌ها باید Advertise شود؟
  3. آیا مسیر جایگزین واقعی وجود دارد؟
  4. آیا Redistribution دوطرفه انجام می‌شود؟
  5. در زمان خرابی چه روترهایی Route قدیمی را نگه می‌دارند؟
  6. آیا Route Filter جلوی بازگشت Route را می‌گیرد؟
  7. زمان Convergence چقدر است؟

تفاوت Routing Split Horizon و Bridge Horizon در MikroTik

RouterOS قابلیت دیگری با نام Bridge Horizon دارد که نباید با Split Horizon در RIP اشتباه گرفته شود.

ویژگیRouting Split HorizonBridge Horizon
لایه عملکردلایه سوم و Routingلایه دوم و Bridging
هدفکنترل Advertisement مسیرجلوگیری از Forward شدن Frame میان پورت‌های هم‌گروه
محل تنظیم/routing/rip/interface-template/interface/bridge/port
کاربردRIP و جلوگیری از Routing LoopPort Isolation و جلوگیری از Bridge Loop خاص

در Bridge Horizon، پورت‌هایی که مقدار Horizon یکسان دارند Frame را مستقیماً به یکدیگر Forward نمی‌کنند.

نمونه:

/interface bridge port
set 0 horizon=10
set 1 horizon=10

این قابلیت یک ویژگی Software Bridge است و می‌تواند Hardware Offloading را روی پورت‌های مربوط غیرفعال کند. بنابراین پیش از استفاده باید تأثیر آن بر توان Switching بررسی شود.

آیا Split Horizon جایگزین Route Filtering است؟

خیر. Split Horizon فقط جهت بازگشت Route آموخته‌شده را کنترل می‌کند. این مکانیزم مشخص نمی‌کند کدام Prefixها مجاز به ورود یا خروج هستند.

Route Filtering برای اهداف زیر استفاده می‌شود:

  • جلوگیری از انتشار شبکه مدیریت
  • محدودکردن Default Route
  • کنترل Redistribution
  • جلوگیری از بازگشت Route میان دو پروتکل
  • تنظیم Metric یا Route Tag
  • جلوگیری از Route Leak

یک طراحی حرفه‌ای ممکن است هم‌زمان از Split Horizon، Routing Filter، Authentication، BFD و مانیتورینگ استفاده کند.

آیا BFD جایگزین Split Horizon است؟

خیر. BFD برای تشخیص سریع خرابی ارتباط یا همسایه استفاده می‌شود، اما رفتار Advertisement Route را کنترل نمی‌کند.

در RouterOS v7، RIP Interface Template دارای گزینه use-bfd است. فعال‌کردن BFD می‌تواند خرابی Neighbor را سریع‌تر تشخیص دهد، اما Split Horizon همچنان برای جلوگیری از بازگشت Route اهمیت دارد.

امنیت RIP و Split Horizon

Split Horizon یک مکانیزم امنیتی در برابر مهاجم نیست. هدف آن کاهش Loopهای منطقی ناشی از رفتار پروتکل است.

یک دستگاه غیرمجاز ممکن است Route جعلی، Metric پایین یا Default Route اشتباه Advertise کند. برای کاهش این ریسک:

  • RIP را فقط روی Interfaceهای موردنیاز فعال کنید.
  • Interfaceهای WAN و کاربران را وارد RIP نکنید.
  • از Route Filter ورودی و خروجی استفاده کنید.
  • در صورت پشتیبانی از Authentication استفاده کنید.
  • شبکه Routing را از شبکه کاربران جدا کنید.
  • Routing Updateها را با Firewall محدود کنید.
  • Neighborها و تغییرات Route را مانیتور کنید.
  • از رمز Plain-Text برای محیط غیرقابل‌اعتماد استفاده نکنید.
  • تنظیمات و Backupها را در محل امن نگهداری کنید.

اشتباهات رایج در پیاده‌سازی Split Horizon

استفاده از دستور RouterOS v6 در RouterOS v7

در RouterOS v7 باید از interface-template استفاده شود. بخش interface برای مشاهده وضعیت عملیاتی است.

فرض فعال‌بودن Split Horizon بدون بررسی

پیکربندی را با دستور print detail بررسی کنید و به Default احتمالی نسخه یا Template اعتماد نکنید.

غیرفعال‌کردن Split Horizon برای حل مشکل Route

ممکن است مشکل اصلی Interface Template، Route Filter، Redistribution یا آدرس‌دهی باشد. غیرفعال‌کردن Split Horizon بدون تحلیل می‌تواند Loop ایجاد کند.

اشتباه‌گرفتن Poison Reverse و Route Poisoning

Poison Reverse مربوط به Advertisement برگشتی است؛ Route Poisoning پس از خرابی واقعی Route انجام می‌شود.

فرض اینکه Split Horizon تمام Loopها را حذف می‌کند

حلقه‌های چندنقطه‌ای، Redistribution Loop و Route Leak ممکن است همچنان ایجاد شوند.

فعال‌کردن RIP روی تمام Interfaceها

این کار می‌تواند Routeها و اطلاعات شبکه را به بخش‌های غیرمجاز منتشر کند.

Redistribute کردن تمام Connected Routeها

ممکن است شبکه WAN، مدیریت، Loopback یا سرویس‌های غیرمرتبط نیز Advertise شوند.

نداشتن آزمایش Failover

پایداری Routing باید با قطع Interface، حذف Route و Restart Neighbor آزمایش شود.

نداشتن Packet Capture

مشاهده صرف Routing Table همیشه نشان نمی‌دهد چه Routeهایی Advertise شده‌اند. Capture RIP Updateها اطلاعات دقیق‌تری ارائه می‌دهد.

چک‌لیست عیب‌یابی Split Horizon

  1. نسخه RouterOS را بررسی کنید.
  2. RIP Instance فعال را مشاهده کنید.
  3. AFI و Routing Table را کنترل کنید.
  4. Interface Templateها را بررسی کنید.
  5. مقدار Split Horizon و Poison Reverse را ثبت کنید.
  6. Neighborهای RIP را مشاهده کنید.
  7. Routeهای دریافت‌شده را با انتظار طراحی مقایسه کنید.
  8. Redistribution و Route Filterها را بررسی کنید.
  9. توپولوژی Hub-and-Spoke را شناسایی کنید.
  10. RIP Updateها را Capture کنید.
  11. Metric Routeهای خراب را بررسی کنید.
  12. سناریوی قطع لینک را آزمایش کنید.
  13. Logها و زمان Convergence را ثبت کنید.
  14. پس از تغییر، Ping و Traceroute انجام دهید.

چه زمانی RIP انتخاب مناسبی نیست؟

RIP برای شبکه‌های کوچک، آزمایشگاه‌ها و محیط‌های ساده قابل استفاده است؛ اما در شرایط زیر بهتر است پروتکل دیگری بررسی شود:

  • بیش از ۱۵ Hop میان مقصدها وجود دارد.
  • شبکه دارای تعداد زیادی Router و Prefix است.
  • Convergence سریع اهمیت زیادی دارد.
  • چند مسیر و Policy پیچیده وجود دارد.
  • شبکه دارای چند Area یا ساختار سلسله‌مراتبی است.
  • Traffic Engineering یا Route Policy گسترده نیاز است.
  • شبکه زیرساخت ISP یا دیتاسنتر است.

در چنین شبکه‌هایی OSPF، IS-IS یا BGP ممکن است انتخاب مناسب‌تری باشند. انتخاب پروتکل باید براساس اندازه، توپولوژی، نوع تجهیزات و دانش تیم عملیاتی انجام شود.

طراحی مسیریابی و انتخاب تجهیزات با گروه بیستون

پیاده‌سازی پایدار Routing فقط به فعال‌کردن یک پروتکل محدود نمی‌شود. توان پردازنده روتر، مقدار RAM، تعداد Prefixها، نوع Interfaceها، ظرفیت لینک‌ها، نیاز به VRF، VPN، Firewall و توسعه آینده شبکه باید هم‌زمان بررسی شوند.

گروه فناوری ارتباطات پندار بیستون در زمینه تأمین تخصصی تجهیزات شبکه، محصولات MikroTik، روترها، سوئیچ‌ها، تجهیزات وایرلس و زیرساخت ارتباطی فعالیت می‌کند.

خدمات مشاوره و پشتیبانی گروه بیستون می‌تواند شامل موارد زیر باشد:

  • انتخاب روتر MikroTik متناسب با تعداد Routeها
  • بررسی توان پردازشی RouterOS v7
  • طراحی Routing میان شعب
  • بررسی RIP، OSPF، BGP و Static Routing
  • طراحی Failover و افزونگی ارتباطات
  • بررسی VLAN، VRF و Firewall
  • رفع مشکلات Routing Loop و Route Leak
  • انتخاب سوئیچ، ماژول و تجهیزات ارتباطی
  • مشاوره توسعه و افزایش ظرفیت شبکه

برای مشاهده روترها، سوئیچ‌ها و سایر تجهیزات، به صفحه محصولات میکروتیک گروه بیستون مراجعه کنید. برای بررسی توپولوژی، مشکلات Routing یا انتخاب تجهیزات نیز درخواست خود را در بخش پشتیبانی و مشاوره فنی ثبت کنید.

گارانتی و خدمات پس از فروش بیستون

در خرید روتر و تجهیزات زیرساختی، علاوه بر مشخصات فنی باید اصالت کالا، پارت‌نامبر، وضعیت گارانتی و امکان دریافت خدمات پس از فروش بررسی شوند.

محصولاتی که براساس شماره سریال، فاکتور و اطلاعات ثبت‌شده تحت پوشش گروه بیستون باشند، مطابق شرایط ضمانت مربوط پشتیبانی می‌شوند.

وجود یک محصول در فروشگاه یا مقاله سایت به‌تنهایی به معنی برخورداری تمام نمونه‌های آن از گارانتی بیستون نیست. نوع و مدت ضمانت باید هنگام استعلام، خرید و دریافت فاکتور تأیید شود.

برای محصولات مشمول می‌توانید شماره سریال دستگاه را در صفحه اعتبارسنجی گارانتی بیستون بررسی کنید.

شرایط پوشش ضمانت و موارد خارج از گارانتی نیز در صفحه شرایط گارانتی گروه بیستون درج شده است.

سؤالات متداول درباره Split Horizon

Split Horizon چیست؟

قانونی در پروتکل‌های Distance Vector است که مانع Advertise شدن یک Route از همان Interface یا همسایه‌ای می‌شود که Route از آن آموخته شده است.

هدف Split Horizon چیست؟

هدف اصلی آن جلوگیری از Routing Loop و کاهش احتمال Count to Infinity است.

Split Horizon بیشتر در کدام پروتکل استفاده می‌شود؟

در RIP، RIPng و EIGRP استفاده می‌شود. نحوه اجرای دقیق آن میان پروتکل‌ها متفاوت است.

آیا OSPF از Split Horizon استفاده می‌کند؟

OSPF یک پروتکل Link-State است و از Split Horizon کلاسیک Distance Vector استفاده نمی‌کند.

Poison Reverse چیست؟

روتر Route آموخته‌شده را به سمت منبع آن با Metric غیرقابل‌دسترسی Advertise می‌کند.

Metric غیرقابل‌دسترسی در RIP چند است؟

Metric برابر با ۱۶ یا بیشتر در RIP به معنی مقصد Unreachable است.

تفاوت Split Horizon و Poison Reverse چیست؟

در Split Horizon ساده، Route از Advertisement برگشتی حذف می‌شود. در Poison Reverse، همان Route با Metric برابر Infinity اعلام می‌شود.

تفاوت Poison Reverse و Route Poisoning چیست؟

Poison Reverse به جهت بازگشت Route مربوط است؛ Route Poisoning هنگام خرابی واقعی مسیر، آن را با Metric غیرقابل‌دسترسی Advertise می‌کند.

Count to Infinity چیست؟

وضعیتی است که روترها یک مسیر خراب را از یکدیگر یاد گرفته و Metric آن را به‌تدریج افزایش می‌دهند تا به مقدار Infinity برسد.

آیا Split Horizon تمام حلقه‌ها را از بین می‌برد؟

خیر. این قابلیت بسیاری از حلقه‌های ساده را کاهش می‌دهد، اما Redistribution Loop، Route Leak یا حلقه‌های پیچیده‌تر همچنان ممکن هستند.

چرا در شبکه Hub-and-Spoke مشکل ایجاد می‌کند؟

Hub ممکن است Route یک Spoke را از یک Interface مشترک یاد بگیرد و به دلیل Split Horizon نتواند آن را از همان Interface برای سایر Spokeها Advertise کند.

آیا می‌توان Split Horizon را غیرفعال کرد؟

بله، اما فقط پس از بررسی کامل توپولوژی، Route Filtering، مسیرهای جایگزین و احتمال ایجاد Loop.

دستور Split Horizon در RouterOS v7 چیست؟

تنظیم از طریق بخش زیر انجام می‌شود:

/routing rip interface-template

چرا دستور routing rip interface set کار نمی‌کند؟

در RouterOS v7 بخش /routing/rip/interface Read-only است و تنظیمات از طریق interface-template انجام می‌شوند.

Bridge Horizon همان Routing Split Horizon است؟

خیر. Bridge Horizon در لایه دوم برای جلوگیری از Forward شدن Frame میان پورت‌های هم‌گروه استفاده می‌شود؛ Routing Split Horizon روی Route Advertisement اثر دارد.

آیا BFD جایگزین Split Horizon است؟

خیر. BFD خرابی Neighbor را سریع تشخیص می‌دهد، اما مانع Advertisement برگشتی Route نمی‌شود.

آیا Split Horizon یک قابلیت امنیتی است؟

خیر. این مکانیزم برای پایداری Routing طراحی شده است. برای امنیت باید Authentication، Route Filter، Firewall و کنترل Interfaceها نیز اجرا شوند.

چگونه عملکرد Split Horizon را آزمایش کنیم؟

با قطع یک Route، مشاهده جدول مسیریابی، بررسی Neighborها و Capture کردن RIP Updateها روی UDP 520 می‌توان رفتار آن را تحلیل کرد.

جمع‌بندی

Split Horizon یکی از مکانیزم‌های اصلی جلوگیری از Routing Loop در پروتکل‌های Distance Vector است. این قابلیت مانع می‌شود یک Route از همان Interface یا همسایه‌ای که از آن آموخته شده است دوباره Advertise شود.

در Split Horizon ساده، Route از Update برگشتی حذف می‌شود. در Poison Reverse، همان Route با Metric غیرقابل‌دسترسی به سمت منبع اعلام می‌شود.

RIP برای تعیین مسیر از Hop Count استفاده می‌کند. Metricهای ۱ تا ۱۵ قابل استفاده هستند و مقدار ۱۶ به معنی Unreachable است. Split Horizon، Route Poisoning، Triggered Update و Hold-Down در کنار یکدیگر احتمال Count to Infinity را کاهش می‌دهند.

در RouterOS v7، تنظیم Split Horizon از طریق /routing/rip/interface-template انجام می‌شود. دستورهای قدیمی مبتنی بر /routing rip interface set برای ساختار فعلی نسخه هفتم مناسب نیستند.

Split Horizon در توپولوژی‌های Hub-and-Spoke ممکن است جلوی Advertisement Route میان Spokeها را بگیرد. در این شرایط باید به‌جای غیرفعال‌کردن بدون بررسی، طراحی Interfaceها، Tunnelها، Route Filterها و پروتکل مسیریابی بازنگری شود.

در نهایت، Split Horizon فقط یکی از اجزای طراحی مسیریابی پایدار است. انتخاب پروتکل مناسب، کنترل Redistribution، مانیتورینگ Routeها، آزمایش Failover و استفاده از تجهیزات متناسب با ظرفیت شبکه اهمیت بیشتری در پایداری بلندمدت زیرساخت دارند.

برای بررسی مشکلات Routing، انتخاب روتر MikroTik و طراحی ارتباط پایدار میان شعب، با کارشناسان فنی گروه بیستون در ارتباط باشید.

منابع فنی مقاله