حامد خاکباز
Computer Specialist and Cloud Engineer

پروتکل OSPF چیست؟ بررسی عملکرد و نحوه کار OSPF به زبان ساده

OSPF چیست؟ او اس پی اف چگونه کار می کند؟ پروتکل OSPF از دسته ی IGP(Interior Gateway Protocol) است، یعنی پروتکلی است که درون یک AS(Autonomous System) کار می کند. این پروتکل استاندارد RFC2328 است، یعنی همه ی تجهیزات می توانند از آن استفاده کنند. این پروتکل می تواند تغییرات را به سرعت در شبکه اعمال کند، همچنین قابلیت triggered update دارد یعنی پس از هر تغییر یک آپدیت جدید می فرستد و به همه خبر می دهد که این تغییر در Routing ما انجام شده است.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

همچنین قابلیت periodic update دارد یعنی هر چند دقیقه یکبار هم یک آپدیت کلی ارسال می کند.(پیشفرض هر30دقیقه) پیغام هایی که OSPF ارسال می کند LSA(Link State Advertisement) نامیده می شوند، اما در برخی منابع نیز PDU(Protocol Data Unit) نامیده شده است. اگر تغییری در شبکه اتفاق بیافتد، در قالب پیغام های LSA اطلاع رسانی می شود. پیغام های LSA روی آدرس Multicast 224.0.0.5 ارسال می شود، یعنی درون فایروال باید این آدرس را برای OSPF باز بگذارید.

هر روتر LSA دریافتی را پس از ذخیره کردن برای همسایه ها Forward می کند، منتها محدوده ی Forward درون همان Area است.روترها LSAها را درون LSDB(Link State Data Base) روی روتر ذخیره می کنند.(LSDBمعادل همان Topology Tableدرون EIGPR می باشد) درون LSDB الگوریتم Dijkstra's (یکی از الگوریتم های پیمایش گراف) بهترین مسیرها را برای مقصدهای مختلف بدست می آورد و این مسیرهای منتخب درون Routing Table قرار می گیرند.

هر روتر براساس موقعیت و مکان خودش، بهترین مسیر را از LSDB انتخاب می کند، بهترین مسیر برای همه ی روترها همیشه یکسان نیست بلکه براساس Position و شرایط آن روتر انتخاب می شود. بهترین مسیرها درون Routing Table قرار میگیرد که به آن Forwarding Database هم گفته می شود.

روتری که در OSPF شرکت می کند، اولین کاری که باید انجام دهد این است که اطلاعات همسایه ها را نگهداری کند. برای این کار قطعا یک Neighbor Data Base خواهد داشت.(که Adjacency Data Base هم نامیده می شود) بعد از شناختن همسایه هایی که روی آنها OSPF اجرا شده است و در حال ارسال و دریافت LSA هستند، LSDB و به تبع آن Routing Table هم تکمیل می شود. (هنگام T-Shoot در OSPF ابتدا باید دید که Neighborها را شناخته باشد)

OSPF از ساختار Area برای جلوگیری از بزرگ شدن LSDB استفاده می کند. تعداد روتر توصیه شده برای هر Area حداکثر 50 روتر می باشد. نمی شود گفت که OSPF برای مدیریت شبکه به دنبال ساختار Area رفته است، چراکه وقتی حجم LSDB بالا برود کار الگوریتم برای محاسبه دشوار می شود زیرا شبکه خیلی پیچیده شده و تغییرات زمان بر است که این مطلوب نیست.

علاوه براین LSDB یک سری attribute برای هر مسیر دارد که resource فراوانی را اشغال می کند، زیرا برای انتخاب بهترین مسیر این attribute روی RAM دستگاه قرار می گیرد و هنگام اعمال الگوریتم RAMوCPU فراوانی اشغال می شود.ساختار Area درون OSPF دو لایه ای است: لایه اول: Backbone Area ، لایه دوم: Regular Area.

Backbone که همان Area 0 می باشد در واقع هسته ی اصلی Routing Protocol ما است. (روترهای درون Area 0 باید از قدرت بالایی برخوردار باشند چراکه تمام ترافیک Routing شبکه باید از آن عبور کند) حداکثر تعداد روتر توصیه شده درون یک 50areaروتر می باشد) Area 0 هسته است اما نه هسته ی شبکه بلکه هسته ی Routing Protocol است، یعنی ترافیک سایر Routing protocol ها کاری با Area 0 ندارند.

Regular Area که Normal Area یا None-Backbone هم نامیده می شود سایر Areaها می باشند که فقط با Area 0 در ارتباط اند. یک Normal Area نمی تواند به صورت پیشفرض ترافیک سایر Normal Areaها را عبور دهد. هر Area یک LSDB منحصربه خود دارد که روی تمام روترهای عضو آن باید یکسان باشد.

LSDB یک Area با هیچ Area دیگری یکسان نیست. بین دو Area جزئیات تمام مسیرها ردوبدل نمی شود چون که به دردشان نمی خورد بلکه تنها اطلاعات بهترین مسیر مدنظر داده می شود. توصیه شده است که یک روتر حداکثر عضو سه Area باشد. برای هر روتر بسته به ویژگی ها و وظیفه ای که درون OSPF برعهده دارد نام های زیر در نظر گرفته می شوند:

  • Internal Router : به روتری که همه ی interface های آن درون تنها یک Area باشد، گفته می شود.
  • Backbone Router : روتری که حداقل یک interface آن درون Area 0 باشد.
  • ABR(Area border Router) : روتری که interface های آن درون Area های مختلف است و به ازای هر Area یک LSDB جداگانه دارد. معمولا ABR بین Area 0 و Normal Area ها می باشد.
  • ASBR(Autonomous System Boundary Router) : روتری که حداقل یک interface آن به یک Routing Domain دیگر متصل باشد.
تفاوت ABR و ASBR

برای ایجاد همسایگی روترها ابتدا روی آدرس Multicast پیغام Hello ارسال می کنند. درون این پیغام یک سری اطلاعات راجع به OSPF ارسال می شود. اولین شرط همسایگی این است که این دو روتر حتما درون یک Area باشند. درون یک Area وقتی یک روتر جدید اضافه می شود پس از ایجاد همسایگی، باید تمام LSDB این Area برای روتر جدید ارسال شود. اما گاهی ارتباط این همسایه ها P2P نیست و ممکن است چند روتر از یک Area مثلا به یک سوئیچ متصل باشند و Network Typeما Broadcast Domain باشد. نحوه ی رفتار OSPF نسبت به این دو نوع شبکه کاملا متفاوت خواهد بود:

  1. حالت P2P در OSPF : زمانی که دو روتر با یک لینک سریال به هم متصل شده اند و پروتکل HDLC یا PPP روی آن اجرا شده است، در این حالت قطعا LSDB ها جابجا می شوند و یکبار هم بیشتر این کار انجام نمی شود.
  2. حالت Broadcast در OSPF : زمانی که چند روتر از طریق سوئیچ به هم متصل هستند، در این حالت اگر روترها بخواهند دو به دو با هم LSDB جابجا کنند حجم زیادی دیتا باید ردوبدل شود که مطلوب نیست.
یک Broadcast Domain درون OSPF

در این ساختارها یک روتر به عنوان DR در نظر گرفته می شود، سایر روترهایی که درون این Broadcast Domain هستند، LSDB های خود را با DR درست می کنند. روتر DR یک نقش مرکزی دارد که آپدیت ها را از سایر روترها جمع آوری می کند و در اختیار روترهایی قرار می دهد که نیاز دارند.

یک روتر هم نقش BDR را برعهده می گیرد تا زمانی که DR از کار افتاد به عنوان جایگزین ادامه ی کار را برعهده گیرد. هدف از این مکانیزم بالابردن بازدهی شبکه است. سایر روترها که نه DR است و نه BDR هستند، در این ساختار DRouter نامیده می شوند. اگر یک روتر جدید به این سوئیچ متصل شود با سایر روترها همسایه می شود اما برای تکمیل LSDB خود فقط با DR کار دارد.محاسبه ی Metric در OSPF براساس هزینه است. هر چه BW(Band Weight) بیشتر باشد، هزینه پایین تر می آید.

  • فرمول محاسبه ی Metric در OSPF بر حسب Mbps:
  • ((100 تقسیم بر BW))
  • بر حسب bps:
  • ((10 به توان 8 تقسیم بر BW ))

به عبارت دیگر Metric بر این اساس انتخاب می شود که کدام مسیر Cost کمتری دارد. مسیری Cost کمتری دارد که BW بیشتری داشته باشد، یعنی ملاک اصلی انتخاب Metric در OSPF همان BW است. لینک سریال، اگر 56Kbps باشد، Cost آن 1785 است، اگر 64Kbps باشد، Cost آن 1562 است. اگر E1 باشد48 ، اگر Ethernetباشد 10 و اگر Fast Ethernet باشد 1 است.

در OSPF ما با پیغام های LSA سروکار داریم، LSA هم متدی دارد برای این که reliable باشد. هر LSA یک Sequence Number دارد که براساس آن Sequence Number جواب های Acknowledge ارسال می شود یعنی در LSA برای تشخیص جدیدترین آپدیت ها از Sequence Number استفاده می شود. همچنین هر LSA یک MaxAge دارد یعنی مدت زمانی که آن LSA معتبر خواهد بود که به صورت پیشفرض یک ساعت است اگر آپدیتی دریافت نکند، پس از 60 دقیقه آن LSA نامعتبر می شود. به صورت پیشفرض هر 30دقیقه یکبار OSPF کل LSDB ای که دارد را درون شبکه Deploy می کند.

یک پیغام به نام LSU(Link State Update) وجود دارد که آپدیت های Routing را ارسال می کند، هر LSU می تواند شامل چندین LSA باشد. وقتی که روتر یک LSU دریافت می کند ابتدا تک تک LSAهای درون آن را بررسی می کند که آیا این آپدیت ها را در LSDB خود دارد یا خیر، (مثلا فرستنده ی LSU می خواهد بگوید که به سمت شبکه ی 40.0.0.1 یک Route دارد) اگر روتر گیرنده ی LSU آن Route را نداشته باشد.

آن LSA (همان 40.0.0.1) را ذخیره کرده و یک Ack برای فرستنده ارسال کرده و سپس الگوریتم روی LSDB اجرا می شود تا Routing Table با توجه به آپدیت های جدید چیده شود. ممکن است پیش بیاید که یک LSU دریافت کنیم که آپدیت جدیدش برای LSA ای باشد که در LSDB ما از قبل موجود است

(مثلا روتر من 40.0.0.1 را از قبل دارد)، حال باید Sequence Number این LSA دریافتی با Sequence Number آن LSA ای که از قبل در LSDB ما موجود بوده مقایسه شود، اگر Sequence Number دریافتی بزرگتر باشد پس روتر آن را Add کرده و Ack را نیز می فرستد. اگر کوچکتر باشد پس روتر وقتی که می بیند بسته های قدیمی بدستش می رسد یک LSU از آن موارد ساخته و برای Source ای که LSU قدیمی را فرستاده بود، می فرستد تا LSU آن هم آپدیت شود.

چند نوع Packet در OSPF وجود دارد؟

  1. Hello: هر 10 ثانیه دوره ای ارسال می شود تا همسایه ها را پیدا کرده و ارتباط را برقرار کند. اگر hello ها دریافت نشوند همسایگی از بین می رود. هر روتر یک Dead Interval دارد که به صورت پیشفرض چهار برابر زمان ارسال دوره ای Hello Packet آن می باشد (پیشفرض 40 ثانیه) و مشخص می کند که چه مدت باید منتظر دریافت Hello از سمت Neighbor بمانیم و پس از گذشتن این مدت همسایگی از بین می رود. علت استفاده از Dead Interval این است که بلافاصله پس از دریافت نکردن یک hello کل توپولوژی به هم نخورد، روتر باید منتظر بماند چراکه شاید Packet Lost اتفاق افتاده باشد یا مشکل موقتی دیگری است. توصیه می شود جایی که شبکه ی ما زیاد Stable نیست مقدار Dead Interval را بیشتر بگذاریم.
  2. DBD(Data Base Description): وقتی دو روتر تازه همسایه شدند، باید چک شود که آیا اینها LSDB هایشان یکی هست یا خیر. به عبارت دیگر کاربرد DBD برای Data Base Synchronization است. DBD کل LSDB را نمی فرستد بلکه تنها یک خلاصه ای از آن را ارسال می کند.
  3. LSR (Link State Request): وقتی که روتر من دنبال یک LSA می گردد و اطلاعات آن را از همسایه ها درخواست می کند. مثلا زمانی که یک DBD دریافت می شود ممکن است تعدادی از اطلاعات درون آن برای روتر شناخته باشد پس یک LSR برای فرستنده ی DBD ارسال می شود تا در قالب یک LSU اطلاعات کامل مسیرهای خواسته شده دریافت شود.
  4. LSAck: زمانی که قرار است Acknowledge ارسال شود. این LSAck بحث reliable بودن OSPF را تصدیق می کند.
  5. LSU: زمانی که قرار است آپدیت ارسال شود. LSU گاهی یک جواب برای LSR است.

پیغامی مثل Hello نیاز به Ack ندارد چون مداوم در بازه های زمانی ارسال می شود، اما وقتی LSU داریم حتما باید در جواب Ack بفرستیم.تمامی پنج Packet توی OSPF به صورت لایه سومی توسط بسته های IP ارسال می شوند یعنی OSPF از UDP و TCP استفاده نمی کند و مکانیزم خاص خود را دارد.شما یک Frame دارید که Header و trailer دارد، داخل Frame یک قسمتی به نام IP Header وجود دارد و درون آن Protocol ID Number مشخص شده است که مقدار آن 89 می باشد تا هر روتری که این بسته را گرفت بفهمد که OSPF است.

پارامترهای دیتا در پروتکل OSPF چه چیزهایی هستند؟

  • Version Number: برای IPv4 ورژن 2 و IPv6 هم از ورژن 3 استفاده می کند.
  • Type: نوع OSPF Packet ارسالی را مشخص می کند.
  • Length: طول بسته را نشان می دهد.
  • Router ID: یک مقدار 32بیتی (اندازه IPv4) که می تواند به صورت دستی تنظیم شود، پیشفرض اگر اینترفیس Loopback داشته باشیم مقدار Router ID همان IP آن اینترفیس است وگرنه IP اینترفیسی برای Router ID انتخاب می شود که عدد شماره اش بیشتر است و آن اینترفیس فعال است. علت اولویت Loopback این است که هیچ وقت خاموش نمی شود یا هست یا نیست. برای ایجاد همسایگی ابتدا روتری که Router ID بالاتری دارد، DBD را ارسال می کند. Router ID تنها فرمتش مانند IPv4 است و هیچ ارتباط دیگری با هم ندارند.
  • Area ID: یک شناسه 32بیتی
  • Checksum: برای error detection استفاده می شود. و در موارد که دو LSA دارای SeqNumber برابر باشند، ملاک بعدی برای تعیین جدیدترین LSA همین Checksum است.
  • AuType: نوع Authentication می تواند یا nullباشد یعنی بدون رمز، یا رمز ساده باشد و یا از الگوریتم MD5 برای کدنگاری استفاده کند.
  • Authentication: یک فیلد 64بیتی برای ذخیره ی رمز

اما درون IP Packet پس از Header نوبت به فیلد دیتا می رسد:

  • اگر Packet Type از نوع Hello باشد، پس فیلد دیتا شامل لیستی از همسایه ها است.
  • اگر Packet Type از نوع DBD باشد، شامل خلاصه ای از LSDB است.
  • اگر LSR باشد، شامل نوع LSU های درخواست شده است.
  • اگر LSAck باشد، فیلد دیتا خالی است

شرط اول همسایگی، برابری Area ID است. همچنین مقدار MTU نیز در هر دو طرف لینک برای ایجاد همسایگی باید یکسان باشد. اگر مقدار Dead Interval برای Hello Packet روی دو روتر یکسان نباشد همسایگی برقرار نمی شود. همچنین AuType و رمز هم بین دو طرف باید یکسان باشد.

توصیه می شود همیشه ابتدا شبکه را اندازی کنیم و سپس به فکر Authentication باشیم. برای همسایگی فقط primary IP address در نظر گرفته می شود و خیلی از سرویس ها روی secondary IP address اجرا نمی شوند. معمولا از secondary IP address به عنوان یک نقش کلاینتی استفاده می شود. همچنین برای همسایگی Subnet Mask ها نیز باید یکی باشند.

هر روتر یک Router Priority دارد، که برای انتخاب DR و BDR در یک Broadcast Domain استفاده می شود. DRوBDR هم برای آپدیت کردن از Multicast استفاده می کنند اما نه از 224.0.0.5 بلکه از 224.0.0.6. پس ما باید در تنظیمات فایروال و ACL این IP را باز گذاشته باشیم. به عبارت دیگر ارتباط روترها با DR روی آدرس 224.0.0.6 است.

معرفی وضعیت های مختف روتر در پروتکل OSPF برای رفع اشکال

  • Down State: یعنی همسایگی برقرار نیست. مثلا پیش می آید که شما تمام تنظیمات را درست انجام داده اید و حتی ping همسایه را هم دارید ولی وضعیت همسایگی برقرار نیست، در این حالت قطعا Hello Packet ها در طول مسیر Drop شده اند و رنج Multicast 224.0.0.5 باز نیست.
  • Initialize: یعنی برای اولین با یک Hello Packet دریافت شده است. پس از اینکه روتر دوم اولین Hello را دریافت کرد، برای فرستنده ی آن یک hello از جنس Unicast می فرستد تا درخواست همسایگی اجابت شود. به همین علت است که Hello Packet ها نیاز به LSAck ندارند.
  • Two Way: یعنی هر دو طرف قبول کردند که باهم همسایه باشند.
  • Exstart: علت استفاده از الویت Router ID در این مرحله انتخاب شروع کننده ی ارسال DBD است چون هر دو روتر همزمان نمی توانند برای هم DBD ارسال کنند و یکی باید فرآیند را آغاز کند.
  • Exchange State: پس از همسایگی نوبت به همگام سازی LSDB ها رسیده است. حالت Exchange هنگامی است که بالاترین Router ID شروع به ارسال DBD می کند. هر دو روتر پس از دریافت DBD برای هم LSAck می فرستند.
  • Loading State: در این مرحله چک می شود که با LSR چه اطلاعاتی را باید درخواست دهد و از LSU دریافت کند. پس از این که هر روتر خلاصه ای از LSDB همسایه اش را دریافت کرد، حال آن Record هایی که ندارد را درخواست می کند.
  • Full: یعنی LSDB ها هم همگام سازی شده اند.

خلاصه ای از وضعیت LSA ها هر 30 دقیقه یکبار در شبکه ارسال می شود. تا هر روتری که دید Record خاصی را ندارد با LSR درخواست کند تا با LSU دریافت کند. وقتی که یک LSA مجددا دریافت می شود Life Time آن Refresh می شود. MaxAge برای هر LSA پیشفرض 60 دقیقه است، یعنی اگر پس از 60 دقیقه LSA ای Refresh نشود، آن LSA از درون LSDB حذف می شود.

قبلا گفتیم که برای پیدا کردن بروزترین LSA باید SeqNumber ها چک شود، اما اگر SeqNumber ها برابر باشد، باید CheckSum های آن ها مقایسه شود و آن LSA ای که عدد CheckSum بالاتری داشته باشد، بروزتر است. اگر CheckSum ها نیز یکی بود، Age Time بررسی می شود که کدام Age کمتری دارد. لازم به ذکر است که SeqNumber یک عدد 32 بیتی است و به صورت هگزادسیمال نمایش داده می شود.

  • پروتکل OSPF چیست؟

    به زبان ساده ، پروتکل OSPF یک پروتکل مسیریابی بسته های اطلاعاتی در شبکه های کامپیوتری است. در واقع این پروتکل یک راهکار برای جلوگیری از وارد کردن مسیرهای دستی توسط مدیر شبکه است و به عنوان یک پروتکل داینامیک روتینگ یا مسیریابی پویا یا خودکار شناخته می شود.

حامد خاکباز
حامد خاکباز

Computer Specialist and Cloud Engineer

a significant focus on Storage Virtualization, Replication, Software Defined Storage

نظرات