Routing یا مسیریابی، روشی است برای انتخاب مسیرهای شبکههای غیر محلی و انتقال اطلاعات به شبکهای دیگر که این کار توسط پروتکلهای مسیریابی انجام میشود.
در مسیریابی، بهترین و کوتاهترین مسیر برای رسیدن اطلاعات مشخص میشود که این کار توسط جدول Routing مشخص و مسیر انتخاب میشود، دربارهی این موضوعات بهطور مفصل در ادامهی کتاب باهم بحث خواهیم کرد.
Routing Table: این جدول تشکیل شده است از آدرسهای متصل به روتر و آدرسهای شبکههای غیر محلی، یعنی از شبکه دیگر.
Router#show ip route
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
E1 – OSPF external type 1, E2 – OSPF external type 2, E – EGP
i – IS-IS, L1 – IS-IS level-1, L2 – IS-IS level-2, ia – IS-IS inter area
* – candidate default, U – per-user static route, o – ODR
P – periodic downloaded static route
Gateway of last resort is not set
۱۹۲.۱۶۸.۱.۰/۲۴ is variably subnetted, 2 subnets, 2 masks
C ۱۹۲.۱۶۸.۱.۰/۲۴ is directly connected, GigabitEthernet0/0
L ۱۹۲.۱۶۸.۱.۱/۳۲ is directly connected, GigabitEthernet0/0
در این شکل دو روتر به هم متصل شدهاند. ip هایی که به آنها داده شده در رنج ۱۹۲.۱۶۸.۱.۰ است که همانطور مشاهده میکنید، این ip به عنوان شبکهی محلی روتر(رنگ قرمز) ثبت شده است. یک کلمهی C اول ip مشاهده میکنید که نشاندهندهی connected بودن آن است، البته هر حرفی که اینجا نوشته میشود در بالای آن کلمهی مربوط به آن نوشته شده است.
این جدول همان جدول Iprouting است که در بالا باهم درباره آن صحبت کردیم.
لازم است اینجا یک نکته را به شما دوستان بگویم که یک روتر فقط و فقط از شبکههای داخل خود که شبکهی محلی است، خبر دارد و از شبکههای خارج از آن خبری ندارد. به شکل زیر توجه کنید.
همانطور که در شکل میبینید، R1 از اطلاعات شبکهای که به وی متصل است خبر دارد، اما از اطلاعات شبکههای دیگر در روترهای دیگر خبری ندارد. برای حل این مشکل دو راهکار وجود دارد؛ برای معرفی شبکههای غیر محلی به روترها:
- Static Route
- Dynamic Routing
روش Static Route:
معرفی شبکههای غیر محلی در static Route به دو روش انجام میگیرد:
- IP Route
- Defualt Route
روش اول IP Route:
در این روش شبکههای غیر محلی را به صورت دستی به روتر معرفی میکنیم و میگوییم برای رفتن به این شبکه از کجا عبور کنید، این روش به علت اینکه معرفی و حذف مسیرهای شبکه به صورت دستی انجام میگیرد در شبکههای بزرگ بسیار کار وقتگیر و خستهکنندهای است و کمتر در این نوع شبکهها استفاده میشود.
مثال۱ :سه روتر وارد صفحه کنید و آنها را با کابل Cross به هم متصل کنید، مانند شکل زیر ip های روترها به صورت جدول زیر وارد شود.
۱۹۲.۱۶۸.۱.۱ | F 0/0 | R1 |
۱۹۲.۱۶۸.۱.۲ | F0/0 | R2 |
۱۹۲.۱۶۸.۲.۱ | F0/1 | |
۱۹۲.۱۶۸.۲.۲ | F0/0 | R3 |
برای اینکه متوجه شویم به روترها درست ip دادهایم از دستورping استفاده میکنیم. برای این منظور وارد روتر R1 شوید و در مد Privileged دستور زیر را وارد کنید.
Router# Ping 192.168.1.2
با این دستور این تست انجام میشود و نتیجهی کار باید به صورت زیر باشد:
Router#ping 192.168.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 0/0/0 ms
علامت ! پشت سر هم به این معنا است که به روتر روبرو متصل هستیم.
شما میتوانید بعدازاینکه Ip address را در اینترفیس وارد کردید، یک اسم را به ip ارتباط دهید و به جای ip، اسم آن را Ping کنید.
Router(config)# ip host cisco ۱۹۲.۱۶۸.۱.۲
همانطور که مشاهده میکنید نام cisco را به ip ، ۱۹۲.۱۶۸.۱.۲ ارتباط دادهایم که برای Ping کردن فقط اسم cisco را Ping میکنیم:
Router # ping cisco
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
.!!!!
Success rate is 0 percent (4/5)
به این موضوع توجه کنید که R1 فقط به شبکههای متصل به خودش دسترسی دارد و این شبکهها را به صورت شبکهی connected در جدول روتینگ خود ثبت میکند. حالا موقع این است که شبکههای غیر محلی را به روتر معرفی کنیم.
برای معرفی شبکه غیر محلی به روتر باید از دستور Ip Route استفاده کنیم. چطوری این کار را انجام بدهیم؟
در روتر R1 وارد مد Global شده و دستور زیر را وارد میکنیم:
Router(config)# ip route 192.168.2.0 ۲۵۵.۲۵۵.۲۵۵.۰ ۱۹۲.۱۶۸.۱.۲
این دستور را به این صورت بخوانید (همراه با شکل بخوانید)، بگویید: برو به شبکه ۱۹۲.۱۶۸.۲.۰ با SubnetMask، ۲۵۵.۲۵۵.۲۵۵.۰ از ۱۹۲.۱۶۸.۱.۲ عبور کن. در شکل زیر میتوانید این موضوع را مشاهده کنید.
نکتهی مهم: این عمل باید از هر دو طرف انجام بگیرد، یعنی اینکه مثلاً در این مثال در R3 هم باید این کار را انجام دهید، اما برعکس قبل که به صورت زیر باید دستور را در روتر R3 وارد کنید.
Router(config)# ip route 192.168.1.0 255.255.255.0 192.168.2.1
این دستور را به این صورت بخوانید؛ بگویید (شمارهی ۱) برو به شبکهی ۱۹۲.۱۶۸.۱.۰ با SubnetMask، ۲۵۵.۲۵۵.۲۵۵.۰ از ۱۹۲.۱۶۸.۲.۱ (شمارهی ۲) عبور کن. در شکل زیر هم میتوانید این موضوع را مشاهده کنید.
خوب، حالا اگر شما از R1 بخواهید،R3 را Ping کنید، این کار به خاطر فعال کردن IP Route انجام میشود.
Router# ping 192.168.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/2/13 ms
به راحتی توانستیم این کار را انجام دهیم، حالا وقت آن است که سری به جدول روتینگ بزنیم. برای نمایش جدول روتینگ از دستور Show IP Route در مد Privileged استفاده میکنیم، مانند زیر:
همانطور که مشاهده میکنید، لیست شبکههای متصل به روتر را با حروف C مشخص کرده است. اگر توجه کنید، شبکهای با حروف S وجود دارد که S در اینجا به معنای static است و این همان شبکهای است که به صورت دستی تعریف کردهایم.
نکته: اگر interface مورد نظر به هر دلیلیDown (خاموش) شود، ip Route که برای این مسیر ایجاد کردهایم، حذف میشود. برای اینکه بعد از Down شدن اینترفیس، IP Route از بین نرود، آخر این دستور از دستور permanent استفاده میکنیم، یعنی:
Router(config)#ip route 192.168.1.0 255.255.255.0 192.168.2.1 Permanent
روش Defualt Route:
شبکهها را در قسمت قبل توانستیم به صورت دستی تعریف کنیم. اگر تعداد شبکه زیاد شود، این کار وقتگیر است. متخصصان یک روش دیگر با عنوان Defualt Route معرفی کردند که دیگر لازم نیست تکتک شبکههای روترها را معرفی کنیم، فقط به روتر میگوییم، هر چیزی را که نمیدانی، بفرست به روتر کناری، به همین راحتی.
برای انجام این کار در مثال قبلی دستور Ip route را با گذاشتن no در اول آن حذف کنید، مانند زیر:
Router(config)#no ip route 192.168.2.0 255.255.255.0 192.168.1.2
Router(config)#no ip route 192.168.1.0 255.255.255.0 192.168.2.1
بعد از پاک کردن ip route های قبلی به این صورت دستورات را در روترهایR1 و R3وارد میکنید.
در روتر R1:
Router(config)# Ip Route 0.0.0.0 ۰.۰.۰.۰ ۱۹۲.۱۶۸.۱.۲
در روترR3:
Router(config)# Ip Route 0.0.0.0 ۰.۰.۰.۰ ۱۹۲.۱۶۸.۲.۱
این دستورات به این صورت است که میگوید هر Ip (0.0.0.0) با هر SubnetMask (0.0.0.0) که نمیشناسی را بفرست به روتر کناری خودت که به شما متصل است. به این صورت عمل میکند که وقتی روتر R1 بخواهد با روتر R3 ارتباط برقرار کند، به R2 میگوید که من ip، ۱۹۲.۱۶۸.۲.۲ را میخواهم، چون روتر R2 متصل است به روتر R3، همین امر باعث میشود که کار به نتیجه برسد. در حال حاضر اگر Ping از R1 به طرف R3 بزنید، جواب خواهد داد.
۲-Dynamic Routing:
این دسته از روشهای دسترسی به شبکههای غیر محلی دیگر به صورت دستی انجام نمیشود، بلکه به صورت خودکار از طریق Routing Protocols ها انجام میشود.
Routing Protocols ها در انواع مختلف و با سرعتهای متفاوتی وجود دارند که در ادامهی کتاب درباره آنها بحث میکنیم. این پروتکلها از طریق الگوریتمی که در خود دارند شبکههای خود را به دیگر روترها معرفی میکنند و در جدول روتینگ خود این شبکهها را درج میکنند.
تعریف Autonomuos System:
به مجموعهای از روترها که در یک منطقه قرار دارند، گفته میشود که روترها فقط در همان منطقه باهم در ارتباط هستند. اگر به شکل زیر نگاه کنید، متوجهی این موضوع میشوید.
عدد AS یا همان Autonomous System میتواند عددی بین ۰ تا ۶۵۵۳۵ باشد. در ادامه با اجرای یک پروتکل مانند IGP با AS آشنا میشوید.
پروتکلهای مسیریابی بر دو نوع هستند:
- IGPs(Interior Gateway Protocol)
- EGPs(Exterior Gateway Protocol)
پروتکلهای IGPs:
به روتینگ پروتکلهایی که داخل یک AS کار میکنند و باهم در ارتباط هستند، مانند پروتکلهای IGRP و RIP و EIGRP و OSPF، پروتکلهای IGPs گفته میشود.
پروتکلهای EGPs:
روتینگ پروتکلهایی که میتوانند AS های مختلف را به هم ارتباط دهند، مانند پروتکل BGP پروتکلهای EGPs گفته میشود که به آنها روترهای مرزی هم گفته میشود.
Dynamic Routing به سه دستهی کلی تقسیم میشوند که هر ۳ را باهم مورد بررسی قرار میدهیم:
- Distance Vector
- Link State
- Hybrid
پروتکلهای Distance Vector یا بردار فاصله:
به پروتکلهایی گفته میشود که فقط و فقط با روتر کناری خود در ارتباط هستند و تمام اطلاعات خود را به روتر کناری خود منتقل و دریافت میکنند.
برای رسیدن به یک شبکهی خاص از یک بردار خطی استفاده میکند، مانند شکل زیر:
در این پروتکلها اگر روتری، روتر کناری خود را بشناسد، میتواند بهترین مسیر را از روتر کناری خود دریافت کند. روتینگ پروتکلهایRIP و IGRPاز این نوع میباشند.
الگوریتمی که این نوع پروتکلها با آن کار میکنند، Bellman_Ford است که ویژگیهای آن به صورت زیر است:
- ساخت جدول Routing برای آدرسهای شبکه.
- شناسایی شبکههای متصل به آن و ثبت در جدول.
- انتقال اطلاعات این جداول به صورت کلی در زمان مشخص که به آن Priodic Update میگویند.
این نوع پروتکلها در جدول روتینگ خود ابتدا، شبکههای connect به خود را در جدول درج میکنند و بعد از ارتباط با روترهای دیگر بهترین مسیر را انتخاب و در جدول خود درج میکنند. روترها جداول خود را به صورت Broadcast به روترهای مجاور خود میفرستند که در پروتکل Rip به ip، ۲۵۵.۲۵۵.۲۵۵و در پروتکل IGRP بهip، ۲۲۴.۰.۰.۹ فرستاده میشود و بعد روتر در پاسخ به روتری که Update فرستاده، اطلاعات جدول خود را به صورت Unicast به این روتر میدهد و به همین صورت همهی روترها از کل شبکهی موجود باخبر میشوند.
Metric: در جدول روتینگ معیاری وجود دارد به نام متریک که تعداد روترهای سر راه برای رسیدن به شبکه موردنظر را مشخص میکند. در یک پروتکل مشخص برای رسیدن به یک شبکه اگر تعداد روترهای سر راه ۳ تا باشد، متریک میشود ۳ و به این هم توجه داشته باشید که هر چه متریک کمتر، مسیر بهتر و سریعتر است و همان مسیر انتخاب میشود.
به شکل بالا توجه کنید، در جدول روتر R1 دو تا از مسیرها، متریک آن صفر در نظر گرفته شده، آنهم به خاطر این است که متریک شبکههای متصل به روتر، صفر است. توجه داشته باشید به متریک، Hop Count هم میگویند. اگر با دقت بیشتر به جدول نگاه کنید، R1 شبکه ۱۰.۳.۰.۰ را با متریک ۱ در جدول خود قرار داده است، آنهم به این خاطر است که فقط یک روتر برای رسیدن به این شبکه در سر راه قرار دارد. اگر R1 بخواهد به شبکهی ۱۰.۴.۰.۰ برسد، متریک سر راه را ۲ در نظر میگیرد، چون ۲ تا روتر در سر راه تا رسیدن به آن شبکه قرار دارد.
Convergence Time:
به مدتزمانی گفته میشود که یک روتر به حالت پایدار میرسد و تمام شبکههای خود و اطراف خود را میشناسد و در جدول خود ثبت میکند.
بعد از اینکه روتر یک به حالت پایدار رسیده و جدول روتینگ خود را کامل کرده، در طی زمانهای مشخص تمام جدول روتینگ خود را به صورت Full Update به روترهای دیگر ارسال میکند. چه تغییری در جدول این روتر صورت بگیرد، چه نگیرد این Update ارسال میشود. به این روش ارسال اطلاعات که در طی زمانی مشخص صورت میگیرد، Priodic Update میگویند که این موضوع یکی از مهمترین ویژگیهای پروتکلهای Distance Vectore است.
روشهای انتخاب بهترین مسیر:
در شبکههایی که با پروتکلRip راهاندازی میشوند، انتخاب بهترین مسیر از روی Hop Count یا تعداد روترهای سر راه است. برای درک بهتر این موضوع به این شکل توجه کنید.
به دقت به شکل توجه کنید، R1 برای رسیدن به شبکهی ۱۹۲.۱۶۸.۱.۰ دو مسیر سر راه خود میبیند. در مسیر بالایی برای رسیدن به شبکهی۱۹۲.۱۶۸.۱.۰ ، سه روتر در سر راه قرار دارد، اما در مسیر پایینی پنج روتر در سر راه قرار دارد، پس به این نتیجه میرسیم که مسیر بالایی نسبت به مسیر پایینی سریعتر و کوتاهتر است. در پروتکل Rip که در ادامه با آن آشنا میشویم، انتخاب بهترین مسیر از روی متریک و یا همان روترهای سر راه است.
در شبکههایی که با پروتکل IGRP راهاندازی میشوند، قضیه کمی فرق میکند. در پروتکل IGRP برای انتخاب بهترین متریک، چند روش وجود دارد که هر کدام را باهم دیگر بررسی میکنیم.
- Bandwidth
- Delay
- Reliability
- Loading
- MTU
در این پروتکل، انتخاب بهترین مسیر از روی متریک صورت نمیگیرد، بلکه از روی دو گزینهی اول، یعنی Bandwidth و Delay صورت میگیرد که این دو گزینه به نسبت بقیهی گزینهها مهمتر هستند. اگر پهنای باند یک مسیر بیشتر باشد، همان مسیر به عنوان بهترین مسیر انتخاب میشود.
به شکل بالا توجه کنید، مسیر یک از پورتهایFastEthernet استفاده میکند و مسیر دوم از پورتهای GigabitEthernet استفاده میکند که پهنای باند FastEthernet، ۱۰۰۰۰۰ است و پهنای باند GigabitEthernet، ۱۰۰۰۰۰۰ است و Delay اولی۱۰۰ میلیثانیه و دومی ۱۰ میلیثانیه است و به خاطر بیشتر بودن پهنای باند و کمتر بودن زمان تأخیر، مسیر دوم، یعنی روترهای R4، R5، R6، R3 انتخاب میشود، به همین راحتی.
برای اینکه بتوانید پهنای باند مورد نظر یک پورت را مشاهده کنید، در مد Privileged از دستور زیر استفاده کنید، مثلاً برای پورت GigabitEthernet به این صورت استفاده کنید:
Router# Show interface GigabitEthernet0/0
با این دستور، اطلاعات روبرو را به ما نشان میدهد.
همانطور که مشاهده میکنید، پهنای باند برای پورت GigaEthernet، ۱۰۰۰۰۰۰ وDelay ، ۱۰ است.
بررسی loop در پروتکلهای Distance Vectore:
رویداد loop یا دور در شبکه، یکی از ویژگیهای پروتکلهای Distance Vectore است و باعث مشکلات عمدهای در شبکه میشود، البته اینگونه مشکلات با ارائهی روشهای خاص حل شده است، اما باهم این مشکلات را بررسی میکنیم.
همانطور که در شکل بالا مشاهده میکنید، قبل از اینکه مشکلی برای پورت E0 روتر C پیش بیاید روتر C اطلاعات جدول روتینک خود را به روترهای مجاور فرستاده است، یعنی در زمان مشخصشدهPriodic Update خود را برای بقیهی روترها فرستاده است و روتر B شبکهی ۱۰.۴.۰.۰ را با متریک ۱ و روتر A این شبکه را با متریک۲ در شبکهی خود ثبت کرده است، بعد برای پورت E0 مربوط به روتر C مشکلی ایجاد شده است وshutdown شده است و down شدن این پورت در جدول روتر C ثبت میشود، اما بقیهی روترها از این موضوع خبر ندارند، چون زمان Full Update یا همان Priodic Update روتر C فرا نرسیده است، قبل از اینکه روتر C این عمل را انجام دهد، روتر B، Priodic Update خود را به روترهای مجاور خود قرار دارند ارسال میکند، چون در جدول روتر B شبکهی ۱۰.۴.۰.۰ قرار دارد و نمیداند که Down شده است به شبکههای دیگر میفرستد و روتر C جدول روتینگ خود را update میکند و این شبکه را در جدول خود جای میدهد. با این کار متریکها به صورت زیر تغییر میکنند.
اگر متوجه شده باشید، روتر B اولین بار شبکهی ۱۰.۴.۰.۰ را با متریک ۱ از روتر c یاد گرفته بود، بعدازاینکه آپدیت خود را به روترهای دیگر میفرستد، روتر C این شبکه را که در جدول خود ندارد، با متریک ۲ قبول میکند، چون با متریک ۱ از روتر B دریافت میکند و وقتی وارد روتر C میشود، ۲ میشود؛ همینطور این کار ادامه داده میشود و متریکها به اشتباه در تمام روترها افزایش پیدا میکند، مانند شکل زیر:
دوباره روتر c جدول آپدیت خود را به روترهای مجاور خود میدهد و دوباره این متریک افزایش پیدا میکند، به این افزایش متریک بیرویه و اشتباه در اصطلاح، countingtoinfinity گفته میشود. برای حل این مشکل باید حداکثر مقدار Metric را در پروتکل Rip تعریف کنیم که در بحث Rip این کار را انجام میدهیم.
مشکل بعدی این است که دو روترB و C در یک loop قرار میگیرند، وقتی روتر A، ۱۰.۴.۰.۰ را درخواست میکند، آن را به روتر B میدهد و روتر B هم به روتر C میدهد و روترC برای رفتن به شبکهی ۱۰.۴.۰.۰ اطلاعات را دوباره به طرف روتر B میفرستد و بعد، روتر B هم آن را دوباره به روتر c میفرستد که این امر باعث افتادن دو روتر در یک دایرهی تکرار میشود، مانند شکل زیر:
روشهای مختلفی برای جلوگیری از loop در پروتکلهای Distance Vector وجود دارد که باهم مورد بررسی قرار میدهیم.
روش اول Split Horizon:
در این روش اگر روتر C شبکهی ۱۰.۴.۰.۰ را به روتر B داده است، روتر B دیگر این شبکه را به روتر C نمیفرستد، یعنی هر چیز گرفت، دیگر همان شبکه را پس نمیدهد.
همانطور در شکل بالا مشاهده میکنید، شبکههایی که از طریق روتر A به B و B به C میرسد، دوباره به خودشان برگشت داده نمیشود.
روش دوم Route Poisoning:
در این روش وقتی شبکهای از مسیر خارج و down میشود، این شبکه از جدول حذف نمیشود، بلکه متریک آن به بینهایت تغییر کرده و همین امر باعث میشود که به دیگر روترها این update ارسال شود و بقیهی روترها این شبکه را با متریک بینهایت در جدول روتینگ خود ثبت میکنند و وقتی روترها این شبکه را درخواست کنند، Unriachable بودن آن و از دست رفتن آن مشخص میشود. این شبکه در جدول روترها تا زمان به پایان رسیدن Holddown Timer در جدول باقی میماند و حذف نمیشود.
این روش همزمان با روش زیر کار میکند.
روش سوم Split Horizon With Poisoning Revers:
زمانی که از یک روتر بینهایت شدن متریک را دریافت میکند، دوباره همان شبکه را با متریک بینهایت به شبکهای که این خبر را ارسال کرده، میفرستد این موضوع زمانی به کار میآید که اگر در زمان Down شدن شبکه، روتر C، روتر مجاور آن، یعنی روتر B یک update ارسال کند که این شبکه با متریکی پایینتر از متریک قبلی به روتر C داده شود، دوباره روتر C این شبکه را که از روتر B با متریک بهتر یاد گرفته، در جدول روتینگ خود قرار میدهد و همین کار باعث در Loop قرار گرفتن شبکه میشود، پس این روش، بهبودیافتهی روشSplit Horizon است.
روش چهارم Holddown Timer:
یک زمانسنج است که برای پروتکل Rip، ۱۸۰ ثانیه و برای پروتکل IGRP، ۲۷۰ ثانیه است. این زمانسنج، زمانی اجرا میشود که یک روتر بفهمد که یک شبکه Down شده است. تا زمانی که این شبکه Down است تا مدتزمان مشخص بههیچوجه به هیچ سؤالی که از این شبکه بیاید، جواب نمیدهد. اگر بعد از پایان زمان مورد نظر، این شبکه up نشود، روتر، این شبکه را از لیست خود حذف میکند، اما اگر در این مدتزمان شبکهای با متریک کمتر به روتر برسد، آن شبکه را جایگزین شبکهی قبلی میکند و از حالت Holddown خارج میشود.
حالتی به نام Triggered Update وجود دارد و همزمان با Holddown Timer کار میکند و زمانیکه یک شبکه Down شد و شبکهی مورد نظر به حالت Hold رفت، در مدتزمان مشخصشده، Triggered Update به کل روترها خبر Down شدن این شبکه را میدهد و باعث جلوگیری از Loop میشود.