পাঠ ৪২ · ৫৭-এর মধ্যে · মডিউল ৯
Home / Courses / Computer Networks / লেটেন্সি ও থ্রুপুট

লেটেন্সি, ব্যান্ডউইথ, থ্রুপুট ও জিটার

Latency, bandwidth, throughput & jitter
৮ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • লেটেন্সির তিনটি উপাদান — propagation, transmission, processing/queuing delay — আলাদা করে চেনা
  • ব্যান্ডউইথ ও থ্রুপুটের পার্থক্য ও কেন থ্রুপুট প্রায়ই ব্যান্ডউইথের চেয়ে কম হয়
  • জিটার কী, কেন এটি রিয়েল-টাইম যোগাযোগে সমস্যা করে, ও jitter buffer কীভাবে সাহায্য করে
  • Bandwidth-Delay Product গণনা করা ও এর ব্যবহারিক গুরুত্ব — Python দিয়ে সরাসরি হিসাব

১ · লেটেন্সি কী ও এর উপাদান

কোনো ডেটা এক প্রান্ত থেকে অন্য প্রান্তে পৌঁছাতে যে সময় লাগে, তাকে লেটেন্সি বলে। এটি এক দিকের (one-way) হতে পারে, অথবা RTTRound-Trip Timeএকটি প্যাকেট গন্তব্যে পৌঁছে জবাব ফিরে আসতে মোট যে সময় লাগে — ping কমান্ড এটিই মাপে। — সেখানে গিয়ে জবাব ফিরে আসার সম্পূর্ণ সময়। লেটেন্সি তিনটি প্রধান উপাদানের যোগফল —

Propagation Delay
ভৌত দূরত্ব ÷ সংকেতের গতি (যেমন ফাইবারে আলোর গতি) — শুধু দূরত্বের উপর নির্ভরশীল, ডেটার আকারের উপর নয়।
Transmission Delay
প্যাকেট সাইজ ÷ ব্যান্ডউইথ — পুরো প্যাকেটটি তারে/মাধ্যমে "ঠেলে" দিতে কত সময় লাগে।
Processing/Queuing Delay
প্রতিটি রাউটার হপে প্যাকেট প্রসেস করতে ও কিউতে অপেক্ষা করতে যে সময় লাগে (M9/L43-এ বিস্তারিত)।
Propagation Delay Transmission Delay Processing/Queuing Delay মোট লেটেন্সি (one-way)
তিনটি স্বতন্ত্র ডিলে যোগ হয়ে একটি প্যাকেটের মোট এক-দিকের লেটেন্সি তৈরি করে।

২ · ব্যান্ডউইথ বনাম থ্রুপুট

ব্যান্ডউইথ হলো একটি লিংক বা চ্যানেলের তাত্ত্বিক সর্বোচ্চ ডেটা রেট (M2/L06-এ আলোচিত) — এটি মাধ্যমের একটি ভৌত/ডিজাইন সীমা। কিন্তু থ্রুপুটThroughputএকটি লিংকে বাস্তবে অর্জিত ডেটা রেট — প্রোটোকল ওভারহেড, কনজেশন, বা অন্য বটলনেকের কারণে এটি প্রায়ই ব্যান্ডউইথের চেয়ে কম হয়। হলো বাস্তবে যা অর্জিত হয় — এটি সবসময় ব্যান্ডউইথের সমান বা কম, কখনোই বেশি নয়। উদাহরণস্বরূপ, একটি ১০০ Mbps সংযোগে TCP/IP হেডার ওভারহেড, প্যাকেট লস, বা অন্য ডিভাইসের সাথে ব্যান্ডউইথ শেয়ারিংয়ের কারণে বাস্তব থ্রুপুট হয়তো ৮৫ Mbps-ই হবে — এটি একটি অত্যন্ত সাধারণ বিভ্রান্তির জায়গা, কারণ কথ্য ভাষায় প্রায়ই "ব্যান্ডউইথ" বলতে থ্রুপুট বোঝানো হয়।

মূল অন্তর্দৃষ্টি

একটি ISP আপনাকে "১০০ Mbps" প্ল্যান বিক্রি করলে সেটি ব্যান্ডউইথের সীমা — বাস্তব থ্রুপুট নেটওয়ার্ক কনজেশন, ওয়াই-ফাই সিগন্যাল, বা একসাথে সংযুক্ত অন্য ডিভাইসের উপর নির্ভর করে ওঠানামা করতে পারে। "স্পিড টেস্ট" আসলে থ্রুপুট মাপে, ব্যান্ডউইথ নয়।

৩ · জিটার

জিটার মানে ধারাবাহিক প্যাকেটের লেটেন্সিতে তারতম্য — একটি প্যাকেট ২০ms-এ পৌঁছালো, পরেরটি ৮০ms-এ, তার পরেরটি ৩০ms-এ। গড় লেটেন্সি হয়তো গ্রহণযোগ্য পর্যায়ে থাকলেও, এই অসামঞ্জস্য ভয়েস/ভিডিও কলে বিশেষভাবে ক্ষতিকর — কারণ অডিও/ভিডিও স্ট্রিমের প্রতিটি ফ্রেম একটি নির্দিষ্ট, নিয়মিত সময়ের ব্যবধানে প্লে হওয়ার কথা; অনিয়মিত আগমন শ্রবণযোগ্য বা দৃশ্যমান গ্লিচ তৈরি করে। এই সমস্যা প্রশমিত করতে jitter buffer ব্যবহার করা হয় — গ্রাহক পাশে ইচ্ছাকৃতভাবে একটি ছোট অতিরিক্ত দেরি যোগ করে প্যাকেটগুলোকে সাময়িক বাফারে জমা করে, তারপর নিয়মিত বিরতিতে প্লে করে — এতে সামগ্রিক লেটেন্সি সামান্য বাড়ে কিন্তু প্লেব্যাক মসৃণ হয়।

লক্ষ্য করুন — জিটার বাফার লেটেন্সি *কমায় না*, বরং ইচ্ছাকৃতভাবে সামান্য বাড়িয়ে দেয় যাতে তারতম্য শোষণ করা যায়। এটি একটি সচেতন ট্রেড-অফ: সামান্য বেশি বিলম্ব মেনে নিয়ে অনেক বেশি মসৃণ প্লেব্যাক পাওয়া।

৪ · Bandwidth-Delay Product (BDP)

একটি লিংকে যেকোনো মুহূর্তে সর্বোচ্চ কত ডেটা "ইন-ফ্লাইট" (পাঠানো হয়েছে কিন্তু এখনও গ্রাহকে পৌঁছায়নি বা তার ACK ফিরে আসেনি) থাকতে পারে, তা বলে দেয় Bandwidth-Delay Product (BDP)Bandwidth-Delay Productব্যান্ডউইথ × RTT — একটি লিংকে একসাথে কত বিট "পাইপের ভেতরে" থাকতে পারে তার পরিমাপ। —

$$BDP = bandwidth \times RTT$$

এই সংখ্যাটি সরাসরি বলে দেয় TCP-এর sending windowSliding WindowM5/L26-এ আলোচিত — সেন্ডার একসাথে যত বাইট আনঅ্যাকনলেজড রেখে পাঠাতে পারে তার সীমা। কত বড় হওয়া দরকার একটি লিংক পুরোপুরি ব্যবহার করতে (M5/L26-এর সরাসরি সম্প্রসারণ) — যদি উইন্ডো BDP-এর চেয়ে ছোট হয়, সেন্ডার ACK-এর জন্য অপেক্ষা করে অলস বসে থাকবে, লিংকের পূর্ণ ক্ষমতা কখনোই ব্যবহার হবে না।

Python
# Bandwidth-Delay Product (BDP) — ব্যান্ডউইথ x RTT
def bandwidth_delay_product(bandwidth_bps, rtt_seconds):
    """BDP = ব্যান্ডউইথ (bits/sec) x RTT (sec) -> কত বিট 'ইন-ফ্লাইট' থাকতে পারে"""
    bits = bandwidth_bps * rtt_seconds
    bytes_ = bits / 8
    kb = bytes_ / 1024
    mb = kb / 1024
    return bits, bytes_, kb, mb

# --- সাধারণ টেরেস্ট্রিয়াল লিংক: 100 Mbps, RTT 50ms ---
bandwidth1 = 100_000_000   # 100 Mbps -> বিট/সেকেন্ড
rtt1 = 0.050               # 50ms -> সেকেন্ড
bits1, bytes1, kb1, mb1 = bandwidth_delay_product(bandwidth1, rtt1)

print("টেরেস্ট্রিয়াল লিংক (100 Mbps, RTT 50ms):")
print(f"  BDP = {bandwidth1:,} bits/sec x {rtt1} sec = {bits1:,.0f} bits")
print(f"       = {bytes1:,.0f} bytes ~= {kb1:,.1f} KB")

# --- স্যাটেলাইট লিংক: ব্যান্ডউইথ কম, কিন্তু RTT অনেক বেশি ---
bandwidth2 = 20_000_000   # 20 Mbps
rtt2 = 0.600              # 600ms -- জিওস্টেশনারি স্যাটেলাইটের বৈশিষ্ট্যসূচক RTT
bits2, bytes2, kb2, mb2 = bandwidth_delay_product(bandwidth2, rtt2)

print("\nস্যাটেলাইট লিংক (20 Mbps, RTT 600ms):")
print(f"  BDP = {bandwidth2:,} bits/sec x {rtt2} sec = {bits2:,.0f} bits")
print(f"       = {bytes2:,.0f} bytes ~= {kb2:,.1f} KB (~= {mb2:,.2f} MB)")

print("\nকম ব্যান্ডউইথ হওয়া সত্ত্বেও স্যাটেলাইট লিংকের BDP বড় (শুধু উচ্চ RTT-এর কারণে)?", bits2 > bits1)

    
মূল কথা · Key takeaway

স্যাটেলাইট লিংকের ব্যান্ডউইথ (২০ Mbps) টেরেস্ট্রিয়াল লিংকের (১০০ Mbps) চেয়ে অনেক কম হলেও, RTT-এর বিশাল পার্থক্যের (৬০০ms বনাম ৫০ms) কারণে এর BDP আসলে বড়। এই কারণেই উচ্চ-লেটেন্সি লিংকে (যেমন স্যাটেলাইট ইন্টারনেট) পূর্ণ থ্রুপুট পেতে অস্বাভাবিক বড় TCP উইন্ডো প্রয়োজন হয় — শুধু "বেশি ব্যান্ডউইথ কেনা" যথেষ্ট নয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ আপনার ISP "১০০ Mbps" বিজ্ঞাপন দিলেও স্পিড টেস্টে ৮৫ Mbps দেখাচ্ছে — এটি কি প্রতারণা?

সাধারণত না। "১০০ Mbps" হলো লিংকের ব্যান্ডউইথ সীমা — একটি তাত্ত্বিক সর্বোচ্চ। বাস্তব থ্রুপুট সবসময় এর সমান বা কম হবে, কারণ প্রোটোকল হেডার ওভারহেড (TCP/IP হেডার নিজেই কিছু বিট ব্যবহার করে), সাময়িক নেটওয়ার্ক কনজেশন, বা ওয়াই-ফাই সিগন্যাল দুর্বলতার কারণে কিছুটা ক্ষতি স্বাভাবিক। অস্বাভাবিকভাবে বেশি ফারাক (যেমন ৫০%-এর বেশি) হলে অবশ্যই তদন্তযোগ্য।

প্র ০২ স্যাটেলাইট ইন্টারনেটে ব্যান্ডউইথ বাড়ালেই কি সমস্যা সমাধান হবে, নাকি অন্য কিছু দরকার?

শুধু ব্যান্ডউইথ বাড়ানো যথেষ্ট নয়। স্যাটেলাইট লিংকের সমস্যা মূলত এর উচ্চ RTT (৬০০ms-এর মতো) থেকে আসা বড় BDP — যদি TCP-এর sending window এই BDP-এর সমান বা বড় না হয়, সেন্ডার লিংকের পূর্ণ ক্ষমতা ব্যবহার করতে পারবে না, ব্যান্ডউইথ যতই বাড়ানো হোক না কেন। তাই বড় BDP-এর লিংকে বড় TCP উইন্ডো (window scaling, M5/L26) কনফিগার করাটাও সমান গুরুত্বপূর্ণ।

প্র ০৩ একটি ভিডিও কলে গড় লেটেন্সি মাত্র ৫০ms হলেও কল "কাটাকাটা" শোনাচ্ছে কেন হতে পারে?

এটি সম্ভবত জিটারের সমস্যা, গড় লেটেন্সির নয়। গড় ৫০ms ভালো হলেও যদি প্যাকেট কখনো ২০ms, কখনো ১৫০ms, কখনো ৩০ms দেরিতে আসে (উচ্চ তারতম্য/জিটার), তাহলে অডিও/ভিডিও ফ্রেম নিয়মিত বিরতিতে প্লে হতে পারে না — এটিই "কাটাকাটা" শোনানোর কারণ। সমাধান: একটি বড় jitter buffer, যদিও এটি সামগ্রিক লেটেন্সি সামান্য বাড়িয়ে দেয়।

অনুশীলন

  1. চিন্তা করুন: আপনার বাসার ওয়াই-ফাই-তে একটি ভিডিও কল করার সময় মাঝেমধ্যে অডিও কেটে যায়, যদিও ইন্টারনেট স্পিড টেস্ট সবসময় ভালো ফলাফল দেখায়। এটি লেটেন্সি, থ্রুপুট, নাকি জিটারের সমস্যা হতে পারে বলে মনে হয়?

    স্পিড টেস্ট (থ্রুপুট) ভালো হওয়া সত্ত্বেও কল মাঝেমধ্যে কেটে যাওয়া সাধারণত জিটার-এর লক্ষণ — নেটওয়ার্ক গড়ে যথেষ্ট দ্রুত হলেও প্যাকেটের আগমনের ব্যবধান অনিয়মিত থাকলে রিয়েল-টাইম অডিও/ভিডিও স্ট্রিমে গ্লিচ দেখা দেয়, কারণ স্পিড টেস্ট শুধু গড় থ্রুপুট মাপে, তারতম্য নয়।

  2. পরীক্ষা করুন: উপরের কোড সেলে bandwidth1 ও rtt1-এর মান বদলে (যেমন ব্যান্ডউইথ দ্বিগুণ, RTT অর্ধেক করে) দেখুন BDP কীভাবে পরিবর্তিত হয়।

    ব্যান্ডউইথ দ্বিগুণ করলে বা RTT দ্বিগুণ করলে BDP-ও ঠিক দ্বিগুণ হবে — কারণ BDP সরাসরি (linearly) দুটি মানের গুণফল। ব্যান্ডউইথ অর্ধেক ও RTT দ্বিগুণ করলে BDP অপরিবর্তিত থাকবে, কারণ একটি বৃদ্ধি অন্যটির হ্রাসকে ঠিক প্রতিসাম্যভাবে কাটাকাটি করে দেয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
মোবাইল IP ও হ্যান্ডঅফ