নেটওয়ার্ক প্যাকেট ব্রোকার টিসিপি সংযোগের মূল রহস্য: ট্রিপল হ্যান্ডশেকের প্রয়োজনীয়তার ব্যাখ্যা

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

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

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

 টিসিপি থ্রি-ওয়ে হ্যান্ডশেক

চলুন প্রতিটি সংযোগে পাঠানো TCP প্যাকেটগুলো আরও ভালোভাবে খতিয়ে দেখি।

প্রাথমিকভাবে, ক্লায়েন্ট এবং সার্ভার উভয়ই বন্ধ থাকে। প্রথমে, সার্ভার একটি পোর্টে সক্রিয়ভাবে শোনে এবং LISTEN অবস্থায় থাকে, যার অর্থ সার্ভারটি অবশ্যই চালু থাকতে হবে। এরপর, ক্লায়েন্ট ওয়েবপেজটি অ্যাক্সেস করার জন্য প্রস্তুত হয়। এটিকে সার্ভারের সাথে একটি সংযোগ স্থাপন করতে হয়। প্রথম সংযোগ প্যাকেটের ফরম্যাটটি নিম্নরূপ:

 SYN প্যাকেট

যখন কোনো ক্লায়েন্ট একটি সংযোগ শুরু করে, তখন এটি একটি র‍্যান্ডম প্রাথমিক সিকোয়েন্স নম্বর (client_isn) তৈরি করে এবং সেটিকে TCP হেডারের "Sequence number" ফিল্ডে রাখে। একই সময়ে, ক্লায়েন্ট SYN ফ্ল্যাগের অবস্থান ১-এ সেট করে এটা বোঝাতে যে প্রেরিত প্যাকেটটি একটি SYN প্যাকেট। ক্লায়েন্ট সার্ভারের কাছে প্রথম SYN প্যাকেটটি পাঠিয়ে সার্ভারের সাথে সংযোগ স্থাপনের ইচ্ছা প্রকাশ করে। এই প্যাকেটে অ্যাপ্লিকেশন লেয়ারের ডেটা (অর্থাৎ, প্রেরিত ডেটা) থাকে না। এই পর্যায়ে, ক্লায়েন্টের স্ট্যাটাস SYN-SENT হিসেবে চিহ্নিত করা হয়।

SYN+ACK প্যাকেট

যখন একটি সার্ভার কোনো ক্লায়েন্টের কাছ থেকে একটি SYN প্যাকেট গ্রহণ করে, তখন এটি এলোমেলোভাবে তার নিজস্ব সিরিয়াল নম্বর (server_isn) তৈরি করে এবং তারপর সেই নম্বরটি TCP হেডারের "Serial number" ফিল্ডে রাখে। এরপর, সার্ভার "Acknowledgement number" ফিল্ডে client_isn + 1 প্রবেশ করায় এবং SYN ও ACK উভয় বিটকে 1-এ সেট করে। সবশেষে, সার্ভার প্যাকেটটি ক্লায়েন্টের কাছে পাঠিয়ে দেয়, যেটিতে কোনো অ্যাপ্লিকেশন-লেয়ার ডেটা থাকে না (এবং সার্ভারের পাঠানোর মতোও কোনো ডেটা থাকে না)। এই সময়ে, সার্ভারটি SYN-RCVD অবস্থায় থাকে।

ACK প্যাকেট

ক্লায়েন্ট সার্ভার থেকে প্যাকেটটি পাওয়ার পর, চূড়ান্ত উত্তর প্যাকেটের প্রতিক্রিয়া জানাতে তাকে নিম্নলিখিত অপ্টিমাইজেশনগুলি সম্পাদন করতে হয়: প্রথমত, ক্লায়েন্ট উত্তর প্যাকেটের TCP হেডারের ACK বিটটিকে 1-এ সেট করে; দ্বিতীয়ত, ক্লায়েন্ট "Confirm answer number" ফিল্ডে server_isn + 1 মানটি প্রবেশ করায়; সবশেষে, ক্লায়েন্ট প্যাকেটটি সার্ভারে পাঠিয়ে দেয়। এই প্যাকেটটি ক্লায়েন্ট থেকে সার্ভারে ডেটা বহন করতে পারে। এই অপারেশনগুলি সম্পন্ন হলে, ক্লায়েন্ট ESTABLISHED অবস্থায় প্রবেশ করবে।

সার্ভার ক্লায়েন্টের কাছ থেকে প্রত্যুত্তর প্যাকেট গ্রহণ করার সাথে সাথে এটিও ESTABLISHED অবস্থায় চলে যায়।

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

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

থ্রি-ওয়ে হ্যান্ডশেক কার্যকরভাবে ঐতিহাসিকভাবে পুনরাবৃত্ত সংযোগগুলির সূচনা এড়াতে পারে (মূল কারণ)।
ত্রিমুখী হ্যান্ডশেক নিশ্চিত করে যে উভয় পক্ষই একটি নির্ভরযোগ্য প্রাথমিক ক্রমিক নম্বর পেয়েছে।
ত্রিমুখী করমর্দন সম্পদের অপচয় রোধ করে।

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

ত্রিমুখী হ্যান্ডশেক ঐতিহাসিক সদৃশ সংযোগ এড়িয়ে চলে

যখন কোনো ক্লায়েন্ট পরপর একাধিক SYN সংযোগ স্থাপন প্যাকেট পাঠায়, তখন নেটওয়ার্কের যানজটের মতো পরিস্থিতিতে নিম্নলিখিত ঘটনাগুলো ঘটতে পারে:

১- পুরোনো SYN প্যাকেটগুলো সর্বশেষ SYN প্যাকেটগুলোর আগে সার্ভারে এসে পৌঁছায়।
২- সার্ভারটি পুরোনো SYN প্যাকেটটি পাওয়ার পর ক্লায়েন্টকে একটি SYN + ACK প্যাকেট পাঠিয়ে প্রত্যুত্তর দেবে।
৩- যখন ক্লায়েন্ট SYN + ACK প্যাকেট গ্রহণ করে, তখন এটি তার নিজস্ব প্রেক্ষাপট অনুযায়ী সংযোগটিকে একটি ঐতিহাসিক সংযোগ (সিকোয়েন্স নম্বর মেয়াদোত্তীর্ণ বা টাইমআউট) হিসেবে নির্ধারণ করে এবং তারপর সংযোগটি বাতিল করার জন্য সার্ভারে RST প্যাকেট পাঠায়।

দুই-হ্যান্ডশেক সংযোগের ক্ষেত্রে, বর্তমান সংযোগটি একটি ঐতিহাসিক সংযোগ কিনা তা নির্ধারণ করার কোনো উপায় নেই। ত্রি-মুখী হ্যান্ডশেক ক্লায়েন্টকে তৃতীয় প্যাকেট পাঠানোর জন্য প্রস্তুত হওয়ার সময়কার প্রেক্ষাপটের উপর ভিত্তি করে বর্তমান সংযোগটি একটি ঐতিহাসিক সংযোগ কিনা তা নির্ধারণ করার সুযোগ দেয়:

১- যদি এটি একটি ঐতিহাসিক সংযোগ হয় (সিকোয়েন্স নম্বরের মেয়াদ শেষ হয়ে গেছে বা টাইমআউট হয়েছে), তাহলে তৃতীয় হ্যান্ডশেকের মাধ্যমে পাঠানো প্যাকেটটি ঐতিহাসিক সংযোগটি বাতিল করার জন্য একটি RST প্যাকেট।
২- যদি এটি কোনো ঐতিহাসিক সংযোগ না হয়, তবে তৃতীয়বার পাঠানো প্যাকেটটি একটি ACK প্যাকেট হয় এবং যোগাযোগকারী উভয় পক্ষ সফলভাবে সংযোগ স্থাপন করে।

সুতরাং, TCP-এর থ্রি-ওয়ে হ্যান্ডশেক ব্যবহারের প্রধান কারণ হলো, এটি পুরোনো সংযোগ প্রতিরোধ করার জন্য নতুন সংযোগ স্থাপন করে।

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

রিসিভারটি ডুপ্লিকেট ডেটা বাদ দিয়ে ডেটার নির্ভুলতা নিশ্চিত করতে পারে।

ডেটার অখণ্ডতা নিশ্চিত করার জন্য রিসিভার ক্রমিক সংখ্যার ক্রমানুসারে প্যাকেট গ্রহণ করতে পারে।

● ক্রমিক নম্বরটি অপর পক্ষের দ্বারা গৃহীত ডেটা প্যাকেট শনাক্ত করতে পারে, যা নির্ভরযোগ্য ডেটা প্রেরণ সম্ভব করে তোলে।

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

উভয় পক্ষের প্রাথমিক সিরিয়াল নম্বর সিঙ্ক্রোনাইজ করুন

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

কারণ ৩: সম্পদের অপচয় পরিহার করুন
যদি কেবল 'দুই-হ্যান্ডশেক' থাকে, তাহলে যখন ক্লায়েন্টের SYN অনুরোধ নেটওয়ার্কে ব্লক হয়ে যায়, তখন ক্লায়েন্ট সার্ভার দ্বারা প্রেরিত ACK প্যাকেট গ্রহণ করতে পারে না, ফলে SYN পুনরায় পাঠানো হয়। তবে, যেহেতু কোনো তৃতীয় হ্যান্ডশেক নেই, তাই সার্ভার নির্ধারণ করতে পারে না যে ক্লায়েন্ট সংযোগ স্থাপনের জন্য কোনো ACK স্বীকৃতি পেয়েছে কি না। অতএব, সার্ভার কেবল প্রতিটি SYN অনুরোধ পাওয়ার পরেই সক্রিয়ভাবে একটি সংযোগ স্থাপন করতে পারে। এর ফলে নিম্নলিখিত পরিস্থিতি তৈরি হয়:

সম্পদের অপচয়: যদি ক্লায়েন্টের SYN অনুরোধ ব্লক করা হয়, যার ফলে একাধিক SYN প্যাকেটের বারবার প্রেরণ ঘটে, তাহলে সার্ভার অনুরোধটি পাওয়ার পর একাধিক অপ্রয়োজনীয় ও অকার্যকর সংযোগ স্থাপন করবে। এর ফলে সার্ভারের সম্পদের অপ্রয়োজনীয় অপচয় হয়।

মেসেজ আটকে থাকা: তৃতীয় হ্যান্ডশেকের অভাবে, ক্লায়েন্ট সংযোগ স্থাপনের জন্য ACK অ্যাকনলেজমেন্টটি সঠিকভাবে পেয়েছে কিনা, তা সার্ভারের জানার কোনো উপায় থাকে না। ফলে, মেসেজগুলো নেটওয়ার্কে আটকে গেলে ক্লায়েন্ট বারবার SYN রিকোয়েস্ট পাঠাতে থাকে, যার কারণে সার্ভারকে অনবরত নতুন সংযোগ স্থাপন করতে হয়। এতে নেটওয়ার্কে যানজট ও বিলম্ব বাড়ে এবং এটি সার্বিক নেটওয়ার্ক পারফরম্যান্সের ওপর নেতিবাচক প্রভাব ফেলে।

সম্পদের অপচয় পরিহার করুন

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

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

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


পোস্ট করার সময়: ০৮-জানুয়ারি-২০২৫