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

Understanding Cisco Packet Switching and Load Balancing Technique

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

আজকে আমরা Cisco রাউটারের Packet Switching ও Load Balancing টেকনিক নিয়ে আলোচনা করবো। আমরা যখন CCNA করেছি তখন পড়েছি যে, RIP, OSPF, EIGRP এই ডাইনামিক রাউটিং প্রটোকলগুলো যদি কোন ডেষ্টিনেশন নেটওয়ার্কে যাওয়ার জন্য একই Cost এ দুইটি পাথ পায় তাহলে এটি সেই দুইটি পাথ দিয়ে Equal Cost Load Balance করে। কিন্তু আসলে কি তাই?? সম্প্রতি, কমিউনিটির কয়েকজনের সাথে আলোচনার সময় তারা বললেন যে, তারা এরকম Load Balancing কনফিগার করেছেন, কিন্তু Load Balance হচ্ছে না, একটি মাত্র পাথ/লিংক দিয়ে ট্রাফিক যাচ্ছে। তাহলে আমরা CCNA তে যা শিখেছি তা কি ভূল? না অবশ্যই ভূল না, তবে Cisco ডিভাইসসমূহে RIP, OSPF বা EIGRP দিয়ে সঠিকভাবে Load Balance করতে চাইলে Cisco এর ডিফল্ট প্যাকেট সুইচিং টেকনিকটি পরিবর্তন করতে হয়। কমান্ডটি খুবই সিম্পল কিন্তু ব্যাকগ্রাউন্ডের ব্যাপারগুলো বুঝতে হলে বেশ Study এর প্রয়োজন। তবে ব্যাপারগুলো আসলেই মজার।

Cisco Packet Switching Technique

Cisco ডিভাইসসমূহে Load Balance কিভাবে হয় তা জানার আগে আমরা Cisco ডিভাইসসমূহ কিভাবে প্যাকেট সুইচিং করে তা জেনে নিই। সুইচিং বলতে এখানে Switch (হার্ডওয়্যার) এর কাজকে বুঝানো হচ্ছে না, এই প্যাকেট সুইচিং রাউটারসমূহ করে থাকে (Switch ফ্রেইম সুইচিং করে)। একটি Cisco রাউটার তার এক ইন্টারফেস (Inbound/Ingress Interface) দিয়ে প্যাকেট রিসিভ করে আরেক ইন্টারফেস (Outbound/Egress Interface) দিয়ে ফরোয়ার্ড করে থাকে, এই প্রক্রিয়াটিকে বলা হয় প্যাকেট সুইচিং বা প্যাকেট ফরোয়ার্ডিং। আর এই প্যাকেট সুইচিং বা প্যাকেট ফরোয়ার্ডিং এর সময় রাউটার তার এক ইন্টারফেস দিয়ে রিসিভ করা প্যাকেট ঠিক কোন ইন্টারফেস দিয়ে ফরোয়ার্ড করবে সেই সিদ্ধান্ত নেওয়াকে বলা হয় রাউটিং। সুতরাং, একটি রাউটারের ক্ষেত্রে রাউটিং ও সুইচিং প্রক্রিয়ার মধ্যে এই পার্থক্যটি বুঝা খু্বই গুরুত্বপূর্ণ।

Cisco রাউটারসমূহ কিভাবে রাউটিং করে তা আমরা অল্প-বিস্তর জানি। এখন আমরা আলোচনা করবো Cisco রাউটারসমূহ কিভাবে সুইচিং সম্পন্ন করে। অর্থাৎ, Cisco রাউটার তার এক ইন্টারফেস (Inbound/Ingress Interface) দিয়ে প্যাকেট রিসিভ করে রাউটিং সিদ্ধান্ত নেওয়ার পর আরেক ইন্টারফেস (Outbound/Egress Interface) দিয়ে কিভাবে ঐ প্যাকেটটিকে ফরোয়ার্ড করে।

Cisco রাউটারসমূহ সাধারণত তিন ধরণের প্যাকেট সুইচিং পদ্ধতি রয়েছে। এগুলো হলোঃ
1. Process Switching
2. Fast Switching
3. CEF

বর্তমানে সব Cisco রাউটারসমূহে বাই ডিফল্ট CEF এনাবল করা থাকে। অর্থাৎ, Cisco রাউটারসমূহে প্যাকেট সুইচিং এর জন্য CEF হলো প্রথম পছন্দ। যদি কোন কারণে, CEF ডিসএ্যাবল করা হয় তাহলে দ্বিতীয় পছন্দ হলো Fast Switching পদ্ধতি। আবার, যদি কোন কারণে Fast Switching ডিসএ্যাবল করা হয় তাহলে সর্বশেষ পছন্দ হলো Process Switching পদ্ধতি। আমরা এই তিনটি প্যাকেট সুইচিং পদ্ধতি নিয়ে বিস্তারিত আলোচনা করার চেষ্টা করবো।

Process Switching

Process Switching হলো এমন এক ধরণের প্যাকেট সুইচিং পদ্ধতি যেখানে একটি প্যাকেট প্রথমে রাউটারের Inbound/Ingress ইন্টারফেস দিয়ে প্রবেশ করে। অতঃপর রাউটার সেই প্যাকেটের ডেষ্টিনেশন আই.পি টি নিজের রাউটিং টেবিলের সাথে মিলিয়ে দেখে (Routing Table Lookup) এবং যদি কোন এন্ট্রির সাথে মিলে যায় তাহলে সেই এন্ট্রিতে থাকা Next-hop আই.পি এর দিকে প্যাকেট ফরোয়ার্ড করে। আর Next-hop আই.পি এর কাছে প্যাকেট ফরোয়ার্ড করার সময় উক্ত Next-hop টি রাউটারের কোন ইন্টারফেস দিয়ে Reachable (Outbound/Egress ইন্টারফেস) তা নির্ধারণ করে। এবং সবশেষে রাউটার তার নির্ধারিত Outbound/Egress ইন্টারফেস দিয়ে প্যাকেটটি পাঠিয়ে দেয়। এই প্যাকেট সুইচিং প্রক্রিয়ায় Routing Table Lookup এর কাজটি রাউটারের CPU দ্বারা সম্পন্ন হয়। এখন যদি কোন ডাটা কমিউনিকেশনে ১০০০ টি প্যাকেট থাকে, তাহলে ঐ ১০০০টি প্যাকেটের প্রতিটি প্যাকেটই একইভাবে রাউটারের CPU দ্বারা প্রসেস করা হয়। এতে করে সার্ভিস প্রোভাইডার নেটওয়ার্কের ক্ষেত্রে রাউটারের CPU Utilization হাই হয় এবং রাউটারের ইফিসিয়েন্সি কমে যায়।

Process Switching পদ্ধতি হলো সবচেয়ে ধীরগতির প্যাকেট সুইচিং পদ্ধতি। এতে ডাটা কমিউনিকেশনে Packet Loss/High Latency/Delay ইত্যাদি বিভিন্ন সমস্যা থাকে।

Fast Switching

Process Switching পদ্ধতির সীমাবদ্ধতা দূর করে প্যাকেট সুইচিংকে আরো দ্রুততর করার জন্য Cisco পরবর্তীকে Fast Switching পদ্ধতি আবিষ্কার করে। Process Switching এবং Fast Switching পদ্ধতির মধ্যে মূল পার্থক্য হলো, Fast Switching পদ্ধতিতে কোন ডাটা কমিউকেশনে ১০০০টি প্যাকেটের মধ্যে শুধুমাত্র প্রথম প্যাকেটটি রাউটারের CPU দ্বারা প্রসেস করা হয় এবং পরবর্তী ৯৯৯টি প্যাকেট প্রসেস করার জন্য রাউটারের CPU ব্যবহৃত হয় না। রাউটারের CPU প্রথম প্যাকেটটি প্রসেস করার সময় যাবতীয় ফরোয়ার্ডিং তথ্য সমূহ একটি Fast Cache এ সংরক্ষন করে। একে Route Cache ও বলা হয়ে থাকে। এবং পরবর্তী সকল প্যাকেটসমূহ ঐ Fast Cache এ থাকা তথ্য অনুযায়ী নির্ধারিত Outbound/Egress ইন্টারফেস দিয়ে বের হয়ে যায়। এতে করে একটি কমিউনিকেশনের প্রতিটি প্যাকেটকে যেহেতু CPU দ্বারা প্রসেস করতে হয় না, তাই এক্ষেত্রে রাউটারের CPU Utilization কম হয় এবং Packet Loss/High Latency/Delay ইত্যাদি বিভিন্ন সমস্যা উল্লেখযোগ্য হারে হ্রাস পায়।

Fast Switching কে আবার Demand Based Switching ও বলা হয়ে থাকে। কারণ, রাউটার তার রাউটিং টেবিলে থাকা সকল রাউট এন্ট্রির জন্য একই সাথে Cache জেনারেট করে না। যখন যে ডেষ্টিনেশনে যাওয়ার জন্য কোন প্যাকেট পায় তখন শুধুমাত্র ঐ নির্দিষ্ট ডেষ্টিনেশনে যাওয়ার জন্য প্রয়োজনীয় তথ্যসমূহ Fast Cache/Route Cache এর মধ্যে সরবরাহ করে।

Cisco রাউটারসমূহের প্রতিটি ইন্টারফেসে এই Fast Switching অপশন বাই ডিফল্ট এনাবল করা থাকে। (কিন্তু আগেই আমরা বলেছি, প্যাকেট সুইচিং এর ক্ষেত্রে Cisco রাউটারসমূহে Fast Switching পদ্ধতি হলো দ্বিতীয় পছন্দ।)

CEF (Cisco Express Forwarding)

নেটওয়ার্কিং এর প্রসারের সাথে সাথে তাল মিলিয়ে ব্যান্ডউইথ ব্যবহারের পরিমান বৃদ্ধি পাওয়াতে একসময় Fast Switching পদ্ধতিও খুব একটা কাজে আসছিল না। এজন্য Cisco পরবর্তীতে নতুন প্যাকেট সুইচিং টেকনিক আবিষ্কার করে, যার নাম হলো CEF । CEF এর পূর্ণরূপ হলো Cisco Express Forwarding । বর্তমানে সব Cisco রাউটারসমূহে CEF বাই ডিফল্ট এনাবল থাকে এবং প্যাকেট সুইচিং এর ক্ষেত্রে Cisco রাউটারসমূহে CEF হলো প্রথম পছন্দ।

CEF এনাবল আছে এমন রাউটারসমূহ প্যাকেট সুইচিং এর জন্য দুইটি অতিরিক্ত টেবিল মেইনটেইন করে। এর একটি হলো CEF Forwarding Information Base (FIB) এবং দ্বিতীয়টি হলো CEF Adjacency Table ।

CEF কে Topology Based সুইচিংও বলা হয়ে থাকে। কারণ, CEF এনাবলড রাউটার তার রাউটিং টেবিলে থাকা সকল প্রিফিক্স বা রাউটের বিপরীতে যাবতীয় নেটওয়ার্ক লেয়ারের তথ্য এক সাথে জেনারেট করে FIB টেবিলে সংরক্ষন করে। এবং যখনই কোন রাউটিং টেবিল আপডেট হয় তখন সাথে সাথে FIB টেবিল আপডেট করে। অপরদিকে, রাউটার তার রাউটিং সিদ্ধান্ত গ্রহণের পর কোন একটি প্যাকেটকে যে Next-hop এর কাছে পাঠাতে হবে সেই Next-hop কে Reach করার জন্য প্রয়োজনীয় ডাটা লিংক লেয়ারের তথ্যসমূহ CEF Adjacency Table এ সংরক্ষন করে (এর ব্যাকএ্যান্ডে ARP প্রটোকল কাজ করে)। এতে করে একটি ডাটা কমিউনিকেশনে যদি ১০০০ প্যাকেট থাকে তাহলে তার কোনটিকেই কখনো রাউটারের CPU দ্বারা প্রসেস করার দরকার হয় না।

ডিভাইসের মডেলভেদে এই FIB Table এবং Adjacency Table রাউটারের Main Memory বা রাউট প্রসেসরের Memory তে সংরক্ষিত হয়। এই ধরণের অপারেশন মোডকে বলা হয় Central CEF ।

কিছু লেটেষ্ট Cisco ডিভাইসে এই টেবিলসমূহ রাউটারের Main Memory বা রাউট প্রসেসরের Memory তে সংরক্ষন না করে সরাসরি রাউটারের Line Card এর মধ্যে সংরক্ষন করা হয়। এই ধরণের অপারেশন মোডকে বলা হয় Distributed CEF (dCEF) । Line Card হলো একটি বিশেষ ধরণের হার্ডওয়্যার যার সাথে রাউটারের ইন্টারফেসসমূহ সরাসরি যুক্ত থাকে। এবং যখন কোন প্যাকেট রাউটারের কোন একটি Inbound/Ingress ইন্টারফেস দিয়ে প্রবেশ করে তখন উক্ত প্যাকেটটি Line Card এ সংরক্ষিত সুইচিং/ফরোয়ার্ডিং তথ্য অনুযায়ী আরেকটি নির্দিষ্ট Outbound/Egress ইন্টারফেস দিয়ে বের হয়ে যায়। এক্ষেত্রে কোন Routing Table Lookup করার দরকার হয় না, এমনকি রাউটারের Main Memory তে থাকা Route Cache এরও কোন দরকার হয় না। একে Hardware Based Processing ও বলা হয়ে থাকে। এবং বর্তমানে সার্ভিস প্রোভাইডার নেটওয়ার্কে এটি একটি গুরুত্বপূর্ণ টেকনিক।

Cisco Load Balancing Technique

এতক্ষন আমরা Cisco রাউটারের প্যাকেট সুইচিং টেকনিক নিয়ে আলোচনা করলাম। এখন আমরা দেখবো, Cisco রাউটারসমূহ কিভাবে এই প্যাকেট সুইচিং টেকনিকের মাধ্যমে একই Cost এ পাওয়া দুইটি আলাদা পাথের মধ্য দিয়ে Load Balance করে। প্রথমেই আমরা নিচের টপোলজি অনুযায়ী আমাদের ল্যাব কনফিগার করে নিই।

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

R1#conf t
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.10.2 255.255.255.0  
R1(config-if)#no shutdown 
R1(config-if)#description To-R3
R1(config-if)#duplex full 
R1(config-if)#speed 100
R1(config-if)#exit

R1(config)#router ospf 1
R1(config-router)#network 192.168.10.0 0.0.0.255 area 0
R1(config-router)#exit
R2#conf t
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 192.168.20.2 255.255.255.0
R2(config-if)#no shutdown 
R2(config-if)#description To-R3
R2(config-if)#duplex full 
R2(config-if)#speed 100
R2(config-if)#exit

R2(config)#router ospf 1
R2(config-router)#network 192.168.20.0 0.0.0.255 area 0
R2(config-router)#exit
R3#conf t
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.10.1 255.255.255.0
R3(config-if)#no shutdown 
R3(config-if)#description To-R1
R3(config-if)#duplex full 
R3(config-if)#speed 100
R3(config-if)#exit
R3(config)#interface fastEthernet 0/1
R3(config-if)#ip address 192.168.20.1 255.255.255.0
R3(config-if)#no shutdown 
R3(config-if)#description To-R2
R3(config-if)#duplex full 
R3(config-if)#speed 100
R3(config-if)#exit
R3(config)#interface fastEthernet 1/0
R3(config-if)#ip address 10.0.0.1 255.255.255.252
R3(config-if)#no shutdown 
R3(config-if)#description To-R4-PRI
R3(config-if)#duplex full 
R3(config-if)#speed 100
R3(config-if)#exit
R3(config)#interface fastEthernet 2/0
R3(config-if)#ip address 20.0.0.1 255.255.255.252
R3(config-if)#no shutdown 
R3(config-if)#description To-R4-RDN
R3(config-if)#duplex full 
R3(config-if)#speed 100
R3(config-if)#exit

R3(config)#router ospf 1
R3(config-router)#network 192.168.10.0 0.0.0.255 area 0
R3(config-router)#network 192.168.20.0 0.0.0.255 area 0
R3(config-router)#network 10.0.0.0 0.0.0.3 area 0
R3(config-router)#network 20.0.0.0 0.0.0.3 area 0
R3(config-router)#exit
R4#conf t
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 172.16.10.1 255.255.255.0
R4(config-if)#no shutdown 
R4(config-if)#description To-R5
R4(config-if)#duplex full 
R4(config-if)#speed 100
R4(config-if)#exit
R4(config)#interface fastEthernet 0/1
R4(config-if)#ip address 172.16.20.1 255.255.255.0
R4(config-if)#no shutdown 
R4(config-if)#duplex full 
R4(config-if)#speed 100
R4(config-if)#exit
R4(config)#interface fastEthernet 1/0
R4(config-if)#ip address 10.0.0.2 255.255.255.252
R4(config-if)#no shutdown 
R4(config-if)#description To-R3-PRI
R4(config-if)#duplex full 
R4(config-if)#speed 100
R4(config-if)#exit
R4(config)#interface fastEthernet 2/0
R4(config-if)#ip address 20.0.0.2 255.255.255.252
R4(config-if)#no shutdown 
R4(config-if)#description To-R3-RDN
R4(config-if)#duplex full 
R4(config-if)#speed 100
R4(config-if)#exit

R4(config)#router ospf 1
R4(config-router)#network 172.16.10.0 0.0.0.255 area 0
R4(config-router)#network 172.16.20.0 0.0.0.255 area 0
R4(config-router)#network 10.0.0.0 0.0.0.3 area 0
R4(config-router)#network 20.0.0.0 0.0.0.3 area 0
R4(config-router)#exit
R5#conf t
R5(config)#interface fastEthernet 0/0
R5(config-if)#ip address 172.16.10.2 255.255.255.0
R5(config-if)#no shutdown 
R5(config-if)#description To-R4
R5(config-if)#duplex full 
R5(config-if)#speed 100
R5(config-if)#exit

R5(config)#router ospf 1
R5(config-router)#network 172.16.10.0 0.0.0.255 area 0
R5(config-router)#exit
R6#conf t
R6(config)#interface fastEthernet 0/0
R6(config-if)#ip address 172.16.20.2 255.255.255.0
R6(config-if)#no shutdown 
R6(config-if)#description To-R4
R6(config-if)#duplex full 
R6(config-if)#speed 100
R6(config-if)#exit

R6(config)#router ospf 1
R6(config-router)#network 172.16.20.0 0.0.0.255 area 0
R6(config-router)#exit

উপরিউল্লেখিত কনফিগারেশন অনুযায়ী, R1 থেকে R5 এ পৌছানোর জন্য R1 প্রথমে প্যাকেটটিকে R3 এর কাছে পাঠাবে। এখন R3 থেকে R5 এ পৌছানোর জন্য দুইটি পাথ রয়েছে। আমরা R3 এর রাউটিং টেবিল দেখে নিই।

R3#show ip route ospf 
     172.16.0.0/24 is subnetted, 2 subnets
O       172.16.20.0 [110/2] via 20.0.0.2, 00:01:21, FastEthernet2/0
                    [110/2] via 10.0.0.2, 00:01:21, FastEthernet1/0
O       172.16.10.0 [110/2] via 20.0.0.2, 00:01:21, FastEthernet2/0
                    [110/2] via 10.0.0.2, 00:01:21, FastEthernet1/0

এখন CCNA লেভেলে আমাদের জানা তথ্য অনুযায়ী R5 এর কাছে প্যাকেট পাঠানোর জন্য R3 এর Load Balance করার কথা। অর্থাৎ একটি প্যাকেট যাবে 10.0.0.2 এর কাছে, আরেকটি প্যাকেট যাবে 20.0.0.2 এর কাছে এবং Session শেষ না হওয়া পর্যন্ত এভাবেই চলতে থাকবে। এখন দেখি R3 আসলেই Load Balance করে কিনা। এজন্য আমরা R1 থেকে R5 এ Traceroute করে দেখতে পারি।

R1#traceroute 172.16.10.2 probe 8
Type escape sequence to abort.
Tracing the route to 172.16.10.2
  1 192.168.10.1 36 msec 32 msec 20 msec 20 msec 16 msec 20 msec 20 msec 20 msec
  2 10.0.0.2 28 msec 52 msec 24 msec 56 msec 40 msec 40 msec 36 msec 36 msec
  3 172.16.10.2 64 msec 48 msec 48 msec 28 msec 68 msec 28 msec 76 msec 24 msec

আমরা R1 থেকে R5 এ Traceroute করলাম। এখানে probe 8 এর অর্থ হলো Traceroute এর সময় R1 একসাথে আটটি ICMP প্যাকেট পাঠাবে (বাই ডিফল্ট তিনটি পাঠায়।) এখন আমরা যদি Traceroute রিপোর্টটি দেখি তাহলে দেখতে পাবো যে, R1 থেকে যে আটটি প্যাকেট R5 এর কাছে গেছে তার সব কয়টি প্যাকেট R3 একটি মাত্র পাথ (Nexthop 10.0.0.2) দিয়ে R4 এর কাছে পাঠিয়েছে। এখানে R3 রাউটার Load Balance করে নি, যদিও R3 এর রাউটিং টেবিলে 172.16.0.0/30 অর্থাৎ R5 এর কাছে যাওয়ার জন্য দুইটি পাথ আছে। কারণ কি?

এর কারণ হলো, R3 থেকে R5 এর কাছে যাওয়ার জন্য পাথ ডিসকভারীর দায়িত্ব হলো রাউটিং প্রটোকলের। এবং সেই পাথ দিয়ে প্যাকেট পাঠানোর দায়িত্ব সুইচিং টেকনিকের। (এখানে একটি কথা বিশেষভাবে উল্লেখ্য যে. রাউটিং প্রটোকল শুধুমাত্র রাউটিং পাথ ডিসকভার করে, প্যাকেট পাঠানোর কাজ রাউটিং প্রটোকলের নয়।)

আমরা আগেই জেনেছি যে, Cisco রাউটারসমূহে প্যাকেট সুইচিং টেকনিক হিসেবে প্রথম পছন্দ হলো CEF । আর এই CEF দুই ভাবে Load Balance করে থাকে।

1. Per-destination Load Balance
2. Per-packet Load Balance

Per-destination Load Balance এর অর্থ হলো, একটি নির্দিষ্ট সোর্স থেকে কোন নির্দিষ্ট ডেষ্টিনেশনে যাওয়ার জন্য যদি একই Cost এ একাধিক পাথ থাকে তাহলে রাউটার ঐ নির্দিষ্ট সোর্স থেকে ঐ নির্দিষ্ট ডেষ্টিনেশনে যাওয়ার জন্য উক্ত Session এর সবগুলো প্যাকেট একটি মাত্র পাথ দিয়ে পাঠাবে। এজন্য একে Session-based Load Balance ও বলা হয়ে থাকে।

অন্যদিকে Per-packet Load Balance এর অর্থ হলো, একটি নির্দিষ্ট সোর্স থেকে কোন নির্দিষ্ট ডেষ্টিনেশনে যাওয়ার জন্য যদি একই Cost এ একাধিক পাথ থাকে তাহলে রাউটার ঐ নির্দিষ্ট সোর্স থেকে ঐ নির্দিষ্ট ডেষ্টিনেশনের যাওয়ার জন্য উক্ত Session এর সবগুলো প্যাকেট Available পাথসমূহের মধ্য দিয়ে Load balance করে পাঠাবে। অর্থাৎ প্রথম প্যাকেট একটি পাথ দিয়ে, দ্বিতীয় প্যাকেট আরেকটি পাথ দিয়ে, এবং Session শেষ না হওয়া পর্যন্ত এভাবেই চলতে থাকবে।

Cisco রাউটারসমূহে CEF বাই ডিফল্ট Per-destination Load Balance করে থাকে।

R3#show ip cef 172.16.10.0
172.16.10.0/24, version 29, epoch 0, per-destination sharing
0 packets, 0 bytes
  via 20.0.0.2, FastEthernet2/0, 0 dependencies
    traffic share 1
    next hop 20.0.0.2, FastEthernet2/0
    valid adjacency
  via 10.0.0.2, FastEthernet1/0, 0 dependencies
    traffic share 1
    next hop 10.0.0.2, FastEthernet1/0
    valid adjacency
  0 packets, 0 bytes switched through the prefix
  tmstats: external 0 packets, 0 bytes
           internal 0 packets, 0 bytes

আর এই কারণেই R1 থেকে R5 এ যাওয়া প্যাকেটসমূহ R3 একটিমাত্র পাথ দিয়ে পাঠাচ্ছে। এখন আমরা R2 থেকে R6 এ Traceroute করি।

R2#traceroute 172.16.20.2 probe 8
Type escape sequence to abort.
Tracing the route to 172.16.20.2
  1 192.168.20.1 32 msec 32 msec 24 msec 16 msec 24 msec 16 msec 24 msec 16 msec
  2 20.0.0.2 48 msec 28 msec 28 msec 28 msec 44 msec 36 msec 40 msec 44 msec
  3 172.16.20.2 76 msec 44 msec 72 msec 60 msec 48 msec 56 msec 24 msec 88 msec

এখানে দেখা যাচ্ছে যে, R2 থেকে R6 এ যাওয়া সবগুলো প্যাকেট R3 দ্বিতীয় পাথ দিয়ে পাঠাচ্ছে (Next-hop 20.0.0.2)। অর্থাৎ, এক্ষেত্রে R3 রাউটার Per-destination Load Balance বা Session-based Load Balance করছে। Per-destination Load Balance এর ক্ষেত্রে Cisco রাউটার বিভিন্ন Hashing Algorithm ব্যবহার করে থাকে এবং এই Algorithm এর মাধ্যমে কোন একটি Session এ Load Balance করার জন্য সোর্স/ডেষ্টিনেশন আই.পি এর পাশাপাশি সোর্স/ডেষ্টিনেশন পোর্ট নম্বরও ব্যবহার করা যায়।

এখন আমরা যদি R3 রাউটারের CEF এর মধ্যে Per-packet Load Balance এনাবল করতে চাই তাহলে R3 রাউটারের Outbound ইন্টারফেসসমূহে নিচের কমান্ড দিতে হবে।

R3#conf t
R3(config)#interface fastEthernet 1/0
R3(config-if)#ip load-sharing per-packet 
R3(config-if)#exit
R3(config)#interface fastEthernet 2/0 
R3(config-if)#ip load-sharing per-packet 
R3(config-if)#exit
R3#show ip cef 172.16.10.0
172.16.10.0/24, version 29, epoch 0, per-packet sharing
0 packets, 0 bytes
  via 20.0.0.2, FastEthernet2/0, 0 dependencies
    traffic share 1, current path
    next hop 20.0.0.2, FastEthernet2/0
    valid adjacency
  via 10.0.0.2, FastEthernet1/0, 0 dependencies
    traffic share 1
    next hop 10.0.0.2, FastEthernet1/0
    valid adjacency
  0 packets, 0 bytes switched through the prefix
  tmstats: external 0 packets, 0 bytes
           internal 0 packets, 0 bytes

R3 রাউটারের CEF এর মধ্যে Per-packet Load Balance এনাবল করার পর যদি আমরা R1 থেকে R5 এ আবার Traceroute দেই তাহলে দেখতে পাবো যে, R3 রাউটার এখন আমাদের চাহিদা অনুযায়ী Load Balance করছে (অর্থাৎ প্রথম প্যাকেট একটি পাথ দিয়ে, দ্বিতীয় প্যাকেট আরেকটি পাথ দিয়ে যাচ্ছে)।

R1#traceroute 172.16.10.2 probe 8
Type escape sequence to abort.
Tracing the route to 172.16.10.2
  1 192.168.10.1 40 msec 16 msec 16 msec 12 msec 20 msec 24 msec 12 msec 20 msec
  2 20.0.0.2 28 msec
    10.0.0.2 52 msec
    20.0.0.2 44 msec
    10.0.0.2 40 msec
    20.0.0.2 24 msec
    10.0.0.2 40 msec
    20.0.0.2 48 msec
    10.0.0.2 32 msec
  3 172.16.10.2 36 msec 56 msec 76 msec 28 msec 72 msec 28 msec 72 msec 32 msec

আবার যদি আমরা R2 থেকে R6 এ Traceroute দেই তাহলে দেখতে পাবো যে, R3 রাউটার এখনও আমাদের চাহিদা অনুযায়ী Load Balance করছে (অর্থাৎ প্রথম প্যাকেট একটি পাথ দিয়ে, দ্বিতীয় প্যাকেট আরেকটি পাথ দিয়ে যাচ্ছে)।

R2#traceroute 172.16.20.2 probe 8
Type escape sequence to abort.
Tracing the route to 172.16.20.2
  1 192.168.20.1 36 msec 28 msec 24 msec 16 msec 20 msec 24 msec 20 msec 24 msec
  2 20.0.0.2 28 msec
    10.0.0.2 40 msec
    20.0.0.2 28 msec
    10.0.0.2 44 msec
    20.0.0.2 40 msec
    10.0.0.2 32 msec
    20.0.0.2 56 msec
    10.0.0.2 36 msec
  3 172.16.20.2 56 msec 56 msec 48 msec 32 msec 68 msec 28 msec 72 msec 28 msec

রিপ্লাই ট্রাফিক Load Balance করার জন্য R4 রাউটারেও আমাদের অনুরূপ কনফিগারেশন করতে হবে।

আমাদের অনেকের ধারণামতে, Per-packet Load Balance ই হলো সত্যিকারের Load Balance । কিন্তু দুই ধরণের Load Balance এর ই কিছু সুবিধা/অসুবিধা রয়েছে।

Per-packet Load Balance এর মাধ্যমে দুইটি Available পাথের মধ্য দিয়ে সমানভাবে প্যাকেট পাঠানো হয়। এক্ষেত্রে দুইটি Available পাথের ব্যান্ডউইথ সমানভাবে ব্যবহার করা সম্ভব হয়। কিন্তু Per-destination Load Balance এর ক্ষেত্রে দুইটি Available পাথের ব্যান্ডউইথ সমানভাবে ব্যবহার করা অনেকাংশেই সম্ভব হয় না। Per-destination Load Balance এর ক্ষেত্রে ধরুন, R1 এর নিচে তার একটি LAN আছে এবং সেই LAN এ অনেকগুলো PC আছে, যেগুলো R1 এর WAN আই.পি 192.168.10.2 দিয়ে NAT করা। এখন R1 এর LAN এ থাকা সবগুলো PC যদি R5 এর কাছে ট্রাফিক পাঠাতে চায় তাহলে মাঝখানের R3 রাউটার সব ট্রাফিক একটি মাত্র পাথ দিয়ে পাঠাবে। কারণ, এখানে R1 এ যেহেতু NAT করা তাই R3 রাউটার সবগুলো প্যাকেটের সোর্স আই.পি হিসেবে 192.168.10.2 কে পাবে এবং ডেষ্টিনেশন যেহেতু একটি তাই এক্ষেত্রে R3 রাউটার একটি Session মেইনটেইন করবে এবং উক্ত Session এর সবগুলো প্যাকেট একটি মাত্র পাথ দিয়ে পাঠাবে। অর্থাৎ এসময় দ্বিতীয় পাথটি সম্পূর্ণ অব্যবহৃত অবস্থায় থাকবে। কিন্তু Per-packet Load Balance এর মাধ্যমে আমরা দুইটি পাথ একই সাথে ব্যবহার করতে পারি।

Per-packet Load Balance এর ক্ষেত্রে যেহেতু দুইটি পাথ একই সাথে ব্যবহৃত হয়, তাই কোন একটি পাথে Latency/Delay বেশি থাকলে ঐ পাথ দিয়ে যাওয়া প্যাকেটগুলো ডেষ্টিনেশনে যথাসময়ে Proper Order এ নাও পৌছাতে পারে। TCP প্যাকেটের যেহেতু Ordered Data Reconstruction মেকানিজম রয়েছে তাই প্যাকেটসমূহ ডেষ্টিনেশনে গিয়ে Properly Re-arranged হয়ে যায়। আবার মাঝপথে যদি কোন প্যাকেট Drop হয় তাহলে তা Re-transmit করারও সুবিধা আছে।

কিন্তু UDP প্যাকেটের ক্ষেত্রে যেহেতু Ordered Data Reconstruction এবং Packet Re-transmission এর কোন ব্যবস্থা নাই তাই প্যাকেটগুলো ডেষ্টিনেশনে যথাসময়ে Proper Order এ না পৌছালে কমিউনিকেশন বিঘ্নিত হতে পারে। বিশেষ করে IP Telephony/Voice, Video Streaming এর ক্ষেত্রে সমস্যা দেখা দেয়।

তাই কোন একটি রাউটারের CEF টেকনিকের মাধ্যমে Per-destination Load Balance করা ভাল নাকি Per-packet Load Balance করা ভাল তা নির্ভর করে নেটওয়ার্ক এবং তার ট্রাফিকের ধরণ এর উপর।

এতক্ষন আমরা CEF ব্যবহার করে Load Balancing করলাম। কিন্তু যদি আমাদের রাউটারে CEF ফিচারটি না থাকে অথবা যদি কোন কারণে ডিসএ্যাবল থাকে তাহলে Load Balancing কিভাবে হবে তা একটু বুঝার চেষ্টা করি। ধরি, আমাদের Cisco রাউটারের CEF ফিচারটি বন্ধ আছে।

R3#conf t
R3(config)#no ip cef

উপরোক্ত কমান্ডের মাধ্যমে আমরা রাউটারের CEF ফিচারটি বন্ধ করলাম। আমরা আগেই জেনেছি, CEF এর পরে প্যাকেট সুইচিং টেকনিক হিসেবে দ্বিতীয় পছন্দ হলো Fast Switching । যেহেতু আমাদের রাউটারে এখন CEF বন্ধ তাই রাউটার প্যাকেট সুইচিং করার জন্য Fast Switching টেকনিকটি ব্যবহার করবে। আর Fast Switching পদ্ধতিতে শুধুমাত্র Per-destination Load Balance করা যায়। Cisco রাউটারের ইন্টারফেসসমূহের মধ্যে এই Demand-based Per-destination Load Balance করার জন্য Route Caching এনাবল করা থাকে।

Fast Switching পদ্ধতিতে Per-packet Load Balance করা যায় না। CEF ডিসএ্যাবল থাকা কোন রাউটারে যদি কোন কারণে আমরা Per-packet Load Balance করতে চাই তাহলে ঐ রাউটারে আমাদেরকে অবশ্যই প্যাকেট সুইচিং টেকনিক হিসেবে Process Switching পদ্ধতি ব্যবহার করতে হবে। এক্ষেত্রে রাউটারের Egress/Outbound ইন্টারফেসসমূহের Route Caching মেকানিজম ডিসএ্যাবল করতে হবে। এজন্য নিচের কমান্ড দিতে হবে।

R3# config t
R3(config)#interface fastEthernet 0/1
R3(config-if)#no ip route-cache
R3(config-if)#exit
R3(config)#interface fastEthernet 1/0
R3(config-if)#no ip route-cache
R3(config-if)#exit

উপরিউক্ত কমান্ডের মাধ্যমে আমরা R3 রাউটারে Process Switching পদ্ধতি এনাবল করলাম। এই Process Switching পদ্ধতিতে Per-packet Load Balance হয়ে থাকে। কিন্তু Process Switching পদ্ধতিতে রাউটিং সিদ্ধান্তের জন্য প্রতিটি প্যাকেটকে যেহেতু রাউটারের CPU দ্বারা হ্যান্ডল করা হয় তাই এক্ষেত্রে রাউটারের CPU Utilization অনেক বেশি থাকে। এতে করে ডাটা কমিউনিকেশনের ক্ষেত্রে Delay, Latency ইত্যাদি বেড়ে যায় এবং Throughput কমে যায়। তাই একটি প্রোডাকশন নেটওয়ার্কের কোন রাউটারে কোন বিশেষ কারণ ছাড়া CEF বা Fast Switching পদ্ধতি ডিসএ্যাবল করা উচিত নয়।

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