همانطور که میدانید معمولا مسیریابی در شبکه بر اساس آدرسهای IP صورت میگیرد. یعنی روترها با نگاه کردن به آدرس IP مقصد بسته تصمیم میگیرند که گام بعدی بسته کجا خواهد بود. در گذشته نه چندان دور جستجو در جدولهای مسیریابی برای پیدا کردن مسیر مناسب یک بسته بسیار زمان بر بود. علت این امر نیز استفاده از روشهای نرم افزاری برای انجام این کار و ضعیف بودن سخت افزار روترها در آن زمان بود. روتر برای هر بسته دریافتی باید آدرس مقصد بسته را بررسی میکرد و آن را در جدول مسیریابی خود برای پیدا کردن گام بعدی بسته جستجو مینمود. برای سرعت بخشیدن به هدایت بستهها و افزایش بازدهی شبکه یکی از روشهایی که به طور گسترده مورد استفاده قرار گرفت بهره بردن از MPLS بود.
Multi-Protocol Label Switched پروتکلی است که به وسیله آن مسیریابی بستهها بر اساس Labelها صورت میگیرد. اگر در شبکهای MPLS فعال شده باشد، روترها مسیریابی را بر اساس آدرسهای IP انجام نمیدهند! بلکه این کار با نگاه کردن آنها به یک سری label صورت میگرد. این labelها 32 بیتی بوده و بین هدر لایه 2 و 3 قرار میگیرند. به همین دلیل است که گاهی به MPLS یک پروتکل لایه 2.5 گفته میشود.
البته با گذشت زمان و ابداع روشهای جدید برای مسیریابی بستهها (روشهایی مانند Cisco Express Forwarding) استفاده از MPLS صرفا برای افزایش سرعت مسیریابی بی معنی گردید. اما آنچه باعث شد MPLS یک پروتکل محبوب سرویس دهندگان باقی بماند سرویسهایی است که ارائه میدهد. سرویسهایی مانند:
1- MPLS L3VPN
2- MPLS L2VPN یا همان Any Transfer over MPLS که به AToM معروف است
3- Traffic Engineering
قبل از فعال کردن MPLS باید مطمئن بود که مسیریابی بر اساس آدرس IP یا همان IP routing در شبکه به درستی صورت میگیرد. چه این مسیریابی بر اساس مسیرهای دریافتی از یک پروتکل IGP مانند OSPF باشد و یا مسیریابی static انجام شده باشد.
برای فعال کردن MPLS در یک مسیریاب سیسکو باید کارهای زیر را انجام داد:
1- مشخص کردن محدوده labelها برای هر مسیریاب (اختیاری)
2- فعال کردن MPLS در روتر به صورت کلی
3- فعال کردن MPLS در اینترفیسهای لازم
تصور کنید که میخواهیم در شبکهای مانند شکل زیر MPLS را فعال کنیم.
در این شبکه از پروتکل مسیریابی OSPF استفاده شده است
هر روتر دارای یک اینترفیس loopback است که بر روی آن آدرس IP متناظر شماره روتر قرار گرفته است. مثلا بر روی روتر R1 آدرس 1.1.1.1 قرار گرفته است.
ابتدا از درستی عملکرد IP routing مطمئن میشویم. در هر مسیریاب یک اینترفیس loopback در نظر گرفته شده است. این اینترفیس در R1 آدرس 1.1.1.1 در R2 آدرس 2.2.2.2 و … را دارد.
R1-PE#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
i - IS-IS, su - IS-IS summary, 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, + - replicated route
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
C 1.1.1.1 is directly connected, Loopback0
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/2] via 10.12.0.2, 00:12:34, FastEthernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/3] via 10.12.0.2, 00:12:24, FastEthernet0/0
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/4] via 10.12.0.2, 00:12:24, FastEthernet0/0
5.0.0.0/32 is subnetted, 1 subnets
O 5.5.5.5 [110/5] via 10.12.0.2, 00:12:24, FastEthernet0/0
10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C 10.12.0.0/24 is directly connected, FastEthernet0/0
L 10.12.0.1/32 is directly connected, FastEthernet0/0
O 10.23.0.0/24 [110/2] via 10.12.0.2, 00:12:35, FastEthernet0/0
O 10.34.0.0/24 [110/3] via 10.12.0.2, 00:12:25, FastEthernet0/0
O 10.45.0.0/24 [110/4] via 10.12.0.2, 00:12:25, FastEthernet0/0
از روی روتر R1-PE آدرس 5.5.5.5 که بر روی روتر R5-PE قرار دارد را پینگ میکنیم تا از درستی ارتباط کاملا مطمئن شویم.
R1-PE#ping 5.5.5.5 source 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/64/88 ms
برای فعال کردن MPLS در روتر R1-PE (اولین مسیریاب از سمت چپ) به صورت زیر عمل میکنیم:
mpls label range 100 199
mpls label
interface FastEthernet0/0
mpls ip
برای سایر روترها نیز مشابه بالا عمل میکنیم.
در صورتی که همه چیز به درستی پیکربندی شده باشد هر یک از روترها به ازای هر روت در جدول مسیریابی خود یک label ایجاد میکند. سپس روترها این labelها را از طریق پروتل LDP با یکدگیر به اشتراک میگذارند تا روترهای همسایه از labelهای یکدیگر نیز آگاهی پیدا کنند.
برای مشاهده labelهایی که یک روتر برای روتهای مختلف ایجاد کرده و همچنین labelهایی که همسایههای آن ایجاد کرده اند میتوان به صورت زیر عمل کرد.
R1-PE#show mpls ldp bindings
lib entry: 1.1.1.1/32, rev 5
local binding: label: imp-null
remote binding: lsr: 2.2.2.2:0, label: 202
lib entry: 2.2.2.2/32, rev 7
local binding: label: 101
remote binding: lsr: 2.2.2.2:0, label: imp-null
lib entry: 3.3.3.3/32, rev 16
local binding: label: 105
remote binding: lsr: 2.2.2.2:0, label: 201
lib entry: 4.4.4.4/32, rev 15
local binding: label: 104
remote binding: lsr: 2.2.2.2:0, label: 205
lib entry: 5.5.5.5/32, rev 13
local binding: label: 103
remote binding: lsr: 2.2.2.2:0, label: 204
lib entry: 10.12.0.0/24, rev 4
local binding: label: imp-null
remote binding: lsr: 2.2.2.2:0, label: imp-null
lib entry: 10.23.0.0/24, rev 9
local binding: label: 102
remote binding: lsr: 2.2.2.2:0, label: imp-null
lib entry: 10.34.0.0/24, rev 19
local binding: label: 107
remote binding: lsr: 2.2.2.2:0, label: 203
lib entry: 10.45.0.0/24, rev 18
local binding: label: 106
remote binding: lsr: 2.2.2.2:0, label: 206
با گرفتن تریس در شبکهای که بر روی آن MPLS فعال شده است میتوان labelهای مورد استفاده در هر گام را مشاهده کرد.
R1-PE#traceroute 5.5.5.5 source 1.1.1.1
Type escape sequence to abort.
Tracing the route to 5.5.5.5
1 10.12.0.2 [MPLS: Label 204 Exp 0] 52 msec 12 msec 68 msec
2 10.23.0.3 [MPLS: Label 306 Exp 0] 44 msec 16 msec 68 msec
3 10.34.0.4 [MPLS: Label 401 Exp 0] 12 msec 28 msec 32 msec
4 10.45.0.5 64 msec 40 msec 44 msec