ডিসট্যান্স ভেক্টর রাউটিং — RIP
এই পাঠে যা শিখবেন
- ডিসট্যান্স ভেক্টর রাউটিং-এর মূল ধারণা ও Bellman-Ford-এর সাথে সম্পর্ক
- RIP প্রোটোকলের নির্দিষ্ট বৈশিষ্ট্য — হপ কাউন্ট মেট্রিক, ১৫ হপ সীমা
- Count-to-infinity সমস্যা — কেন এটি ডিসট্যান্স ভেক্টরের একটি বাস্তব দুর্বলতা
- Python দিয়ে distance-vector আপডেট নিয়ম বাস্তবায়ন ও একটি নেটওয়ার্কে চালিয়ে দেখা
১ · ডিসট্যান্স ভেক্টর রাউটিং কীভাবে কাজ করে
L17-এ আমরা দেখেছি রাউটিং টেবিল কীভাবে ব্যবহৃত হয় — কিন্তু টেবিলটা আসে কোথা থেকে? ডিসট্যান্স ভেক্টর রাউটিংDistance Vector Routingএকটি রাউটিং কৌশল যেখানে প্রতিটি রাউটার শুধু প্রতিটি গন্তব্যের দূরত্ব ও পরবর্তী হপ জানে, এবং প্রতিবেশীদের সাথে পর্যায়ক্রমে পুরো টেবিল শেয়ার করে। একটি সহজ কিন্তু কার্যকর ধারণা — প্রতিটি রাউটার শুধু জানে "প্রতিটি গন্তব্যে পৌঁছাতে কত দূর, আর কোন প্রতিবেশীর দিকে পাঠাতে হবে।" এটি নিজের পুরো টেবিল নিয়মিতভাবে তার সরাসরি-সংযুক্ত প্রতিবেশীদের কাছে পাঠায় — আর প্রতিটি রাউটার নিজের টেবিল আপডেট করে যদি কোনো প্রতিবেশী কোনো গন্তব্যে কম খরচের একটি পথের কথা জানায়।
প্রতিটি গন্তব্য d-এর জন্য: যদি (আমার প্রতিবেশী n-এর দূরত্ব d-এ) + (আমার
থেকে n-এ যাওয়ার লিংক খরচ) < (আমি বর্তমানে যা জানি d-এ পৌঁছাতে) — তাহলে আমি এই নতুন,
কম খরচের পথটি গ্রহণ করি, আর n-কে আমার next hop হিসেবে চিহ্নিত করি। এটিই বিখ্যাত
Bellman-Ford শর্টেস্ট-পাথ অ্যালগরিদমের একটি বিতরণকৃত (distributed) সংস্করণ — প্রতিটি রাউটার
নিজে থেকেই এই নিয়ম বারবার প্রয়োগ করে, কোনো কেন্দ্রীয় সমন্বয়কারী ছাড়াই।
২ · RIP (Routing Information Protocol)
RIP হলো ক্লাসিক ডিসট্যান্স-ভেক্টর প্রোটোকল — এর মেট্রিক হলো শুধু হপ কাউন্ট (কতগুলো রাউটার পেরোতে হবে), লিংক গতি বা লেটেন্সি বিবেচনা করে না। RIP-এর সর্বোচ্চ মেট্রিক ১৫ — ১৬-কে "অসীম" বা অপৌঁছানযোগ্য হিসেবে গণ্য করা হয়। এই ইচ্ছাকৃতভাবে ছোট সীমাটি নিচের সমস্যাটির প্রভাব সীমিত রাখার জন্যই বসানো হয়েছে —
যখন কোনো লিংক ব্যর্থ হয়, ডিসট্যান্স-ভেক্টর রাউটারগুলো সাময়িকভাবে একে অপরকে ক্রমবর্ধমান (এবং ভুল) হপ-কাউন্ট জানাতে পারে — একজন রাউটার ভাবে অন্যজন এখনও পথটি জানে, তাই নিজের (এখন অকেজো) দূরত্বের উপর ১ যোগ করে আবার প্রচার করে, আর এটি বারবার চলতে থাকে যতক্ষণ না সংখ্যাটা "অসীম" (RIP-এ ১৬) ছুঁয়ে ফেলে ও সবাই বুঝতে পারে গন্তব্যটি অপৌঁছানযোগ্য। এই ধীর, ভুল-তথ্য-ছড়ানো কনভার্জেন্সই RIP-এর প্রধান দুর্বলতা — এবং লিংক-স্টেট রাউটিং (L19, OSPF) এই সমস্যা এড়াতেই ডিজাইন করা হয়েছে।
# ডিসট্যান্স ভেক্টর আপডেট — এক রাউন্ড এক্সচেঞ্জের সত্যিকারের সিমুলেশন
INF = float("inf")
# নেটওয়ার্ক টপোলজি: প্রতিটি রাউটারের সরাসরি-সংযুক্ত প্রতিবেশী ও লিংক খরচ
topology = {
"X": {"Y": 1, "Z": 5},
"Y": {"X": 1, "Z": 1},
"Z": {"X": 5, "Y": 1, "W": 1},
"W": {"Z": 1},
}
all_routers = list(topology.keys())
def initial_table(router):
"""শুরুতে প্রতিটি রাউটার শুধু নিজের সরাসরি প্রতিবেশীদের দূরত্ব জানে, বাকিটা INF।"""
table = {r: INF for r in all_routers}
table[router] = 0
for neighbor, cost in topology[router].items():
table[neighbor] = cost
return table
tables = {r: initial_table(r) for r in all_routers}
def update_distance_vector(router, tables, topology):
"""Bellman-Ford রিলাক্সেশন — প্রতিটি প্রতিবেশীর টেবিল দেখে, উন্নত রুট থাকলে গ্রহণ করে।"""
updated = dict(tables[router])
changes = []
for neighbor, link_cost in topology[router].items():
neighbor_table = tables[neighbor]
for dest, neighbor_dist in neighbor_table.items():
candidate = link_cost + neighbor_dist
if candidate < updated[dest]:
old = updated[dest]
updated[dest] = candidate
changes.append((dest, old, candidate, neighbor))
return updated, changes
def fmt(v):
return "∞" if v == INF else str(v)
print("এক রাউন্ড এক্সচেঞ্জের পর প্রতিটি রাউটারের পরিবর্তন —\n")
for router in all_routers:
new_table, changes = update_distance_vector(router, tables, topology)
print(f"রাউটার {router}:")
if not changes:
print(" কোনো উন্নতি হয়নি এই রাউন্ডে।")
for dest, old, new, via in changes:
print(f" {dest}-এর দূরত্ব {fmt(old)} -> {fmt(new)} (via {via})")
# --- স্ব-যাচাই: X-এর Z পর্যন্ত দূরত্ব সরাসরি লিংক (5) থেকে Y হয়ে (1+1=2) কমা উচিত ---
new_X, changes_X = update_distance_vector("X", tables, topology)
assert new_X["Z"] == 2, "X থেকে Z-এ Y হয়ে যাওয়ার পথ (cost 2) সরাসরি লিংকের (cost 5) চেয়ে ভালো হওয়া উচিত ছিল!"
assert new_X["W"] == 6, "X থেকে W-এ Z হয়ে যাওয়ার পথের cost 6 হওয়া উচিত ছিল!"
print("\nস্ব-যাচাই পাস: X->Z এখন 5 থেকে 2-এ নেমেছে (সরাসরি লিংকের বদলে Y-এর মাধ্যমে)।")
X-এর সরাসরি Z-এর সাথে লিংক আছে (খরচ ৫), কিন্তু Y থেকে জানার
পর X বুঝতে পারে Y হয়ে যাওয়া পথটাই সস্তা (১+১=২)। এটাই ডিসট্যান্স ভেক্টরের শক্তি —
প্রতিটি রাউটার প্রতিবেশীদের কাছ থেকে শিখে নিজের টেবিল ধীরে ধীরে উন্নত করে, এমনকি সরাসরি সংযোগ থাকলেও।
ডিসট্যান্স ভেক্টর রাউটিং সহজ ও কম মেমরি ব্যবহার করে (শুধু প্রতিবেশীর তথ্য দরকার), কিন্তু ভুল তথ্য ছড়ানো ও ধীর কনভার্জেন্সের ঝুঁকি থাকে (count-to-infinity)। L19-এ আমরা দেখব কীভাবে লিংক-স্টেট রাউটিং (OSPF) সম্পূর্ণ ভিন্ন দর্শন নিয়ে — প্রতিটি রাউটার পুরো নেটওয়ার্কের মানচিত্র রেখে — এই সমস্যাগুলো এড়ায়।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ RIP-এর সর্বোচ্চ হপ সীমা ১৫ কেন — কেন ১০০ বা ১০০০ নয়?
একটি ছোট সীমা count-to-infinity সমস্যার সময়কাল সীমিত রাখে — যদি সর্বোচ্চ ১৫ হয়, তাহলে সবচেয়ে খারাপ ক্ষেত্রেও "অসীম" (১৬)-এ পৌঁছাতে বেশি সময় লাগে না। এটি একটি ট্রেড-অফ — RIP ছোট থেকে মাঝারি আকারের নেটওয়ার্কের জন্য ডিজাইন করা হয়েছিল, যেখানে ১৫ হপের বেশি বাস্তবসম্মত রুট খুব বিরল। বড়, জটিল নেটওয়ার্কে (যেমন পুরো ইন্টারনেট) RIP ব্যবহারই করা হয় না — সেখানে OSPF (L19) বা BGP (L20) ব্যবহৃত হয়।
প্র ০২ ডিসট্যান্স ভেক্টর রাউটিং-এ একটি রাউটার কি কখনো পুরো নেটওয়ার্কের মানচিত্র জানতে পারে?
না — এটাই ডিসট্যান্স ভেক্টরের মূল বৈশিষ্ট্য (এবং সীমাবদ্ধতা)। প্রতিটি রাউটার শুধু জানে "কোন গন্তব্যে কত দূর, কোন প্রতিবেশীর দিকে" — কোন রাউটার কার সাথে সংযুক্ত তার সম্পূর্ণ ছবি কখনোই থাকে না। এই বিপরীতে, লিংক-স্টেট রাউটিং (L19)-এ প্রতিটি রাউটার সত্যিই পুরো টপোলজির মানচিত্র রাখে — এটাই দুই পদ্ধতির মৌলিক দার্শনিক পার্থক্য।
প্র ০৩
উপরের কোডে X কেন সরাসরি Z-এর সাথে সংযুক্ত থাকা সত্ত্বেও Y-এর মাধ্যমে যাওয়ার পথ বেছে নিলো?
কারণ ডিসট্যান্স ভেক্টর রাউটিং সবসময় সর্বনিম্ন মোট খরচের পথ খোঁজে, "সরাসরি সংযোগ" থাকা মানেই
"সেরা পথ" নয়। X-Z সরাসরি লিংকের খরচ ৫, কিন্তু X-Y-Z
পথের মোট খরচ মাত্র ২ (১+১)। রাউটার সবসময় প্রতিটি প্রতিবেশীর কাছ থেকে পাওয়া তথ্য দিয়ে বর্তমান সেরা পথের সাথে
তুলনা করে — সস্তা পথ পেলে সেটাই গ্রহণ করে, সংযোগ সরাসরি হোক বা না হোক।
অনুশীলন
-
চিন্তা করুন: উপরের নেটওয়ার্কে
Wরাউটার এই প্রথম রাউন্ডেX-এর দূরত্ব কত জানবে, এবং কোন প্রতিবেশীর মাধ্যমে?W-এর একমাত্র প্রতিবেশীZ(লিংক খরচ ১)।Z-এর প্রাথমিক টেবিলেX-এর দূরত্ব ৫ (সরাসরি লিংক)। তাইWহিসাব করে ১ + ৫ = ৬ —WশিখবেX-এর দূরত্ব ৬,Z-এর মাধ্যমে। (পরের রাউন্ডে,ZনিজেইY-এর মাধ্যমেX-এ পৌঁছানোর সস্তা পথ (২) শিখে ফেললে,W-ও পরে ৩-এ উন্নীত হবে — ডিসট্যান্স ভেক্টর ধীরে ধীরে, রাউন্ড-বাই-রাউন্ড কনভার্জ করে।) -
পরীক্ষা করুন: উপরের কোডে
topology["W"]-এ একটি নতুন সরাসরি লিংক"Y": 10যোগ করুন এবং Run চেপে দেখুন এটিW-এর প্রথম-রাউন্ড আপডেটে কোনো প্রভাব ফেলে কি না।হ্যাঁ, প্রভাব ফেলবে — এখন
W-এর দুটি প্রতিবেশী থাকবে (ZওY)। নতুন পথ বিবেচনা করা হবে:Y-এর মাধ্যমেX-এ পৌঁছাতে ১০+১=১১, যেটাZ-এর মাধ্যমের ৬-এর চেয়ে খারাপ, তাই সেটা গ্রহণ হবে না। কিন্তুY-এর মাধ্যমে অন্য কোনো গন্তব্যে (যেমন নিজেইY) সরাসরি একটি নতুন, সস্তা এন্ট্রি যোগ হবে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ পরবর্তী পাঠ — লিংক স্টেট রাউটিং (OSPF) — সম্পূর্ণ ভিন্ন একটি রাউটিং দর্শন দেখাবে।
- Cloud Computing & DevOps কোর্স সঙ্গী কোর্স ক্লাউড নেটওয়ার্কে রুট প্রোপাগেশন ও পিয়ারিং কীভাবে কনফিগার করা হয় তা শিখতে দেখুন।
- Cybersecurity & Ethical Hacking কোর্স সঙ্গী কোর্স অপ্রমাণিত রাউটিং আপডেট কীভাবে আক্রমণের সুযোগ তৈরি করে তা শিখতে দেখুন।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps ও Computer Networks — সব এক জায়গায়।