OSPF چیست؟ آموزش OSPF از صفر: area، LSA و انتخاب مسیر
OSPF چیست و چطور کار میکند؛ آموزش OSPF از Hello و وضعیت همسایهها تا DR و BDR، areaها، انواع LSA، cost و انتخاب مسیر، با کانفیگ Cisco IOS و RouterOS 7.
در این صفحه
OSPF (Open Shortest Path First) یک پروتکل مسیریابی link-state برای داخل یک شبکهی سازمانی (IGP) است. هر روتر وضعیت لینکهای خودش را در پیامهایی به نام LSA به بقیه اعلام میکند، همهی روترهای یک area پایگاه دادهی یکسانی (LSDB) از نقشهی شبکه میسازند و هر روتر با الگوریتم Dijkstra (SPF) کوتاهترین مسیر را پیدا میکند؛ «کوتاهترین» یعنی کمترین جمع cost لینکها، نه کمترین تعداد hop. شبکهی بزرگ به areaهایی تقسیم میشود که همه به area 0 (backbone) وصلاند، و روی لینکهای Ethernet یک DR و یک BDR انتخاب میشود تا تعداد adjacencyها کم بماند. نسخهی 2 برای IPv4 در RFC 2328 و نسخهی 3 برای IPv6 در RFC 5340 تعریف شده است.
OSPF چطور کار میکند
OSPF مستقیم روی IP کار میکند (پروتکل شمارهی 89)، نه روی TCP یا UDP؛ جایگاهش را در مدل OSI و TCP/IP ببینید. روترها روی هر اینترفیس OSPF پیام Hello را به آدرس multicast 224.0.0.5 (AllSPFRouters) میفرستند و DR و BDR به 224.0.0.6 (AllDRouters) هم گوش میدهند. Hello در Cisco و RouterOS به طور پیش فرض هر ۱۰ ثانیه فرستاده میشود (همان مقدار نمونهی RFC برای LAN) و dead interval چهار برابر آن، یعنی ۴۰ ثانیه، است.
دو روتر فقط وقتی همسایه میشوند که در Hello این موارد یکی باشد:
- area ID؛
- subnet و mask اینترفیس (مگر روی لینک point-to-point)؛
- hello interval و dead interval؛
- نوع و کلید authentication؛
- پرچمهای stub و NSSA area.
بعد از همسایه شدن، روترها LSDB را همگام میکنند: اول فقط header هر LSA را در پیامهای Database Description (DD) میفرستند، بعد LSAهایی را که ندارند با Link State Request میخواهند و با Link State Update دریافت میکنند. هر LSA طبق RFC 2328 حداکثر هر ۳۰ دقیقه دوباره منتشر میشود و LSAی که به سن یک ساعت (MaxAge) برسد از محاسبه کنار میرود.
وضعیتهای همسایه
| وضعیت | معنی |
|---|---|
| Down | از همسایه Hello تازهای نرسیده است |
| Attempt | فقط در شبکهی NBMA؛ روتر به همسایهی تعریف شده Hello میفرستد |
| Init | Hello همسایه رسیده، ولی Router ID خود روتر هنوز در آن نیست |
| 2-Way | ارتباط دو طرفه برقرار است؛ انتخاب DR و BDR از این مرحله انجام میشود |
| ExStart | تعیین master و slave و شمارهی شروع DD |
| Exchange | ارسال header همهی LSAها در پیامهای DD |
| Loading | درخواست و دریافت LSAهای کم یا قدیمی |
| Full | LSDB دو روتر یکی است و adjacency کامل شده |
روی یک سگمنت Ethernet، روترهای معمولی (DROther) فقط با DR و BDR به Full میرسند و با یکدیگر در 2-Way میمانند. این حالت خطا نیست.
DR و BDR
اگر روی یک سگمنت n روتر باشد و همه با هم adjacency بسازند، n(n-1)/2 رابطهی همگام سازی لازم است. OSPF روی شبکههای broadcast و NBMA یک DR انتخاب میکند که با همه adjacency میسازد و LSA شبکهی آن سگمنت (type 2) را منتشر میکند؛ BDR نسخهی آماده به کار آن است. انتخاب این طور انجام میشود:
- بیشترین Router Priority برنده است و در صورت تساوی، بیشترین Router ID.
- روتر با priority برابر 0 هرگز DR یا BDR نمیشود.
- انتخاب preemptive نیست. طبق RFC 2328 روتری که تازه به سگمنت اضافه میشود، اگر DR وجود داشته باشد همان را میپذیرد، حتی اگر priority خودش بیشتر باشد. برای همین DR همیشه روتر با بیشترین priority نیست.
priority پیش فرض در Cisco IOS برابر 1 و در RouterOS 7 برابر 128 است (در RouterOS 6 برابر 1 بود). در شبکهای که Cisco و میکروتیک کنار هم هستند، اگر priority را تنظیم نکنید میکروتیک در انتخاب DR برنده میشود، مگر این که پیش از بالا آمدنش DR انتخاب شده باشد. روی لینک point-to-point بین دو روتر DR و BDR لازم نیست؛ نوع شبکه را روی هر دو طرف point-to-point بگذارید تا انتخاب DR از مسیر برقراری adjacency حذف شود.
area و انواع آن
area یک گروه از روترهاست که LSDB مشترک دارند. تغییر توپولوژی داخل یک area فقط در همان area منتشر میشود و بقیه فقط خلاصهی مسیرها را میبینند. قواعد اصلی:
- area 0 (
0.0.0.0) همان backbone است و همهی areaهای دیگر باید مستقیم به آن وصل باشند. - ABR روتری است که در چند area است و مسیرها را بین آنها خلاصه میکند.
- ASBR روتری است که مسیر خارج از OSPF (static، BGP، شبکهی متصل) را وارد OSPF میکند.
مستندات MikroTik تقسیم شبکهای با کمتر از ۵۰ روتر به چند area را توصیه نمیکند؛ برای بیشتر شبکههای سازمانی یک area 0 کافی است.
| نوع area | LSA خارجی (type 5) | خلاصهی بین areaها (type 3) | کاربرد |
|---|---|---|---|
| standard و backbone | دارد | دارد | حالت عادی |
| stub | ندارد؛ ABR مسیر پیش فرض میدهد | دارد | شعبهای که یک خروجی دارد |
| totally stubby | ندارد | فقط مسیر پیش فرض | شعبه با روتر کوچک |
| NSSA | ندارد، ولی مسیر خارجی داخل area را با type 7 وارد میکند | دارد | شعبهای که خودش ASBR است، مثلاً اتصال به شبکهی شریک |
طبق RFC 3101، ABR مسیرهای type 7 را به type 5 ترجمه میکند و به بقیهی شبکه میفرستد. virtual link از داخل stub و NSSA عبور نمیکند.
انواع LSA
| type | نام در OSPFv2 | چه کسی میسازد | دامنهی انتشار |
|---|---|---|---|
| 1 | Router-LSA | هر روتر | داخل area |
| 2 | Network-LSA | DR هر سگمنت broadcast یا NBMA | داخل area |
| 3 | Summary-LSA (شبکه) | ABR | area مقصد |
| 4 | ASBR-Summary-LSA | ABR؛ مکان ASBR را اعلام میکند | area مقصد |
| 5 | AS-External-LSA | ASBR | کل شبکه، به جز stub و NSSA |
| 7 | NSSA-LSA | ASBR داخل NSSA | فقط داخل NSSA |
typeهای 9، 10 و 11 (Opaque) برای افزونههایی مثل traffic engineering استفاده میشوند. اگر شبکه ASBR ندارد، LSA نوع 4 و 5 هم در آن نیست.
cost و انتخاب مسیر
هر روتر برای اینترفیس خروجی خودش یک cost دارد و cost مسیر، جمع cost اینترفیسهای خروجی در طول مسیر است. cost میتواند در دو جهت یک لینک متفاوت باشد و مسیر نامتقارن بسازد.
- Cisco: cost برابر reference bandwidth تقسیم بر bandwidth اینترفیس است و reference پیش فرض 100 Mbps است. یعنی لینک 100 Mbps، 1 Gbps و 10 Gbps همه cost برابر 1 دارند و OSPF بینشان فرقی نمیبیند. با
auto-cost reference-bandwidthمقدار را بالا ببرید (واحد Mbps است) و آن را روی همهی روترها یکسان بگذارید. - RouterOS: cost را خودتان در interface-template میدهید. برای همخوانی با Cisco، مستندات MikroTik فرمول
cost = 100000000 / bandwidth(bandwidth بر حسب bps) را میدهد؛ اگر reference را در Cisco عوض کردهاید، همان reference را جایگزین 100000000 کنید.
وقتی چند مسیر به یک مقصد هست، ترتیب ترجیح طبق RFC 2328 این است:
- intra-area: مقصد داخل همان area.
- inter-area: مقصد در area دیگر، از روی type 3.
- external type 1 (E1): cost داخلی به ASBR به علاوهی cost خارجی.
- external type 2 (E2): فقط cost خارجی، بدون توجه به فاصله تا ASBR.
یعنی مسیر intra-area حتی با cost بیشتر بر مسیر inter-area ترجیح دارد و cost فقط بین مسیرهای همنوع مقایسه میشود. اگر چند مسیر همنوع cost برابر داشته باشند، همهی آنها نصب میشوند (ECMP) و ترافیک بینشان تقسیم میشود. بین پروتکلهای مختلف، administrative distance تصمیم میگیرد: در Cisco مقدار پیش فرض OSPF برابر 110 و route استاتیک 1 است، پس route استاتیک به همان مقصد بر OSPF غلبه میکند.
OSPFv3 برای IPv6
الگوریتمها همان است، ولی RFC 5340 چند تغییر مهم دارد:
- OSPF روی هر link اجرا میشود، نه روی هر subnet، و همسایهها با آدرس link-local (
fe80::/10) با هم حرف میزنند. - Router ID و Area ID همچنان ۳۲ بیتیاند و دیگر از آدرس IPv6 گرفته نمیشوند؛ روی روتری که IPv4 ندارد Router ID را دستی بدهید.
- آدرسهای multicast
FF02::5وFF02::6هستند. - authentication از خود پروتکل حذف شده و OSPFv3 به IPsec (AH و ESP) تکیه میکند.
- router-LSA و network-LSA دیگر آدرس ندارند؛ prefixها در Intra-Area-Prefix-LSA و آدرس link-local در Link-LSA (با دامنهی فقط همان لینک) منتشر میشوند. type 3 و 4 هم به Inter-Area-Prefix-LSA و Inter-Area-Router-LSA تغییر نام دادهاند.
مثال: یک Cisco و یک میکروتیک در area 0
روتر R1 (Cisco IOS) با LAN 192.168.10.0/24 و روتر R2 (RouterOS 7) با LAN 192.168.20.0/24 روی لینک 10.0.12.0/30 به هم وصلاند. برای مرور mask و wildcard، تقسیم بندی IP را ببینید.
R1 (Cisco IOS):
interface Loopback0
ip address 10.255.0.1 255.255.255.255
ip ospf 1 area 0
interface GigabitEthernet0/0
ip address 10.0.12.1 255.255.255.252
ip ospf network point-to-point
ip ospf 1 area 0
interface GigabitEthernet0/1
ip address 192.168.10.1 255.255.255.0
ip ospf 1 area 0
router ospf 1
router-id 10.255.0.1
auto-cost reference-bandwidth 100000
passive-interface default
no passive-interface GigabitEthernet0/0ip ospf 1 area 0روی اینترفیس، OSPF را فعال میکند و بر دستورnetwork ... areaاولویت دارد. روش دیگر، دستورnetwork 10.0.12.0 0.0.0.3 area 0زیرrouter ospfاست.passive-interface defaultهمهی اینترفیسها را passive میکند: شبکهشان اعلام میشود، ولی Hello نمیفرستند و همسایه نمیپذیرند. فقط لینک بین روترها از این حالت خارج میشود. این کار جلوی همسایه شدن یک دستگاه ناشناس در LAN کاربران را میگیرد.- با reference برابر 100000 Mbps (100 Gbps)، cost لینک 1 Gbps برابر 100 میشود.
R2 (RouterOS 7):
/routing ospf instance add name=ospf-v2 version=2 router-id=10.255.0.2
/routing ospf area add name=backbone area-id=0.0.0.0 instance=ospf-v2
/routing ospf interface-template add area=backbone interfaces=ether1 type=ptp cost=100
/routing ospf interface-template add area=backbone interfaces=bridge-lan passiveدر RouterOS 7 هیچ instance و area پیش فرضی وجود ندارد و OSPF روی اینترفیسهایی اجرا میشود که با یک template جور شوند؛ به جای interfaces میتوانید با networks=10.0.12.0/30 هم match کنید. cost=100 همان cost طرف Cisco است تا مسیر در دو جهت یکسان باشد. تفاوتهای منوی OSPF با v6 در RouterOS 6 در برابر RouterOS 7 آمده است.
بررسی
| کار | Cisco IOS | RouterOS 7 |
|---|---|---|
| همسایهها و وضعیت | show ip ospf neighbor |
/routing ospf neighbor print |
| اینترفیسها، cost، DR | show ip ospf interface |
/routing ospf interface print |
| LSDB | show ip ospf database |
/routing ospf lsa print |
| مسیرهای نصب شده | show ip route ospf |
/ip route print (پرچم o) |
اشتباههای رایج
- hello یا dead interval متفاوت: همسایگی تشکیل نمیشود. اگر روی یک طرف hello را کم کردید، طرف دیگر را هم عوض کنید.
- MTU متفاوت: طبق RFC 2328 روتر پیام DD با MTU بزرگتر از توان دریافت خودش را رد میکند؛ نتیجه همسایهای است که در ExStart یا Exchange گیر میکند. این وضعیت معمولاً روی تونلها و لینکهایی با MTU ناهمسان پیش میآید.
- Router ID تکراری: معمولاً با کپی کردن کانفیگ از یک روتر به روتر دیگر پیش میآید. Router ID شناسهی router-LSA است، پس دو روتر با یک شناسه LSA یکدیگر را بازنویسی میکنند. Router ID را همیشه دستی و یکتا بدهید.
- reference bandwidth ناهمسان: اگر فقط روی برخی روترها
auto-cost reference-bandwidthرا عوض کنید، costها قابل مقایسه نیستند و مسیرهای غیر منتظره انتخاب میشوند. - نوع شبکهی ناهمسان: نوع شبکه (point-to-point یا broadcast) را روی دو طرف یک لینک یکسان بگذارید؛ در مثال بالا هر دو طرف point-to-point هستند.
- area اشتباه یا area جدا از backbone: areaای که به area 0 وصل نیست، مسیرهای بین areaها را دریافت نمیکند.
- انتظار Full بین همه: روی Ethernet، دو DROther در 2-Way میمانند.
وقتی OSPF داخل یک سایت کار کرد، میتوانید همین پروتکل را روی تونلهای IPsec بین شعبهها هم اجرا کنید تا مسیر شعبهها خودکار یاد گرفته شود؛ ساخت تونل در VPN فورتی گیت آمده است.
منابع
- RFC 2328 — OSPF Version 2 www.rfc-editor.org
- RFC 5340 — OSPF for IPv6 www.rfc-editor.org
- RFC 3101 — The OSPF Not-So-Stubby Area (NSSA) Option www.rfc-editor.org
- MikroTik Documentation — OSPF help.mikrotik.com
- MikroTik Documentation — routing ospf help.mikrotik.com
- Cisco — IP Routing Configuration Guide, Cisco IOS XE Dublin 17.12.x (Catalyst 9500) — Configuring OSPF www.cisco.com
- Cisco — IP Routing: OSPF Configuration Guide — Enabling OSPFv2 on an Interface Basis www.cisco.com
- Cisco — IP Routing: OSPF Command Reference (A through D) www.cisco.com
- Cisco — IP Routing: OSPF Command Reference (ip ospf fast-reroute through R) www.cisco.com
- Cisco — IP Routing Configuration Guide, Cisco IOS XE 17.x — Default Passive Interfaces www.cisco.com
- Cisco — What Is Administrative Distance? www.cisco.com