This site is best viewed using the updated version of Mozilla Firefox

Multi Protocol Label Switching (MPLS) Fundamentals

আসসালামু আলাইকুম।আশাকরি মহান আল্লাহতায়ালার অশেষ রহমতে আপনারা সবাই ভালো আছেন।

আজকে আমরা MPLS নিয়ে আলোচনা করবো। আমরা অনেকেই MPLS শব্দটি শুনেছি কিন্তু আমরা অধিকাংশই জানি না যে, MPLS আসলে কি এবং এটি কি কাজে লাগে। প্রাথমিকভাবে বলতে গেলে, MPLS হলো একটি এ্যাডভান্স লেভেলের WAN প্রটোকল যা একটি সার্ভিস প্রোভাইডার অর্থাৎ আই.এস.পি এর নেটওয়ার্ক ম্যানেজ করার জন্য ব্যবহৃত হয়। এই MPLS এর মাধ্যমে একটি আই.এস.পি তার ক্লায়েন্টসমূহের মধ্যে ট্রাফিক আদান-প্রদান করে থাকে। এখানে বলা যেতে পারে, আই.এস.পি তো ক্লায়েন্টদের ট্রাফিক আদান-প্রদানের জন্য বিভিন্ন ধরণের রাউটিং প্রটোকল যেমনঃ OSPF, IS-IS, BGP (eBGP, iBGP) ইত্যাদি ব্যবহার করে থাকে, তাহলে তাদের MPLS ব্যবহার করার কি দরকার? প্রশ্নটি খুবই যৌক্তিক। আসলে MPLS ব্যবহার না করেই একটি আই.এস.পি তার ক্লায়েন্টদের সার্ভিস দিতে পারে, কিন্তু MPLS ব্যবহার করলে সার্ভিসের মান আরো ভালো হয় এবং ক্লায়েন্টদের ট্রাফিকের নিরাপত্তা বৃদ্ধির পাশাপাশি ক্লায়েন্টেদের চাহিদা অনুযায়ী বিভিন্নভাবে Traffic Engineering (TE) করাও সম্ভব হয়। তবে একটি কথা অবশ্যই মনে রাখা জরুরী যে, আই.এস.পি নেটওয়ার্কে MPLS থাকুক বা না থাকুক, অন্যান্য রাউটিং প্রটোকল OSPF, IS-IS বা BGP কিন্তু অবশ্যই থাকতে হবে। অর্থাৎ, MPLS কিন্তু এই সকল ট্র্যাডিশনাল রাউটিং প্রটোকলসমূহের উপর নির্ভর করেই কাজ করে।

MPLS পূর্ণরূপ হলো Multi Protocol Label Switching । নামের প্রথম অংশ Multi Protocol দ্বারা বুঝায়, এটি একই সাথে বিভিন্ন ধরণের প্রটোকল নিয়ে কাজ করতে পারে, যেমনঃ Layer-3 প্রটোকলসমূহের মধ্যে IPv4, IPv6 এবং Layer-2 প্রটোকলসমূহের মধ্যে Ethernet, Frame Relay, PPP, HDLC ইত্যাদি। আর নামের দ্বিতীয় অংশ Label Switching দ্বারা বুঝায়, ট্রাফিক ফরোয়ার্ড করার জন্য এটি গতানুগতিকভাবে রাউটিং টেবিল ব্যবহার না করে প্রতিটি প্যাকেটের গায়ে একটি Label (বা Tag) যুক্ত করে এবং উক্ত Label দেখে দেখে এক রাউটার থেকে আরেক রাউটারে প্যাকেট ফরোয়ার্ড করে।

নামের প্রথম অংশ Multi Protocol নিয়ে আমরা পরবর্তীতে বিস্তারিত আলোচনা করবো। এখন নামের দ্বিতীয় অংশ Label Switching সম্পর্কে একটু ধারণা নেওয়ার চেষ্টা করি।

ধরি চিত্রে প্রদত্ত টপোলজি অনুযায়ী, একটি আই.এস.পি এর নেটওয়ার্কে চারটি রাউটার আছে। আই.এস.পি এর একটি ক্লায়েন্ট Client-1 দুইটি ভিন্ন লোকেশনে থাকা অফিসের মধ্যে কানেক্টিভিটি নেবে। আই.এস.পি এর R1 রাউটারের সাথে ক্লায়েন্টের C1-A (Site-A) রাউটার যু্ক্ত এবং আই.এস.পি এর R4 রাউটারের সাথে ক্লায়েন্টের C1-B (Site-B) রাউটার যু্ক্ত।

C1-A রাউটারের আই.পি 10.0.0.2 এবং গেটওয়ে হলো 10.0.0.1 ।

C1-B রাউটারের আই.পি 50.0.0.2 এবং গেটওয়ে হলো 50.0.0.1 ।

যদি আই.এস.পি এর নেটওয়ার্ক MPLS এনাবলড না হয়, শুধুমাত্র ট্র্যাডিশনাল রাউটিং প্রটোকল OSPF দিয়ে কাজ করে তাহলে C1-A থেকে C1-B তে নিম্নরূপে ট্রাফিক যাবে।

১. C1-A রাউটার 50.0.0.2 আই.পি তে ডাটা পাঠানোর জন্য প্যাকেটটি প্রথমে তার গেটওয়ে 10.0.0.1 অর্থাৎ R1 এর কাছে পাঠাবে।

২. R1 রাউটার প্যাকেটটি রিসিভ করে তার ডেষ্টিনেশন আই.পি 50.0.0.2 নিজের রাউটিং টেবিলে আছে কি না তা চেক করবে, একে Routing Table Lookup বলে। R1 তার Routing Table Lookup করে দেখবে ডেষ্টিনেশন আই.পি 50.0.0.2 নিজের রাউটিং টেবিলে থাকা 50.0.0.0/30 এর সাথে মিলে যায়, যার Nexthop হলো 20.0.0.1 । এক্ষেত্রে R1 প্যাকেটটিকে 20.0.0.1 তে অর্থাৎ R2 এর কাছে পাঠাবে।

৩. R2 রাউটার প্যাকেটটি রিসিভ করার পর Routing Table Lookup করে Nexthop 30.0.0.2 তে অর্থাৎ R3 এর কাছে পাঠাবে।

৪. R3 রাউটার প্যাকেটটি রিসিভ করার পর অনুরূপভাবে Routing Table Lookup করে Nexthop 40.0.0.2 তে অর্থাৎ R4 এর কাছে পাঠাবে।

৫. সবশেষে R4 রাউটার প্যাকেটটি রিসিভ করার পর Routing Table Lookup করে C1-B এর কাছে প্যাকেটটি পৌছে দেবে।

এখন যদি C1-B রাউটার প্রাপ্ত প্যাকেটটির Acknowledge পাঠাতে চায় তাহলে তা একইভাবে প্রতিটি রাউটারে Routing Table Lookup করে করে উল্টোপথে C1-A এর কাছে আসবে। এটি হলো রাউটিং এর বেসিক কনসেপ্ট।

আমরা জানি একটি রাউটার কোন প্যাকেট রাউট করার জন্য উক্ত প্যাকেটটিকে Layer-3 (Network Layer) পর্যন্ত De-encapsulate করে। এভাবে পুরো পথে যতগুলো রাউটার থাকবে তারা প্রত্যেকেই প্যাকেটটিকে Layer-3 পর্যন্ত De-encapsulate করে Routing Table Lookup করবে এবং নির্দিষ্ট Nexthop এর কাছে প্যাকেটটিকে ফরোয়ার্ড করবে।

একটি রাউটারের রাউটিং টেবিলে রাউটের সংখ্যা যত বেশি হয় সে রাউটার প্যাকেট ফরোয়ার্ডের জন্য তত বেশি সময় নেয়, যা প্রকৃতপক্ষে প্যাকেট ডেলিভারীকে দীর্ঘায়িত করে। আবার এভাবে অনবরত Routing Table Lookup করতে গেলে রাউটারের উপরও বাড়তি চাপ পড়ে। তাই একটি বড় আকারের আই.এস.পি নেটওয়ার্কে যেখানে হাজার বা তারও বেশি আই.পি নেটওয়ার্ক রয়েছে সেখান এই সমস্যা দূর করার জন্য MPLS ব্যবহার করা হয়।

একটি MPLS এনাবলড নেটওয়ার্কে প্যাকেট পাঠানোর সময় প্রতিটি প্যাকেটের গায়ে একটি Label (বা Tag) লাগানো হয় এবং রাউটারসমূহ তার Routing Table Lookup না করে প্যাকেটের গায়ে থাকা Label দেখে সিদ্ধান্ত নেয় প্যাকেটটি কার কাছে ফরোয়ার্ড করতে হবে। এখানে আবারো বলছি যে, আই.এস.পি নেটওয়ার্কে MPLS থাকুক বা না থাকুক, অন্যান্য রাউটিং প্রটোকল OSPF, IS-IS বা BGP কিন্তু অবশ্যই থাকতে হবে। অর্থাৎ, MPLS এই রাউটিং প্রটোকলসমূহের উপর নির্ভর করেই কাজ করবে। ব্যাপারটি অনেকটা নিম্নরূপঃ

প্রথমে আই.এস.পি রাউটারসমূহের মধ্যে যেকোন রাউটিং প্রটোকল যেমনঃ OSPF কনফিগার করা হলো। অতঃপর আই.এস.পি রাউটারসমূহের মধ্যে MPLS এনাবল করা হলো।

এখন R1 রাউটার C1-A এর কাছ থেকে যে প্যাকেট পাবে তার গায়ে 100 নামক একটি Label যুক্ত করবে এবং তা R2 এর কাছে পাঠাবে।

R2 রাউটার R1 এর কাছ থেকে যে প্যাকেট পাবে তা থেকে 100 নামক Label টি খুলে ফেলবে এবং নিজের মতো করে 200 নামক একটি Label যুক্ত করবে এবং তা R3 এর কাছে পাঠাবে।

R3 রাউটার আবার R2 এর কাছ থেকে যে প্যাকেট পাবে তা থেকে 200 নামক Label টি খুলে ফেলবে এবং তা R4 এর কাছে পাঠাবে।

সবশেষে R4 রাউটার R3 এর কাছ থেকে প্রাপ্ত প্যাকেটটি রিসিভ করে C1-B এর কাছে পৌছে দিবে।

প্রতিটি রাউটার এভাবে Label যুক্ত করা ও Label টি খুলে ফেলার কাজ করবে নিজের MPLS Forwarding Table এর উপর ভিত্তি করে। আর এই কাজটি হয় OSI Layer-2 ও Layer-3 এর মাঝামাঝি একটি পর্যায়ে, তাই MPLS কে Layer-2.5 প্রটোকল বলা হয়। MPLS নেটওয়ার্কে যেহেতু প্রতিটি রাউটারকে কোন একটি প্যাকেট Layer-3 পর্যন্ত De-encapsulate করতে হয় না, তাই এক্ষেত্রে প্যাকেট প্রসেস ও ফরোয়ার্ড করতে রাউটারসমূহের অপেক্ষাকৃত কম সময় লাগে। এতে সামগ্রিকভাবে নেটওয়ার্কের পারফরম্যান্স বৃদ্ধি পায়।

MPLS Forwarding Table তৈরী এবং Label যুক্ত করা/Label খুলে ফেলার কাজটি করার জন্য MPLS রাউটারসমূহে Label Distribution Protocol (LDP) ব্যবহৃত হয়।

Label Switching করা ছাড়াও আই.এস.পি নেটওয়ার্কে MPLS এর মাধ্যমে আরো একটি প্রয়োজনীয় কাজ করা হয়।

ধরি, আই.এস.পি নেটওয়ার্কে আরো একটি ক্লায়েন্ট Client-2 যুক্ত হবে এবং ঐ ক্লায়েন্ট চাচ্ছে তার Site-A ও Site-B লোকেশনের আই.পি হবে যথাক্রমে 10.0.0.0/30 ও 50.0.0.0/30 । কিন্তু আই.এস.পি 10.0.0.0/30 ও 50.0.0.0/30 আই.পি দুইটি ইতিমধ্যে Client-1 কে দিয়ে দিয়েছে। ট্র্যাডিশনাল রাউটিং প্রটোকল দিয়ে Client-2 এর এই চাহিদা পূরণ করা সম্ভব নয়। (যদিও একটি একবারে ছোট আকারের নেটওয়ার্কে Policy Based Routing (PBR) এর মাধ্যমে এটি করা যেতে পারে, কিন্তু একটি আই.এস.পি নেটওয়ার্কে এটি করা যায় না।)

কিন্তু একটি মজার ব্যাপার হলো MPLS এনাবলড নেটওয়ার্কে এই কাজটি সহজেই করা যায়। এক্ষেত্রে MPLS এর মাধ্যমে আই.এস.পি রাউটারসমূহে Client-1 ও Client-2 এর জন্য দুইটি আলাদা ভার্চুয়াল রাউটিং টেবিল তৈরী করা যায়। এতে প্রতিটি ভার্চুয়াল রাউটিং টেবিলে প্রতিটি ক্লায়েন্টের রাউটিং ইনফরমেশন আলাদা থাকে, একটির সাথে আরেকটি ওভারল্যাপ করে না। একে MPLS L3VPN বলা হয়। এছাড়াও MPLS এর মাধ্যমে L2VPN সহ অনেক ধরণের Traffic Engineering (TE) করা যায়।

Configuring MPLS and LDP Neighbor Relationship

এখন আমরা দেখবো কিভাবে একটি নেটওয়ার্কে MPLS এনাবল করতে হয়, কিভাবে একটি রাউটার আরেকটি রাউটারের সাথে LDP Neighbor Relationship তৈরী করে এবং একে অন্যের সাথে কিভাবে MPLS Label আদান-প্রদান করে Label Based প্যাকেট ফরোয়ার্ড করে।

একটি MPLS এনাবলড নেটওয়ার্কের রাউটারসমূহকে তিন ভাগে ভাগ করা যায়।

১. Customer Edge Router (CE): ইহা ক্লায়েন্ট এর রাউটার যার মধ্যে MPLS এনাবল করা হয় না।
২. Provider Edge Router (PE): ইহা আই.এস.পি এর POP রাউটার। সাধারণত CE সমূহ এই PE এর সাথে যুক্ত থাকে। PE সমূহে MPLS এনাবল করা হয়।
৩. Provider Router (P): ইহাও আই.এস.পি এর রাউটার যা সাধারণত কোর রাউটার হিসেবে কাজ করে এবং এই রা্উটারসমূহে MPLS এনাবল করতে হয়। P রাউটারের সাথে PE সমূহ যুক্ত থাকে, কিন্তু কোন CE যুক্ত থাকে না।

আমাদের টপোলজি অনুযায়ী, ক্লায়েন্ট রাউটার C1-A ও C1-B হলো CE রাউটার, আই.এস.পি এর R1 ও R4 হলো PE রাউটার এবং R2 ও R3 হলো P রাউটার।

চিত্রে প্রদত্ত টপোলজি অনুযায়ী প্রথমে আমরা প্রতিটি রাউটারে আই.পি এ্যাড্রেসসমূহ কনফিগার করবো।

R1#conf t
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 10.0.0.1 255.255.255.252
R1(config-if)#no shutdown
R1(config-if)#description C1-A
R1(config-if)#exit
R1(config)#interface fastEthernet 0/1
R1(config-if)#ip address 20.0.0.2 255.255.255.252
R1(config-if)#no shutdown
R1(config-if)#description R2
R1(config-if)#exit
R1(config)#interface loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.255
R1(config-if)#exit
R2#conf t
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 20.0.0.1 255.255.255.252
R2(config-if)#no shutdown
R2(config-if)#description R1
R2(config-if)#exit
R2(config)#interface fastEthernet 0/1
R2(config-if)#ip address 30.0.0.1 255.255.255.252
R2(config-if)#no shutdown
R2(config-if)#description R3
R2(config-if)#exit
R2(config)#interface loopback 0
R2(config-if)#ip address 2.2.2.2 255.255.255.255
R2(config-if)#exit
R3#conf t
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 30.0.0.2 255.255.255.252
R3(config-if)#no shutdown
R3(config-if)#description R2
R3(config-if)#exit
R3(config)#interface fastEthernet 0/1
R3(config-if)#ip address 40.0.0.1 255.255.255.252
R3(config-if)#no shutdown
R3(config-if)#description R4
R3(config-if)#exit
R3(config)#interface loopback 0
R3(config-if)#ip address 3.3.3.3 255.255.255.255
R3(config-if)#exit
R4#conf t
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 40.0.0.2 255.255.255.252
R4(config-if)#no shutdown
R4(config-if)#description R3
R4(config-if)#exit
R4(config)#interface fastEthernet 0/1
R4(config-if)#ip address 50.0.0.1 255.255.255.252
R4(config-if)#no shutdown
R4(config-if)#description C1-B
R4(config-if)#exit
R4(config)#interface loopback 0
R4(config-if)#ip address 4.4.4.4 255.255.255.255
R4(config-if)#exit
C1-A#conf t
C1-A(config)#interface fastEthernet 0/0
C1-A(config-if)#ip address 10.0.0.2 255.255.255.252
C1-A(config-if)#no shutdown
C1-A(config-if)#description ISP
C1-A(config-if)#exit
C1-B#conf t
C1-B(config)#interface fastEthernet 0/0
C1-B(config-if)#ip address 50.0.0.2 255.255.255.252
C1-B(config-if)#no shutdown
C1-B(config-if)#description ISP
C1-B(config-if)#exit

এখন আমরা আই.এস.পি এর রাউটারসমূহের মধ্যে IGP হিসেবে OSPF কনফিগার করবো। এখানে ক্লায়েন্ট রাউটারে কোন OSPF থাকবে না।

R1#conf t
R1(config)#router ospf 1
R1(config-router)#network 10.0.0.0 0.0.0.3 area 10
R1(config-router)#network 20.0.0.0 0.0.0.3 area 10
R1(config-router)#network 1.1.1.1 0.0.0.0 area 10
R1(config-router)#passive-interface fastEthernet 0/0
R1(config-router)#exit
R2#conf t
R2(config)#router ospf 1
R2(config-router)#network 20.0.0.0 0.0.0.3 area 10
R2(config-router)#network 30.0.0.0 0.0.0.3 area 10
R2(config-router)#network 2.2.2.2 0.0.0.0 area 10
R2(config-router)#exit
R3#conf t
R3(config)#router ospf 1
R3(config-router)#network 30.0.0.0 0.0.0.3 area 10
R3(config-router)#network 40.0.0.0 0.0.0.3 area 10
R3(config-router)#network 3.3.3.3 0.0.0.0 area 10
R3(config-if)#exit
R4#conf t
R4(config)#router ospf 1
R4(config-router)#network 40.0.0.0 0.0.0.3 area 10
R4(config-router)#network 50.0.0.0 0.0.0.3 area 10
R4(config-router)#network 4.4.4.4 0.0.0.0 area 10
R4(config-router)#passive-interface fastEthernet 0/1
R4(config-if)#exit

এখন আমরা ক্লায়েন্ট রাউটারদ্বয়ে স্পেসিফিক স্ট্যাটিক রাউট কনফিগার করবো যাতে করে এরা নিজেদের মধ্যে কমিউনিকেট করতে পারে। এখানে ক্লায়েন্ট রাউটারদ্বয়ে ডিফল্ট রাউট দিলেও চলবে। কিন্তু যেহেতু এটি ডাটা কানেক্টিভিটি (ইন্টারনেট কানেকশন নয়) তাই এক্ষেত্রে ডিফল্ট রাউট পরিহার করাই ভালো।

C1-A#conf t
C1-A(config)#ip route 50.0.0.0 255.255.255.252 10.0.0.1
C1-A(config-if)#exit
C1-B#conf t
C1-B(config)#ip route 10.0.0.0 255.255.255.252 50.0.0.1
C1-B(config-if)#exit

এতটুকু কাজ শেষ হলেই ক্লায়েন্ট রাউটারদ্বয় একে অন্যের সাথে কমিউনিকেট করতে পারবে। আর এটি হবে Routing Table Lookup ভিত্তিক কমিউনিকেশন। আমরা Ping ও Traceroute টুলসের মাধ্যমে এখানে ক্লায়েন্ট রাউটারদ্বয়ের মধ্যে কানেক্টিভিটি ভেরিফাই করতে পারি।

C1-A#ping 50.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 50.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/96/128 ms
C1-A#traceroute 50.0.0.2
Type escape sequence to abort.
Tracing the route to 50.0.0.2
  1 10.0.0.1 56 msec 36 msec 40 msec
  2 20.0.0.1 52 msec 24 msec 20 msec
  3 30.0.0.2 80 msec 40 msec 20 msec
  4 40.0.0.2 68 msec 80 msec 44 msec
  5 50.0.0.2 80 msec 40 msec 76 msec
C1-B#ping 10.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 80/96/104 ms
C1-B#traceroute 10.0.0.2
Type escape sequence to abort.
Tracing the route to 10.0.0.2
  1 50.0.0.1 60 msec 32 msec 20 msec
  2 40.0.0.1 24 msec 56 msec 20 msec
  3 30.0.0.1 68 msec 68 msec 68 msec
  4 20.0.0.2 68 msec 52 msec 72 msec
  5 10.0.0.2 108 msec 88 msec 108 msec

Configuring MPLS on ISP Router

কোন একটি রাউটারে MPLS এনাবল করার জন্য রাউটারের Global Configuration মুডে #mpls ip কমান্ড দিতে হবে। এবং ঐ রাউটারের যে ইন্টারফেসসমূহ অন্য আরেকটি MPLS এনাবলড রাউটারের সাথে যুক্ত সেই ইন্টারফেসসমূহের মধ্যেও #mpls ip কমান্ড দিতে হবে। এখন আমরা আই.এস.পি রাউটারসমূহে MPLS এনাবল করবো।

R1#conf t
R1(config)#mpls ip
R1(config)#interface fastEthernet 0/1
R1(config-if)#mpls ip
R2#conf t
R2(config)#mpls ip
R2(config)#int fastEthernet 0/0
R2(config-if)#mpls ip
R2(config-if)#exit
R2(config)#int fastEthernet 0/1
R2(config-if)#mpls ip
R3#conf t
R3(config)#mpls ip
R3(config)#int fastEthernet 0/0
R3(config-if)#mpls ip
R3(config-if)#exit
R3(config)#int fastEthernet 0/1
R3(config-if)#mpls ip
R4#conf t
R4(config)#mpls ip
R4(config)#interface fastEthernet 0/0
R4(config-if)#mpls ip

এতটুকু কাজ করলেই আই.এস.পি রাউটারসমূহে MPLS কাজ করবে। কিন্তু ব্যাকগ্রাউন্ডে বেশ কিছু বিষয় আমাদের খুব ভালোভাবে বুঝতে হবে।

১) যখন দুইটি রাউটারে উপরিউল্লেখিত পদ্ধতিতে MPLS এনাবল করা হয় তখন রাউটারদ্বয় প্রথমেই নিজের রাউটিং টেবিলে থাকা প্রতিটি রাউটের সাথে একটি করে MPLS Label যোগ করে। একে Dynamic Local Label বলে। প্রতিটি MPLS রাউটারসমূহের Dynamic Local Label রেঞ্জ হয় 16 থেকে 1048575 পর্যন্ত (বাই ডিফল্ট)। অর্থাৎ, একটি Label নম্বর যেমনঃ 16 প্রতিটি রাউটারেই থাকবে। আমরা এখানে Label ডিস্ট্রিবিউশনের ব্যাপারটি ভালোভাবে বুঝার জন্য প্রতিটি রাউটারের Dynamic Local Label রেঞ্জ সীমাবদ্ধ করে দিতে পারি। আর এই রেঞ্জ কমালে বা বাড়ালে রাউটারের MPLS সার্ভিসটি রিলোড দিতে হয়। এখন আমরা প্রতিটি রাউটারে Dynamic Local Label রেঞ্জ সীমাবদ্ধ করে দিব এবং MPLS সার্ভিসটি রিলোড দিব।

R1#conf t
R1(config)#mpls label range 100 199
R1(config)#no mpls ip
R1(config)#mpls ip
R2#conf t
R2(config)#mpls label range 200 299
R2(config)#no mpls ip
R2(config)#mpls ip
R3#conf t
R3(config)#mpls label range 300 399
R3(config)#no mpls ip
R3(config)#mpls ip
R4#conf t
R4(config)#mpls label range 400 499
R4(config)#no mpls ip
R4(config)#mpls ip

কোন রাউটারের Local Label ডাটাবেজ দেখতে হলে নিচের কমান্ড দিতে হবে।

R1#show mpls ldp bindings local
  lib entry: 1.1.1.1/32, rev 2
        local binding:  label: imp-null
  lib entry: 2.2.2.2/32, rev 4
        local binding:  label: 104
  lib entry: 3.3.3.3/32, rev 6
        local binding:  label: 105
  lib entry: 4.4.4.4/32, rev 8
        local binding:  label: 100
  lib entry: 10.0.0.0/30, rev 10
        local binding:  label: imp-null
  lib entry: 20.0.0.0/30, rev 12
        local binding:  label: imp-null
  lib entry: 30.0.0.0/30, rev 14
        local binding:  label: 101
  lib entry: 40.0.0.0/30, rev 16
        local binding:  label: 102
  lib entry: 50.0.0.0/30, rev 18
        local binding:  label: 103

এখন R1 এর Local Label ডাটাবেজটি একটু বুঝা যাক। এখানে, R1 তার রাউটিং টেবিলে থাকা প্রতিটি রাউটের সাথে একটি করে Label যোগ করেছে। যেই রাউটগুলো রাউটারের Directly Connected রাউট সেগুলোর Label হলো imp-null (implicit null) অর্থাৎ Null Label । আর যেগুলো Directly Connected রাউট নয় সেগুলোর সাথে Dynamic Local Label রেঞ্জ এর Label যোগ করেছে। এখানে আমরা R1 এর Dynamic Local Label এর ডিফল্ট রেঞ্জ পরিবর্তন করে 100 থেকে 199 করে দিয়েছিলাম। তাই R1 তার Directly Connected নয় এমন রাউটগুলোর সাথে ঐ রেঞ্জ থেকে Label যোগ করেছে। যেমনঃ 2.2.2.2/32 এর সাথে 104, 3.3.3.3/32 এর সাথে 105, 4.4.4.4/32 এর সাথে 100, 30.0.0.0/30 এর সাথে 101, 40.0.0.0/30 এর সাথে 102, এবং 50.0.0.0/30 এর সাথে 103 । ***এখানে একটি কথা বিশেষভাবে উল্লেখ্য যে, রাউটার তার একটি রিমোট রাউটের সাথে যে Label টি যোগ করলো তা কিন্তু Fixed নয়। অর্থাৎ, Label টি রাউটিং এর উপর নির্ভর করে যখন-তখন পরিবর্তন হতে পারে (সকালে এক, বিকালে আরেক)***।

এভাবে আমরা প্রতিটি রাউটারের Local Label ডাটাবেজ দেখতে পারি।

R2#show mpls ldp bindings local
  lib entry: 1.1.1.1/32, rev 2
        local binding:  label: 203
  lib entry: 2.2.2.2/32, rev 4
        local binding:  label: imp-null
  lib entry: 3.3.3.3/32, rev 6
        local binding:  label: 204
  lib entry: 4.4.4.4/32, rev 8
        local binding:  label: 205
  lib entry: 10.0.0.0/30, rev 10
        local binding:  label: 200
  lib entry: 20.0.0.0/30, rev 12
        local binding:  label: imp-null
  lib entry: 30.0.0.0/30, rev 14
        local binding:  label: imp-null
  lib entry: 40.0.0.0/30, rev 16
        local binding:  label: 202
  lib entry: 50.0.0.0/30, rev 18
        local binding:  label: 201
R3#show mpls ldp bindings local
  lib entry: 1.1.1.1/32, rev 2
        local binding:  label: 306
  lib entry: 2.2.2.2/32, rev 4
        local binding:  label: 307
  lib entry: 3.3.3.3/32, rev 6
        local binding:  label: imp-null
  lib entry: 4.4.4.4/32, rev 8
        local binding:  label: 308
  lib entry: 10.0.0.0/30, rev 10
        local binding:  label: 309
  lib entry: 20.0.0.0/30, rev 12
        local binding:  label: 310
  lib entry: 30.0.0.0/30, rev 14
        local binding:  label: imp-null
  lib entry: 40.0.0.0/30, rev 16
        local binding:  label: imp-null
  lib entry: 50.0.0.0/30, rev 18
        local binding:  label: 311
R4#show mpls ldp bindings local
  lib entry: 1.1.1.1/32, rev 2
        local binding:  label: 406
  lib entry: 2.2.2.2/32, rev 4
        local binding:  label: 407
  lib entry: 3.3.3.3/32, rev 6
        local binding:  label: 408
  lib entry: 4.4.4.4/32, rev 8
        local binding:  label: imp-null
  lib entry: 10.0.0.0/30, rev 10
        local binding:  label: 409
  lib entry: 20.0.0.0/30, rev 12
        local binding:  label: 410
  lib entry: 30.0.0.0/30, rev 14
        local binding:  label: 411
  lib entry: 40.0.0.0/30, rev 16
        local binding:  label: imp-null
  lib entry: 50.0.0.0/30, rev 18
        local binding:  label: imp-null

LDP Neighbor Relationship

এখন আমরা দেখবো দুইটি রাউটার কিভাবে একে অন্যের সাথে LDP Neighbor Relationship তৈরী করে। MPLS এর ক্ষেত্রে দুইটি রাউটার নিজেদের মধ্যে Label Distribution Protocol (LDP) এর মাধ্যমে Neighbor Relationship তৈরী করে। এজন্য রাউটার দুইটিকে একে অন্যের LDP Neighbor বলা হয়। যখন দুইটি রাউটারের মধ্যে MPLS এনাবল করা হয়; ধরি, R1 ও R2 এর মধ্যে,

i. এ অবস্থায় প্রথমে R1 রাউটার R2 এর কাছে একটি Hello ম্যাসেজ পাঠায়। যার সোর্স আই.পি 10.0.0.1 (যা R1 এর নিজের আই.পি) এবং ডেষ্টিনেশন আই.পি 224.0.0.2 (যা একটি All Router’s Multicast আই.পি)। যার সোর্স পোর্ট UDP 646 এবং ডেষ্টিনেশন পোর্টও UDP 646 । এই Hello ম্যাসেজের মধ্যে R1 এর Label Switch Router ID (LSR ID) থাকে। এখানে R1 এর LSR ID হলো 1.1.1.1 যা ইহার Highest Loopback IP । এভাবে Hello ম্যাসেজ আদান প্রদান করে যখন দুইটি রাউটার একে অন্যের সাথে পরিচিত হয় তখন এরা নিজেদের LSR ID এর উপর ভিত্তি করে Active LDP Router/Passive LDP Router মুডে গমন করে। এখানে R1 এর LSR ID হলো 1.1.1.1 এবং R2 এর LSR ID হলো 2.2.2.2 । যার LSR ID বড় সে হয় Active LDP Router এবং যার LSR ID ছোট সে হয় Passive LDP Router । আমাদের টপোলজি অনুযায়ী R1 ও R2 এর মধ্যে R2 এর LSR ID বড়, তাই R2 হবে Active LDP Router এবং R1 হবে Passive LDP Router ।

ii. এখানে যেহেতু R2 হলো Active LDP Router তাই এটিই প্রথমে R1 এর সাথে TCP 3-Way Handshake শুরু করে। এক্ষেত্রে R2 রাউটার R1 এর কাছে TCP SYN ম্যাসেজ পাঠায়। যার সোর্স আই.পি হলো 2.2.2.2 (ইহা R2 এর LSR ID যা Transport এ্যাড্রেস হিসেবে ব্যবহৃত হয়), এবং ডেষ্টিনেশন আই.পি হলো 1.1.1.1 যা R1 এর Transport এ্যাড্রেস। এই পর্যায়ে কিন্তু R1 বা R2 এর কোন ফিজিক্যাল ইন্টারফেসের আই.পি ব্যবহৃত হয় না।) এক্ষেত্রে সোর্স পোর্ট হলো TCP 11070 যা R2 র‌্যান্ডমলী জেনারেট করে এবং ডেষ্টিনেশন পোর্ট হলো TCP 646 ।

iii. R1 রাউটার R2 এর কাছে SYN ACK ম্যাসেজ পাঠায়। যার সোর্স আই.পি হলো 1.1.1.1 এবং ডেষ্টিনেশন আই.পি হলো 2.2.2.2 । এবং সোর্স পোর্ট হলো TCP 646 এবং ডেষ্টিনেশন পোর্ট হলো TCP 11070 ।

iv. এরপর R1 এর কাছে R2 চূড়ান্ত ACK পাঠায় এবং TCP 3-WAY Handshake সম্পন্ন করে।

v. TCP 3-WAY Handshake সম্পন্ন হওয়ার পর R2 রাউটার মূল LDP Session এর শুরু করার জন্য R1 এর কাছে LDP Initialization ম্যাসেজ পাঠায়।

vi. R1 রাউটার R2 এর Initialization ম্যাসেজের Reply দেয়।

vii. সবশেষে R2 রাউটার R1 কে Keepalive ম্যাসেজ পাঠায়। অতঃপর R1 ও R2 এর মধ্যে LDP Neighbor Relationship তৈরী হয়।

LDP Neighbor Relationship তৈরী হওয়ার পর আমরা রাউটারে নিচের কমান্ডের মাধ্যমে স্ট্যাটাস দেখতে পারি।

R1#show mpls ldp neighbor
    Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 1.1.1.1:0
        TCP connection: 2.2.2.2.11070 - 1.1.1.1.646
        State: Oper; Msgs sent/rcvd: 15/15; Downstream
        Up time: 00:02:56
        LDP discovery sources:
          FastEthernet0/1, Src IP addr: 20.0.0.1
        Addresses bound to peer LDP Ident:
          20.0.0.1        30.0.0.1        2.2.2.2
R2#show mpls ldp neighbor
    Peer LDP Ident: 1.1.1.1:0; Local LDP Ident 2.2.2.2:0
        TCP connection: 1.1.1.1.646 - 2.2.2.2.11070
        State: Oper; Msgs sent/rcvd: 16/16; Downstream
        Up time: 00:03:37
        LDP discovery sources:
          FastEthernet0/0, Src IP addr: 20.0.0.2
        Addresses bound to peer LDP Ident:
          10.0.0.1        20.0.0.2        1.1.1.1
    Peer LDP Ident: 3.3.3.3:0; Local LDP Ident 2.2.2.2:0
        TCP connection: 3.3.3.3.49328 - 2.2.2.2.646
        State: Oper; Msgs sent/rcvd: 15/16; Downstream
        Up time: 00:03:27
        LDP discovery sources:
          FastEthernet0/1, Src IP addr: 30.0.0.2
        Addresses bound to peer LDP Ident:
          30.0.0.2        40.0.0.1        3.3.3.3

এখানে, R1 এর LDP Neighbor হলো R2, এবং R2 এর LDP Neighbor হলো R1 ও R3 । একই প্রক্রিয়ায় টপেলিজির অন্যান্য MPLS এনাবলড রাউটারসমূহও নিজ নিজ প্বার্শবর্তী MPLS এনাবলড রাউটারের সাথে LDP Neighbor Relationship তৈরী করবে।

R3#show mpls ldp neighbor
    Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 3.3.3.3:0
        TCP connection: 2.2.2.2.646 - 3.3.3.3.49328
        State: Oper; Msgs sent/rcvd: 16/16; Downstream
        Up time: 00:03:50
        LDP discovery sources:
          FastEthernet0/0, Src IP addr: 30.0.0.1
        Addresses bound to peer LDP Ident:
          20.0.0.1        30.0.0.1        2.2.2.2
    Peer LDP Ident: 4.4.4.4:0; Local LDP Ident 3.3.3.3:0
        TCP connection: 4.4.4.4.48602 - 3.3.3.3.646
        State: Oper; Msgs sent/rcvd: 16/16; Downstream
        Up time: 00:03:42
        LDP discovery sources:
          FastEthernet0/1, Src IP addr: 40.0.0.2
        Addresses bound to peer LDP Ident:
          40.0.0.2        50.0.0.1        4.4.4.4
R4#show mpls ldp neighbor
    Peer LDP Ident: 3.3.3.3:0; Local LDP Ident 4.4.4.4:0
        TCP connection: 3.3.3.3.646 - 4.4.4.4.48602
        State: Oper; Msgs sent/rcvd: 16/16; Downstream
        Up time: 00:04:08
        LDP discovery sources:
          FastEthernet0/0, Src IP addr: 40.0.0.1
        Addresses bound to peer LDP Ident:
          30.0.0.2        40.0.0.1        3.3.3.3

Exchanging Labels Between Routers

যখন আমরা আমাদের রাউটারসমূহে MPLS এনাবল করেছি তখন রাউটারসমূহ নিজেদের রাউটিং টেবিলে থাকা প্রতিটি রাউটের সাথে একটি করে Local Label যুক্ত করেছে। এছাড়াও রাউটারসমূহ একে অন্যের সাথে LDP Neighbor Relationship তৈরী করেছে। এখন আমরা দেখবো রাউটারসমূহ কিভাবে একে অন্যের সাথে এই Local Label ডাটাবেজ বিনিময় করে একটি পূর্ণাঙ্গ Label ডাটাবেজ তৈরী করে, যার ভিত্তিতে আবার এটি একটি MPLS Forwarding Table তৈরী করে। যেই MPLS Forwarding Table দেখে রাউটারসমূহ প্যাকেট ফরোয়ার্ড করে, ট্র্যাডিশনাল Routing Table Lookup করে নয়।

কোন রাউটারের Local Label ডাটাবেজ দেখার কমান্ড হলো #show mpls ldp bindings local

আমরা যদি প্রতিটি রাউটারের Local Label ডাটাবেজ একটি টেবিলে আকারে সাজাই তাহলে টেবিলটি হবে নিম্নরূপঃ

আমরা আগেই জেনেছি যে, কোন রাউটারের Local Label সবসময় একই থাকে না। তাই প্র্যাকটিসের সময় আপনাদের রাউটারের Local Label এরকম হবে না, আবার এখন যে রকম আছে কিছুক্ষণ পর একই নাও থাকতে পারে। তাই এ নিয়ে দুশ্চিন্তার কোন কারণ নেই। প্রতিটি রাউটার তার Local Label ডাটাবেজ তৈরীর পর তা শুধুমাত্র নিজের Neighbor এর সাথে শেয়ার করে। যেমনঃ R1 তার Local Label ডাটাবেজ শেয়ার করবে শুধুমাত্র তার Neighbor R2 এর সাথে, R2 শেয়ার করবে R1 ও R3 এর সাথে, R3 শেয়ার করবে R2 ও R4 এর সাথে এবং R4 শেয়ার করবে শুধুমাত্র R3 এর সাথে। Neighbor সমূহের সাথে Local Label ডাটাবেজ শেয়ার করার পর প্রতিটি রাউটারের পূর্ণাঙ্গ Label ডাটাবেজ হবে নিম্নরূপঃ

কোন রাউটারের পূর্ণাঙ্গ Label Database দেখতে চাইলে রাউটারে নিচের কমান্ড দিতে হবে।

R1#show mpls ldp bindings
  lib entry: 1.1.1.1/32, rev 2
        local binding:  label: imp-null
        remote binding: lsr: 2.2.2.2:0, label: 203
  lib entry: 2.2.2.2/32, rev 4
        local binding:  label: 104
        remote binding: lsr: 2.2.2.2:0, label: imp-null
  lib entry: 3.3.3.3/32, rev 6
        local binding:  label: 105
        remote binding: lsr: 2.2.2.2:0, label: 204
  lib entry: 4.4.4.4/32, rev 8
        local binding:  label: 100
        remote binding: lsr: 2.2.2.2:0, label: 205
  lib entry: 10.0.0.0/30, rev 10
        local binding:  label: imp-null
        remote binding: lsr: 2.2.2.2:0, label: 200
  lib entry: 20.0.0.0/30, rev 12
        local binding:  label: imp-null
        remote binding: lsr: 2.2.2.2:0, label: imp-null
  lib entry: 30.0.0.0/30, rev 14
        local binding:  label: 101
        remote binding: lsr: 2.2.2.2:0, label: imp-null
  lib entry: 40.0.0.0/30, rev 16
        local binding:  label: 102
        remote binding: lsr: 2.2.2.2:0, label: 202
  lib entry: 50.0.0.0/30, rev 18
        local binding:  label: 103
        remote binding: lsr: 2.2.2.2:0, label: 201

আমরা যদি রাউটারের পূর্ণাঙ্গ Label Database থেকে শুধুমাত্র একটি নির্দিষ্ট রাউটের তথ্য দেখতে চাই তাহলে রাউটারে নিচের কমান্ড দিতে হবে।

R1#show mpls ldp bindings 50.0.0.0 30
  lib entry: 50.0.0.0/30, rev 18
        local binding:  label: 103
        remote binding: lsr: 2.2.2.2:0, label: 201

এখানে 50.0.0.0 এর সাথে 30 দ্বারা Prefix Length বুঝানো হয়েছে।

কোন রাউটারের সম্পূর্ণ MPLS Forwarding Table দেখতে চাইলে রাউটারে নিচের কমান্ড দিতে হবে।

R1#show mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
100        205        4.4.4.4/32       0             Fa0/1      20.0.0.1
101        Pop Label  30.0.0.0/30      0             Fa0/1      20.0.0.1
102        202        40.0.0.0/30      0             Fa0/1      20.0.0.1
103        201        50.0.0.0/30      0             Fa0/1      20.0.0.1
104        Pop Label  2.2.2.2/32       0             Fa0/1      20.0.0.1
105        204        3.3.3.3/32       0             Fa0/1      20.0.0.1

আমরা যদি রাউটারের MPLS Forwarding Table থেকে শুধুমাত্র একটি নির্দিষ্ট রাউটের তথ্য দেখতে চাই তাহলে রাউটারে নিচের কমান্ড দিতে হবে।

R1#show mpls forwarding-table 50.0.0.0 30
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
103        201        50.0.0.0/30      0             Fa0/1      20.0.0.1

Label Based Forwarding

প্রদত্ত টপোলজি অনুযায়ী আমাদের MPLS কনফিগার করার কাজ শেষ। এখন আমরা দেখবো MPLS কনফিগার করার পর ক্লায়েন্ট রাউটার C1-A থেকে প্যাকেট কিভাবে C1-B তে পৌছায়।

১. C1-A রাউটার C1-B (50.0.0.2) তে প্যাকেট পাঠানোর জন্য প্রথমে তা নিজের গেটওয়ে 10.0.0.1 অর্থাৎ R1 এর নিকট পাঠাবে। এখানে আই.এস.পি রাউটার R1 একটি MPLS এনাবলড CE রাউটার।

২. R1 রাউটার 50.0.0.0/30 ডেষ্টিনেশনে প্যাকেট পাঠানোর জন্য Routing Table Lookup (Layer-3) করবে না। বরং এটি MPLS Forwarding Table (Layer-2.5) দেখে পরবর্তী রাউটারের নিকট ট্রাফিক ফরোয়ার্ড করবে। এখানে 50.0.0.0/30 ডেষ্টিনেশনের জন্য R1 এর MPLS Forwarding Table নিম্নরূপঃ

R1#show mpls forwarding-table 50.0.0.0 30
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
103        201        50.0.0.0/30      0             Fa0/1      20.0.0.1

এখানে 50.0.0.2 আই.পি বা 50.0.0.0/30 নেটওয়ার্কের জন্য R1 এর Local Label হলো 103 এবং R2 এর Local Label হলো 201 । LDP এর মাধ্যমে R2 তার নিজের Local Label টি R1 এর সাথে শেয়ার করেছে। এখানে R1 এর MPLS Forwarding Table এ 50.0.0.0/30 নেটওয়ার্কের জন্য Outgoing Label হলো 201 । তাই R1 রাউটার R2 এর কাছে ফরোয়ার্ডের সময় এর গায়ে 201 যোগ করবে অতঃপর R2 এর কাছে পাঠাবে।

৩. R2 রাউটার R1 এর কাছ থেকে 201 যুক্ত Label টি পাবে। R2 এর MPLS Forwarding Table এ 201 যুক্ত Label এর বিপরীতে Outgoing Label হলো 311 । তা দেখে R2 রাউটার 201 Label টি মুছে ফেলে একটি নতুন Label 311 যোগ করবে এবং তা R3 এর কাছে পাঠাবে।

R2#show mpls forwarding-table 50.0.0.0 30
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
201        311        50.0.0.0/30      0             Fa0/1      30.0.0.2

একটি Label মুছে ফেলে আরেকটি Label যোগ করার এই প্রক্রিয়াটিকে বলা হয় Label Swaping ।

৪. এরপর R3 রাউটার R2 এর কাছ থেকে 311 যুক্ত Label টি পাবে। R3 এর MPLS Forwarding Table এ 311 যুক্ত Label এর বিপরীতে Outgoing Label হলো POP Label । POP এর অর্থ হলো খুলে ফেলা। POP Label এর এক্ষেত্রে R3 নিজের MPLS Forwarding Table দেখে এর থেকে Label টি মুছে ফেলবে কিন্তু আর কোন নতুন Label যুক্ত করবে না। এটি নিজের Routing Table Lookup করে প্যাকেটটি R4 এর কাছে পাঠাবে।

R3#show mpls forwarding-table 50.0.0.0 30
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
311        Pop Label  50.0.0.0/30      0             Fa0/1      40.0.0.2

এভাবে কোন Label খুলে ফেলে নতুন কোন Label না লাগিয়ে প্যাকেট ডেলিভারীর প্রক্রিয়াটিকে বলা হয় Penaltimate Hop Popping (PHP)। একটি রাউটার তখনই PHP অপারেশন চালাবে যখন তার LDP Neighbor রাউটার তাকে কোন একটি রাউটের বিপরীতে imp-null Label শেয়ার করে। এখানে, 50.0.0.0/30 যেহেতু R4 এর Connected নেটওয়ার্ক তাই 50.0.0.0/30 এর জন্য R4 এর Local Label হলো imp-null ।

৫. সবশেষে R4 প্যাকেটটি পাবে এবং নিজের Routing Table Lookup করে প্যাকেটটি C1-B এর কাছে পাঠিয়ে দিবে।

এখানে, C1-A এর কাছ থেকে C1-B তে ট্রাফিক পৌছানোর জন্য আই.এস.পি এর যে MPLS এনাবলড পাথ দিয়ে ট্রাফিক গেল তাকে বলা হয় Label Switch Path (LSP) । আর আই.এস.পি এর যে কয়টি রাউটার এই MPLS প্রসেসে অংশগ্রহন করে তাদেরকে বলা হয় Label Switch Router (LSR)। ক্লায়েন্ট এর কোন রাউটার এই LSP বা LSR এর অংশ নয়।

এখন আমরা C1-A এ থেকে যদি C1-B তে Traceroute দেই তাহলে আই.এস.পি এর Hop গুলোতে আই.পি এ্যাড্রেসের পাশাপাশি MPLS এর Label ও দেখতে পাব।

C1-A#traceroute 50.0.0.2
Type escape sequence to abort.
Tracing the route to 50.0.0.2
  1 10.0.0.1 48 msec 24 msec 8 msec
  2 20.0.0.1 [MPLS: Label 201 Exp 0] 68 msec 72 msec 100 msec
  3 30.0.0.2 [MPLS: Label 311 Exp 0] 48 msec 56 msec 40 msec
  4 40.0.0.2 104 msec 76 msec 92 msec
  5 50.0.0.2 76 msec 92 msec 80 msec

আশাকরি এই টিউটোরিয়ালটি দেখে আপনারা MPLS সম্পর্কে কিছু ধারণা পাবেন। ভাল থাকবেন, আল্লাহ হাফেজ।