TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #381 211
🚀 الگوریتم Leaky Bucket

🔹 تعریف:
الگوریتم Leaky Bucket یکی از الگوریتم‌های Traffic Shaping (شکل‌دهی به ترافیک شبکه) است که وظیفه دارد جریان داده‌ها در شبکه را کنترل و هموارسازی (regulate) کند.

در این روش، بسته‌های ورودی (packets) در یک بافر با اندازه‌ی ثابت (سطل) ذخیره می‌شوند و سپس با نرخ ثابتی از سطل خارج و به شبکه ارسال می‌گردند.
اگر بافر پر شود، بسته‌های اضافی دور انداخته می‌شوند (discarded).

📊 ویژگی‌ها:

✅ هموارسازی ترافیک ناگهانی (bursty traffic) با ارسال در نرخ ثابت
✅ حذف بسته‌های اضافی در صورت پر شدن بافر
مثال: اگر هاستی در حالت عادی با نرخ ۳ Mbps متعهد است، الگوریتم تضمین می‌کند حتی در زمان ارسال ناگهانی داده‌ها، نرخ خروجی از ۳ Mbps بیشتر نشود.

⚙️ نحوه‌ی کار الگوریتم Leaky Bucket:

الگوریتم Leaky Bucket معمولاً از یک صف (First In, First Out) FIFOبرای مدیریت بسته‌ها استفاده می‌کند.

🔸 برای بسته‌های با اندازه‌ی ثابت:
در هر تیک ساعت (Clock Tick)، تعداد ثابتی از بسته‌ها از صف حذف و ارسال می‌شوند.

🔸 برای بسته‌های با اندازه‌ی متغیر (Variable-size packets):
ارسال داده‌ها بر اساس یک نرخ ثابت بر حسب بایت یا بیت در ثانیه انجام می‌شود.

🧠 شبه‌کد الگوریتم برای بسته‌های با طول متغیر:

1️⃣ مقدار شمارنده (counter) را در هر تیک ساعت برابر n مقداردهی کن.
2️⃣ تا زمانی که n بزرگ‌تر از اندازه‌ی بسته‌ی موجود در سر صف است:
• بسته‌ای از ابتدای صف خارج کن (P)
• بسته P را به شبکه ارسال کن
• شمارنده را به اندازه‌ی سایز بسته کاهش بده
3️⃣ در تیک بعدی ساعت، مقدار شمارنده را مجدداً برابر n قرار بده و مرحله 1 را تکرار کن.


📦 مثال عددی:
فرض کنید:
n = 1000
و اندازه‌ی بسته‌های موجود در صف به ترتیب:
200, 400, 450 بایت هستند.

🔹 مرحله 1️⃣:
چون n > 200 → بسته ۲۰۰ بایتی ارسال می‌شود.
n = 1000 - 200 = 800

🔹 مرحله 2️⃣:
چون n > 400 → بسته ۴۰۰ بایتی ارسال می‌شود.
n = 800 - 400 = 400

🔹 مرحله 3️⃣:
چون n < 450 → الگوریتم در این تیک متوقف می‌شود.

در تیک بعدی ساعت، n مجدداً برابر ۱۰۰۰ شده و فرآیند از ابتدا تکرار می‌شود تا زمانی که همه‌ی بسته‌ها ارسال شوند.


🚀 Leaky Bucket Algorithm – C# Implementation

در ادامه‌ی توضیح الگوریتم، اینجا پیاده‌سازی کامل اون رو در زبان #C می‌بینیم 👇
💻 کد:
// C# Implementation of Leaking Bucket Algorithm
using System;

class LeakingBucket
{
static void Main(string[] args)
{
int no_of_queries, storage, output_pkt_size;
int input_pkt_size, bucket_size, size_left;

// Initial packets in the bucket
storage = 0;

// Total number of times bucket content is checked
no_of_queries = 4;

// Total number of packets that can be accommodated in the bucket
bucket_size = 10;

// Number of packets that enter the bucket at a time
input_pkt_size = 4;

// Number of packets that exit the bucket at a time
output_pkt_size = 1;

for (int i = 0; i < no_of_queries; i++)
{
size_left = bucket_size - storage; // space left in the bucket

if (input_pkt_size <= size_left)
{
storage += input_pkt_size;
}
else
{
Console.WriteLine("Packet loss = " + input_pkt_size);
}

Console.WriteLine($"Buffer size = {storage} out of bucket size = {bucket_size}");

// Sending packets out of the bucket
storage -= output_pkt_size;
}
}
}


🚀 Leaky Bucket Algorithm – Output & Comparison

💻 خروجی برنامه:
Buffer size= 4 out of bucket size= 10  
Buffer size= 7 out of bucket size= 10
Buffer size= 10 out of bucket size= 10
Packet loss = 4
Buffer size= 9 out of bucket size= 10
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →