TCP-এর গোপন অস্ত্র: নেটওয়ার্ক ফ্লো কন্ট্রোল এবং নেটওয়ার্ক কনজেশন কন্ট্রোল

টিসিপি নির্ভরযোগ্যতা পরিবহন
একটি নির্ভরযোগ্য ট্রান্সপোর্ট প্রোটোকল হিসেবে আমরা সবাই TCP প্রোটোকলের সাথে পরিচিত, কিন্তু এটি কীভাবে ট্রান্সপোর্টের নির্ভরযোগ্যতা নিশ্চিত করে?

নির্ভরযোগ্য ট্রান্সমিশন অর্জনের জন্য ডেটা বিকৃতি, ক্ষতি, পুনরাবৃত্তি এবং শার্ডের এলোমেলো অবস্থার মতো অনেক বিষয় বিবেচনা করতে হবে। এই সমস্যাগুলো সমাধান করা না গেলে নির্ভরযোগ্য ট্রান্সমিশন অর্জন করা সম্ভব নয়।

তাই, নির্ভরযোগ্য ট্রান্সমিশন নিশ্চিত করতে TCP সিকোয়েন্স নম্বর, অ্যাকনলেজমেন্ট রিপ্লাই, রিসেন্ড কন্ট্রোল, কানেকশন ম্যানেজমেন্ট এবং উইন্ডো কন্ট্রোলের মতো কৌশল ব্যবহার করে।

এই গবেষণাপত্রে আমরা টিসিপি-র স্লাইডিং উইন্ডো, ফ্লো কন্ট্রোল এবং কনজেশন কন্ট্রোলের উপর আলোকপাত করব। রিট্রান্সমিশন মেকানিজম পরবর্তী অনুচ্ছেদে আলাদাভাবে আলোচনা করা হয়েছে।

নেটওয়ার্ক প্রবাহ নিয়ন্ত্রণ
নেটওয়ার্ক ফ্লো কন্ট্রোল বা নেটওয়ার্ক ট্র্যাফিক কন্ট্রোল আসলে প্রডিউসার এবং কনজিউমারদের মধ্যকার সূক্ষ্ম সম্পর্কেরই একটি প্রকাশ। কর্মক্ষেত্রে বা ইন্টারভিউতে আপনি সম্ভবত এই পরিস্থিতির সম্মুখীন অনেকবার হয়েছেন। যদি প্রডিউসারের উৎপাদন ক্ষমতা কনজিউমারের গ্রহণ ক্ষমতাকে ব্যাপকভাবে ছাড়িয়ে যায়, তবে কিউটি অনির্দিষ্টকালের জন্য বাড়তে থাকবে। আরও গুরুতর ক্ষেত্রে, আপনি হয়তো জানেন যে যখন RabbitMQ মেসেজ খুব বেশি পরিমাণে জমা হয়, তখন এটি পুরো MQ সার্ভারের পারফরম্যান্সের অবনতি ঘটাতে পারে। TCP-এর ক্ষেত্রেও একই কথা প্রযোজ্য; যদি এটি নিয়ন্ত্রণ না করা হয়, তবে নেটওয়ার্কে অতিরিক্ত মেসেজ চলে আসবে এবং কনজিউমাররা তাদের ধারণক্ষমতা অতিক্রম করবে, অন্যদিকে প্রডিউসাররা ডুপ্লিকেট মেসেজ পাঠাতে থাকবে, যা নেটওয়ার্কের পারফরম্যান্সকে ব্যাপকভাবে প্রভাবিত করবে।

এই পরিস্থিতি মোকাবেলার জন্য, TCP প্রেরককে প্রাপকের প্রকৃত গ্রহণ ক্ষমতার উপর ভিত্তি করে প্রেরিত ডেটার পরিমাণ নিয়ন্ত্রণ করার একটি ব্যবস্থা প্রদান করে, যা ফ্লো কন্ট্রোল নামে পরিচিত। প্রাপক একটি রিসিভ উইন্ডো এবং প্রেরক একটি সেন্ড উইন্ডো বজায় রাখে। উল্লেখ্য যে, এই উইন্ডোগুলি শুধুমাত্র একটি TCP সংযোগের জন্য প্রযোজ্য এবং সমস্ত সংযোগ একটি উইন্ডো শেয়ার করে না।

TCP একটি রিসিভ উইন্ডো ভেরিয়েবল ব্যবহারের মাধ্যমে ফ্লো কন্ট্রোল প্রদান করে। রিসিভ উইন্ডো প্রেরককে একটি ধারণা দেয় যে কী পরিমাণ ক্যাশে স্পেস এখনও উপলব্ধ আছে। প্রেরক প্রাপকের প্রকৃত গ্রহণ ক্ষমতা অনুযায়ী প্রেরিত ডেটার পরিমাণ নিয়ন্ত্রণ করে।

রিসিভার হোস্ট প্রেরককে জানিয়ে দেয় যে সে কী পরিমাণ ডেটা গ্রহণ করতে পারবে, এবং প্রেরক এই সীমা পর্যন্ত ডেটা পাঠায়। এই সীমাটিই হলো উইন্ডো সাইজ, টিসিপি হেডারের কথা মনে আছে? সেখানে একটি রিসিভ উইন্ডো ফিল্ড থাকে, যা দিয়ে বোঝানো হয় যে রিসিভার কত বাইট ডেটা গ্রহণ করতে সক্ষম বা ইচ্ছুক।

প্রেরক হোস্ট পর্যায়ক্রমে একটি উইন্ডো প্রোব প্যাকেট পাঠাবে, যা প্রাপক হোস্ট তখনও ডেটা গ্রহণ করতে সক্ষম কিনা তা শনাক্ত করতে ব্যবহৃত হয়। যখন প্রাপকের বাফার উপচে পড়ার ঝুঁকিতে থাকে, তখন প্রেরককে প্রেরিত ডেটার পরিমাণ নিয়ন্ত্রণ করার নির্দেশ দিতে উইন্ডোর আকার একটি ছোট মানে সেট করা হয়।

এখানে একটি নেটওয়ার্ক ফ্লো কন্ট্রোল ডায়াগ্রাম দেওয়া হলো:

ট্র্যাফিক নিয়ন্ত্রণ

নেটওয়ার্ক যানজট নিয়ন্ত্রণ
কনজেশন কন্ট্রোল সম্পর্কে জানার আগে, আমাদের বুঝতে হবে যে রিসিভ উইন্ডো এবং সেন্ড উইন্ডো ছাড়াও একটি কনজেশন উইন্ডোও রয়েছে, যা মূলত প্রেরক কী হারে রিসিভ উইন্ডোতে ডেটা পাঠানো শুরু করবে, সেই সমস্যা সমাধানের জন্য ব্যবহৃত হয়। সুতরাং, কনজেশন উইন্ডোটিও টিসিপি প্রেরক দ্বারা পরিচালিত হয়। কী পরিমাণ ডেটা পাঠানো উপযুক্ত হবে তা নির্ধারণ করার জন্য আমাদের একটি অ্যালগরিদম প্রয়োজন, কারণ খুব কম বা খুব বেশি ডেটা পাঠানো আদর্শ নয়, আর একারণেই কনজেশন উইন্ডোর ধারণাটি এসেছে।

পূর্ববর্তী নেটওয়ার্ক ফ্লো কন্ট্রোলে, আমরা প্রেরকের দ্বারা প্রাপকের ক্যাশে ডেটা দিয়ে পূর্ণ হওয়াটা এড়াতাম, কিন্তু নেটওয়ার্কে কী ঘটছে তা আমরা জানতাম না। সাধারণত, কম্পিউটার নেটওয়ার্কগুলো একটি শেয়ারড পরিবেশে থাকে। ফলে, অন্যান্য হোস্টের মধ্যে যোগাযোগের কারণে নেটওয়ার্কে যানজট সৃষ্টি হতে পারে।

যখন নেটওয়ার্কে অতিরিক্ত চাপ থাকে, তখন যদি ক্রমাগত বিপুল সংখ্যক প্যাকেট পাঠানো হতে থাকে, তবে তা বিলম্ব এবং প্যাকেট হারানোর মতো সমস্যা সৃষ্টি করতে পারে। এই পর্যায়ে, TCP ডেটা পুনরায় প্রেরণ করবে, কিন্তু এই পুনঃপ্রেরণ নেটওয়ার্কের উপর চাপ বাড়িয়ে দেবে, যার ফলে আরও বেশি বিলম্ব এবং আরও বেশি প্যাকেট হারানোর ঘটনা ঘটবে। এটি একটি দুষ্টচক্রে পরিণত হতে পারে এবং পরিস্থিতি ক্রমাগত আরও বড় হতে থাকবে।

সুতরাং, নেটওয়ার্কে যা ঘটছে তা TCP উপেক্ষা করতে পারে না। যখন নেটওয়ার্কে অতিরিক্ত চাপ সৃষ্টি হয়, তখন TCP তার প্রেরিত ডেটার পরিমাণ কমিয়ে দিয়ে নিজেকে উৎসর্গ করে।

তাই, কনজেশন কন্ট্রোলের প্রস্তাব করা হয়েছে, যার লক্ষ্য হলো প্রেরকের পাঠানো ডেটা দিয়ে পুরো নেটওয়ার্ক ভরে যাওয়া এড়ানো। প্রেরক কী পরিমাণ ডেটা পাঠাবে তা নিয়ন্ত্রণ করার জন্য, TCP কনজেশন উইন্ডো নামক একটি ধারণা সংজ্ঞায়িত করে। কনজেশন কন্ট্রোল অ্যালগরিদমটি নেটওয়ার্কের কনজেশনের মাত্রা অনুযায়ী কনজেশন উইন্ডোর আকার সমন্বয় করে, যাতে প্রেরকের পাঠানো ডেটার পরিমাণ নিয়ন্ত্রণ করা যায়।

কনজেশন উইন্ডো কী? সেন্ড উইন্ডোর সাথে এর সম্পর্ক কী?

কনজেশন উইন্ডো হলো প্রেরক দ্বারা পরিচালিত একটি স্টেট ভ্যারিয়েবল, যা নির্ধারণ করে প্রেরক কী পরিমাণ ডেটা পাঠাতে পারবে। নেটওয়ার্কের কনজেশন লেভেল অনুযায়ী কনজেশন উইন্ডো গতিশীলভাবে পরিবর্তিত হয়।

সেন্ডিং উইন্ডো হলো প্রেরক এবং প্রাপকের মধ্যে সম্মত একটি উইন্ডো সাইজ, যা নির্দেশ করে প্রাপক কী পরিমাণ ডেটা গ্রহণ করতে পারবে। কনজেশন উইন্ডো এবং সেন্ডিং উইন্ডো পরস্পর সম্পর্কিত; সেন্ডিং উইন্ডো সাধারণত কনজেশন এবং রিসিভিং উইন্ডোর মধ্যে সর্বনিম্নটির সমান হয়, অর্থাৎ, swnd = min(cwnd, rwnd)।

কনজেশন উইন্ডো cwnd নিম্নরূপে পরিবর্তিত হয়:

যদি নেটওয়ার্কে কোনো যানজট না থাকে, অর্থাৎ কোনো পুনঃপ্রেরণ সময়সীমা শেষ না হয়, তাহলে যানজটের পরিসর বৃদ্ধি পায়।

নেটওয়ার্কে যানজট থাকলে কনজেশন উইন্ডো সংকুচিত হয়।

প্রেরক নির্দিষ্ট সময়ের মধ্যে ACK অ্যাকনলেজমেন্ট প্যাকেটটি পেয়েছে কিনা তা পর্যবেক্ষণ করে নেটওয়ার্কটি ব্যস্ত কিনা তা নির্ধারণ করে। যদি প্রেরক নির্দিষ্ট সময়ের মধ্যে ACK অ্যাকনলেজমেন্ট প্যাকেটটি না পায়, তবে ধরে নেওয়া হয় যে নেটওয়ার্কটি ব্যস্ত।

কনজেশন উইন্ডোর পাশাপাশি, এখন টিসিপি কনজেশন কন্ট্রোল অ্যালগরিদম নিয়ে আলোচনা করার সময় এসেছে। টিসিপি কনজেশন কন্ট্রোল অ্যালগরিদম তিনটি প্রধান অংশ নিয়ে গঠিত:

ধীর শুরু:প্রাথমিকভাবে, cwnd কনজেশন উইন্ডো তুলনামূলকভাবে ছোট থাকে এবং প্রেরক নেটওয়ার্কের ধারণক্ষমতার সাথে দ্রুত খাপ খাইয়ে নেওয়ার জন্য কনজেশন উইন্ডোটিকে সূচকীয় হারে বৃদ্ধি করে।
যানজট পরিহার:কনজেশন উইন্ডো একটি নির্দিষ্ট সীমা অতিক্রম করার পর, প্রেরক এর বৃদ্ধির হার কমাতে এবং নেটওয়ার্কের উপর অতিরিক্ত চাপ এড়াতে কনজেশন উইন্ডোটিকে রৈখিকভাবে বাড়িয়ে দেয়।
দ্রুত আরোগ্য:যদি কনজেশন ঘটে, তাহলে প্রেরক কনজেশন উইন্ডো অর্ধেক করে দেয় এবং প্রাপ্ত ডুপ্লিকেট অ্যাকগুলোর মাধ্যমে নেটওয়ার্ক পুনরুদ্ধারের অবস্থান নির্ধারণ করতে ফাস্ট রিকভারি স্টেটে প্রবেশ করে, এবং তারপর কনজেশন উইন্ডো বাড়ানো অব্যাহত রাখে।

ধীর শুরু
যখন একটি TCP সংযোগ স্থাপন করা হয়, তখন কনজেশন উইন্ডো cwnd প্রাথমিকভাবে সর্বনিম্ন MSS (সর্বোচ্চ সেগমেন্ট সাইজ) মানে সেট করা হয়। এইভাবে, প্রাথমিক প্রেরণের হার প্রায় MSS/RTT বাইট/সেকেন্ড হয়। প্রকৃত উপলব্ধ ব্যান্ডউইথ সাধারণত MSS/RTT-এর চেয়ে অনেক বেশি হয়, তাই TCP সর্বোত্তম প্রেরণের হার খুঁজে বের করতে চায়, যা স্লো-স্টার্টের মাধ্যমে অর্জন করা যেতে পারে।

স্লো-স্টার্ট প্রক্রিয়ায়, কনজেশন উইন্ডো cwnd-এর মান 1 MSS-এ ইনিশিয়ালাইজ করা হবে এবং প্রতিবার প্রেরিত প্যাকেট সেগমেন্ট অ্যাকনলেজড হলে, cwnd-এর মান এক MSS করে বাড়ানো হবে, অর্থাৎ cwnd-এর মান 2 MSS হয়ে যাবে। এরপর, প্রতিটি সফল প্যাকেট সেগমেন্ট প্রেরণের জন্য cwnd-এর মান দ্বিগুণ করা হবে এবং এই প্রক্রিয়া চলতে থাকবে। এই নির্দিষ্ট বৃদ্ধির প্রক্রিয়াটি নিচের চিত্রে দেখানো হয়েছে।

 নেটওয়ার্ক যানজট নিয়ন্ত্রণ

তবে, পাঠানোর হার সবসময় বাড়তে পারে না; এই বৃদ্ধিকে কোনো এক সময় থামতেই হয়। তাহলে, পাঠানোর হারের এই বৃদ্ধি কখন শেষ হয়? স্লো-স্টার্ট সাধারণত কয়েকটি উপায়ের মধ্যে কোনো একটির মাধ্যমে পাঠানোর হারের বৃদ্ধিকে থামিয়ে দেয়:

প্রথম উপায়টি হলো স্লো-স্টার্ট পাঠানোর প্রক্রিয়ার সময় প্যাকেট লস হওয়া। যখন প্যাকেট লস ঘটে, তখন TCP প্রেরকের কনজেশন উইন্ডো cwnd-কে ১-এ সেট করে এবং স্লো-স্টার্ট প্রক্রিয়াটি পুনরায় শুরু করে। এই পর্যায়ে, স্লো-স্টার্ট থ্রেশহোল্ড ssthresh নামক একটি ধারণা প্রবর্তন করা হয়েছে, যার প্রাথমিক মান হলো প্যাকেট লস সৃষ্টিকারী cwnd-এর মানের অর্ধেক। অর্থাৎ, যখন কনজেশন শনাক্ত করা হয়, তখন ssthresh-এর মান উইন্ডো মানের অর্ধেক হয়।

দ্বিতীয় উপায়টি হলো স্লো-স্টার্ট থ্রেশহোল্ড ssthresh-এর মানের সাথে সরাসরি সম্পর্ক স্থাপন করা। যেহেতু কনজেশন শনাক্ত হলে ssthresh-এর মান উইন্ডো ভ্যালুর অর্ধেক হয়, তাই cwnd-এর মান ssthresh-এর চেয়ে বেশি হলে প্রতিবার দ্বিগুণ হওয়ার সাথে সাথে প্যাকেট লস হতে পারে। অতএব, cwnd-কে ssthresh-এর সমান সেট করাই সর্বোত্তম, যা TCP-কে কনজেশন কন্ট্রোল মোডে নিয়ে যাবে এবং স্লো-স্টার্ট বন্ধ করে দেবে।

স্লো স্টার্ট শেষ হওয়ার সর্বশেষ উপায়টি হলো, যদি তিনটি অপ্রয়োজনীয় ACK প্যাকেট শনাক্ত করা হয়, তাহলে TCP একটি দ্রুত পুনঃপ্রেরণ (fast retransmission) সম্পাদন করে এবং রিকভারি স্টেটে (recovery state) প্রবেশ করে। (যদি তিনটি ACK প্যাকেট থাকার কারণটি স্পষ্ট না হয়, তবে তা পুনঃপ্রেরণ প্রক্রিয়ায় (retransmission mechanism) আলাদাভাবে ব্যাখ্যা করা হবে।)

যানজট এড়ানো
যখন TCP কনজেশন কন্ট্রোল স্টেটে প্রবেশ করে, তখন cwnd-কে কনজেশন থ্রেশহোল্ড ssthresh-এর অর্ধেকে সেট করা হয়। এর মানে হলো, প্রতিবার একটি প্যাকেট সেগমেন্ট গ্রহণ করার সময় cwnd-এর মান দ্বিগুণ হতে পারে না। পরিবর্তে, একটি তুলনামূলকভাবে রক্ষণশীল পদ্ধতি গ্রহণ করা হয়, যেখানে প্রতিটি ট্রান্সমিশন সম্পন্ন হওয়ার পরে cwnd-এর মান শুধুমাত্র এক MSS (সর্বোচ্চ প্যাকেট সেগমেন্ট দৈর্ঘ্য) দ্বারা বৃদ্ধি পায়। উদাহরণস্বরূপ, এমনকি যদি ১০টি প্যাকেট সেগমেন্ট অ্যাকনলেজ করা হয়, তবুও cwnd-এর মান শুধুমাত্র এক MSS বৃদ্ধি পাবে। এটি একটি রৈখিক বৃদ্ধি মডেল এবং এর বৃদ্ধির একটি ঊর্ধ্বসীমাও রয়েছে। যখন প্যাকেট লস ঘটে, তখন cwnd-এর মান একটি MSS-এ পরিবর্তিত হয় এবং ssthresh-এর মান cwnd-এর অর্ধেকে সেট করা হয়। অথবা, ৩টি রিডানড্যান্ট ACK রেসপন্স পেলে এটি MSS-এর বৃদ্ধিও থামিয়ে দেবে। cwnd-এর মান অর্ধেক করার পরেও যদি তিনটি রিডানড্যান্ট ACK পাওয়া যায়, তবে ssthresh-এর মান cwnd-এর অর্ধেক হিসাবে রেকর্ড করা হয় এবং ফাস্ট রিকভারি স্টেটে প্রবেশ করা হয়।

দ্রুত পুনরুদ্ধার
ফাস্ট রিকভারি অবস্থায়, প্রাপ্ত প্রতিটি রিডান্ড্যান্ট ACK (অর্থাৎ, যে ACK ক্রমানুসারে আসে না)-এর জন্য কনজেশন উইন্ডো cwnd-এর মান এক MSS করে বৃদ্ধি করা হয়। এর উদ্দেশ্য হলো নেটওয়ার্কে সফলভাবে প্রেরিত প্যাকেট সেগমেন্টগুলোকে ব্যবহার করে ট্রান্সমিশন দক্ষতা যথাসম্ভব উন্নত করা।

যখন হারিয়ে যাওয়া প্যাকেট সেগমেন্টের ACK আসে, তখন TCP, cwnd-এর মান কমিয়ে দেয় এবং কনজেশন এভয়ডেন্স স্টেটে প্রবেশ করে। এর উদ্দেশ্য হলো কনজেশন উইন্ডোর আকার নিয়ন্ত্রণ করা এবং নেটওয়ার্ক কনজেশন আরও বেড়ে যাওয়া রোধ করা।

কনজেশন কন্ট্রোল স্টেটের পরে যদি টাইমআউট ঘটে, তাহলে নেটওয়ার্কের অবস্থা আরও গুরুতর হয়ে ওঠে এবং TCP কনজেশন অ্যাভয়ডেন্স স্টেট থেকে স্লো-স্টার্ট স্টেটে চলে যায়। এক্ষেত্রে, কনজেশন উইন্ডো cwnd-এর মান সর্বোচ্চ প্যাকেট সেগমেন্ট দৈর্ঘ্য MSS-এর সমান এবং স্লো-স্টার্ট থ্রেশহোল্ড ssthresh-এর মান cwnd-এর অর্ধেকের সমান সেট করা হয়। এর উদ্দেশ্য হলো, নেটওয়ার্ক স্বাভাবিক অবস্থায় ফিরে আসার পর ট্রান্সমিশন রেট এবং নেটওয়ার্ক কনজেশনের মাত্রার মধ্যে ভারসাম্য আনার জন্য কনজেশন উইন্ডোর আকার পুনরায় ক্রমান্বয়ে বাড়ানো।

সারসংক্ষেপ
একটি নির্ভরযোগ্য ট্রান্সপোর্ট প্রোটোকল হিসেবে, TCP সিকোয়েন্স নম্বর, অ্যাকনলেজমেন্ট, রিট্রান্সমিশন কন্ট্রোল, কানেকশন ম্যানেজমেন্ট এবং উইন্ডো কন্ট্রোলের মাধ্যমে নির্ভরযোগ্য ট্রান্সপোর্ট বাস্তবায়ন করে। এদের মধ্যে, ফ্লো কন্ট্রোল মেকানিজম প্রাপকের প্রকৃত গ্রহণ ক্ষমতা অনুযায়ী প্রেরকের পাঠানো ডেটার পরিমাণ নিয়ন্ত্রণ করে, যা নেটওয়ার্ক কনজেশন এবং পারফরম্যান্সের অবনতির সমস্যা এড়িয়ে চলে। কনজেশন কন্ট্রোল মেকানিজম প্রেরকের পাঠানো ডেটার পরিমাণ সমন্বয় করে নেটওয়ার্ক কনজেশন ঘটা এড়িয়ে চলে। কনজেশন উইন্ডো এবং সেন্ডিং উইন্ডোর ধারণা দুটি একে অপরের সাথে সম্পর্কিত, এবং কনজেশন উইন্ডোর আকার গতিশীলভাবে সমন্বয় করার মাধ্যমে প্রেরকের কাছে ডেটার পরিমাণ নিয়ন্ত্রণ করা হয়। স্লো স্টার্ট, কনজেশন অ্যাভয়ডেন্স এবং ফাস্ট রিকভারি হলো TCP কনজেশন কন্ট্রোল অ্যালগরিদমের তিনটি প্রধান অংশ, যা নেটওয়ার্কের ধারণক্ষমতা এবং কনজেশনের মাত্রার সাথে খাপ খাইয়ে নিতে বিভিন্ন কৌশলের মাধ্যমে কনজেশন উইন্ডোর আকার সমন্বয় করে।

পরবর্তী অংশে আমরা TCP-এর রিট্রান্সমিশন মেকানিজম বিস্তারিতভাবে আলোচনা করব। নির্ভরযোগ্য ডেটা ট্রান্সমিশন অর্জনের জন্য রিট্রান্সমিশন মেকানিজম TCP-এর একটি গুরুত্বপূর্ণ অংশ। এটি হারিয়ে যাওয়া, বিকৃত বা বিলম্বিত ডেটা পুনরায় প্রেরণের মাধ্যমে ডেটার নির্ভরযোগ্য ট্রান্সমিশন নিশ্চিত করে। পরবর্তী অংশে রিট্রান্সমিশন মেকানিজমের বাস্তবায়ন নীতি এবং কৌশল বিস্তারিতভাবে আলোচনা ও বিশ্লেষণ করা হবে। সাথেই থাকুন!


পোস্ট করার সময়: ২৪ ফেব্রুয়ারি, ২০২৫