টিসিপি সংযোগ সেটআপ
আমরা যখন ওয়েব ব্রাউজ করি, ইমেল পাঠাই, অথবা অনলাইন গেম খেলি, তখন আমরা প্রায়শই এর পেছনের জটিল নেটওয়ার্ক সংযোগ সম্পর্কে চিন্তা করি না। তবে, এই আপাতদৃষ্টিতে ছোট পদক্ষেপগুলিই আমাদের এবং সার্ভারের মধ্যে স্থিতিশীল যোগাযোগ নিশ্চিত করে। সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপগুলির মধ্যে একটি হল TCP সংযোগ সেটআপ, এবং এর মূল হল ত্রিমুখী হ্যান্ডশেক।
এই প্রবন্ধে ত্রিমুখী হ্যান্ডশেকের নীতি, প্রক্রিয়া এবং গুরুত্ব সম্পর্কে বিস্তারিত আলোচনা করা হবে। ধাপে ধাপে, আমরা ব্যাখ্যা করব কেন ত্রিমুখী হ্যান্ডশেক প্রয়োজন, এটি কীভাবে সংযোগের স্থিতিশীলতা এবং নির্ভরযোগ্যতা নিশ্চিত করে এবং ডেটা স্থানান্তরের জন্য এটি কতটা গুরুত্বপূর্ণ। ত্রিমুখী হ্যান্ডশেক সম্পর্কে আরও গভীর ধারণার মাধ্যমে, আমরা নেটওয়ার্ক যোগাযোগের অন্তর্নিহিত প্রক্রিয়াগুলি সম্পর্কে আরও ভাল ধারণা অর্জন করব এবং TCP সংযোগগুলির নির্ভরযোগ্যতা সম্পর্কে আরও স্পষ্ট ধারণা অর্জন করব।
টিসিপি ত্রি-মুখী হ্যান্ডশেক প্রক্রিয়া এবং অবস্থা পরিবর্তন
টিসিপি একটি সংযোগ-ভিত্তিক পরিবহন প্রোটোকল, যার জন্য ডেটা ট্রান্সমিশনের আগে সংযোগ স্থাপন প্রয়োজন। এই সংযোগ স্থাপন প্রক্রিয়াটি ত্রিমুখী হ্যান্ডশেকের মাধ্যমে সম্পন্ন হয়।
আসুন প্রতিটি সংযোগে প্রেরিত TCP প্যাকেটগুলি ঘনিষ্ঠভাবে দেখে নেওয়া যাক।
প্রাথমিকভাবে, ক্লায়েন্ট এবং সার্ভার উভয়ই বন্ধ থাকে। প্রথমে, সার্ভারটি সক্রিয়ভাবে একটি পোর্টে শোনে এবং LISTEN অবস্থায় থাকে, যার অর্থ সার্ভারটি শুরু করতে হবে। এরপর, ক্লায়েন্ট ওয়েবপৃষ্ঠা অ্যাক্সেস শুরু করার জন্য প্রস্তুত। এটিকে সার্ভারের সাথে একটি সংযোগ স্থাপন করতে হবে। প্রথম সংযোগ প্যাকেটের ফর্ম্যাটটি নিম্নরূপ:
যখন কোনও ক্লায়েন্ট কোনও সংযোগ শুরু করে, তখন এটি একটি এলোমেলো প্রাথমিক ক্রম সংখ্যা (client_isn) তৈরি করে এবং এটিকে TCP হেডারের "ক্রম সংখ্যা" ক্ষেত্রে রাখে। একই সময়ে, ক্লায়েন্ট SYN পতাকা অবস্থান 1 এ সেট করে নির্দেশ করে যে বহির্গামী প্যাকেটটি একটি SYN প্যাকেট। ক্লায়েন্ট নির্দেশ করে যে এটি সার্ভারে প্রথম SYN প্যাকেট পাঠিয়ে সার্ভারের সাথে একটি সংযোগ স্থাপন করতে চায়। এই প্যাকেটে অ্যাপ্লিকেশন স্তর ডেটা (অর্থাৎ, প্রেরিত ডেটা) থাকে না। এই সময়ে, ক্লায়েন্টের অবস্থা SYN-SENT হিসাবে চিহ্নিত করা হয়।
যখন একটি সার্ভার একটি ক্লায়েন্ট থেকে একটি SYN প্যাকেট গ্রহণ করে, তখন এটি এলোমেলোভাবে তার নিজস্ব সিরিয়াল নম্বর (server_isn) শুরু করে এবং তারপর TCP হেডারের "সিরিয়াল নম্বর" ক্ষেত্রে সেই নম্বরটি রাখে। এরপর, সার্ভারটি "স্বীকৃতি নম্বর" ক্ষেত্রে client_isn + 1 প্রবেশ করে এবং SYN এবং ACK উভয় বিটকে 1 এ সেট করে। অবশেষে, সার্ভারটি ক্লায়েন্টের কাছে প্যাকেটটি পাঠায়, যাতে কোনও অ্যাপ্লিকেশন-স্তর ডেটা থাকে না (এবং সার্ভারের পাঠানোর জন্য কোনও ডেটা থাকে না)। এই সময়ে, সার্ভারটি SYN-RCVD অবস্থায় থাকে।
ক্লায়েন্ট সার্ভার থেকে প্যাকেটটি পাওয়ার পর, চূড়ান্ত উত্তর প্যাকেটের প্রতিক্রিয়া জানাতে নিম্নলিখিত অপ্টিমাইজেশনগুলি সম্পাদন করতে হবে: প্রথমত, ক্লায়েন্ট উত্তর প্যাকেটের TCP হেডারের ACK বিট 1 এ সেট করে; দ্বিতীয়ত, ক্লায়েন্ট "উত্তর নম্বর নিশ্চিত করুন" ক্ষেত্রে server_isn + 1 মান প্রবেশ করায়; অবশেষে, ক্লায়েন্ট সার্ভারে প্যাকেটটি পাঠায়। এই প্যাকেট ক্লায়েন্ট থেকে সার্ভারে ডেটা বহন করতে পারে। এই ক্রিয়াকলাপগুলি সম্পন্ন করার পরে, ক্লায়েন্ট ESTABLISHED অবস্থায় প্রবেশ করবে।
সার্ভারটি ক্লায়েন্টের কাছ থেকে উত্তর প্যাকেটটি পাওয়ার পর, এটি ESTABLISHED অবস্থায়ও চলে যায়।
উপরের প্রক্রিয়া থেকে আপনি দেখতে পাচ্ছেন, ত্রিমুখী হ্যান্ডশেক করার সময়, তৃতীয় হ্যান্ডশেক ডেটা বহন করার অনুমতি দেয়, কিন্তু প্রথম দুটি হ্যান্ডশেক নয়। এই প্রশ্নটি প্রায়শই সাক্ষাৎকারে জিজ্ঞাসা করা হয়। ত্রিমুখী হ্যান্ডশেক সম্পন্ন হওয়ার পরে, উভয় পক্ষই ESTABLISHED অবস্থায় প্রবেশ করে, যা নির্দেশ করে যে সংযোগটি সফলভাবে প্রতিষ্ঠিত হয়েছে, এই পর্যায়ে ক্লায়েন্ট এবং সার্ভার একে অপরের কাছে ডেটা প্রেরণ শুরু করতে পারে।
তিনবার করমর্দন কেন? দুবার নয়, চারবার?
সাধারণ উত্তর হল, "কারণ ত্রিমুখী হ্যান্ডশেক গ্রহণ এবং প্রেরণের ক্ষমতা নিশ্চিত করে।" এই উত্তরটি সঠিক, তবে এটি কেবল পৃষ্ঠ কারণ, মূল কারণটি সামনে আনে না। নিম্নলিখিতটিতে, আমি এই বিষয়টি সম্পর্কে আমাদের বোধগম্যতা আরও গভীর করার জন্য তিনটি দিক থেকে তিনবার হ্যান্ডশেকের কারণগুলি বিশ্লেষণ করব।
ত্রিমুখী হ্যান্ডশেক কার্যকরভাবে ঐতিহাসিকভাবে পুনরাবৃত্তিমূলক সংযোগের সূচনা এড়াতে পারে (প্রধান কারণ)
ত্রিমুখী হ্যান্ডশেক নিশ্চিত করে যে উভয় পক্ষই একটি নির্ভরযোগ্য প্রাথমিক ক্রম নম্বর পেয়েছে।
ত্রিমুখী করমর্দন সম্পদের অপচয় রোধ করে।
কারণ ১: ঐতিহাসিক ডুপ্লিকেট জয়েন এড়িয়ে চলুন
সংক্ষেপে, ত্রিমুখী হ্যান্ডশেকের মূল কারণ হল পুরাতন ডুপ্লিকেট সংযোগের সূচনা থেকে সৃষ্ট বিভ্রান্তি এড়ানো। একটি জটিল নেটওয়ার্ক পরিবেশে, ডেটা প্যাকেটের ট্রান্সমিশন সর্বদা নির্দিষ্ট সময়ের সাথে সাথে গন্তব্য হোস্টে পাঠানো হয় না এবং নেটওয়ার্ক কনজেশন এবং অন্যান্য কারণে পুরানো ডেটা প্যাকেটগুলি প্রথমে গন্তব্য হোস্টে পৌঁছাতে পারে। এটি এড়াতে, TCP সংযোগ স্থাপনের জন্য ত্রিমুখী হ্যান্ডশেক ব্যবহার করে।
যখন কোনও ক্লায়েন্ট পরপর একাধিক SYN সংযোগ স্থাপন প্যাকেট পাঠায়, নেটওয়ার্ক কনজেশনের মতো পরিস্থিতিতে, নিম্নলিখিতগুলি ঘটতে পারে:
১- পুরনো SYN প্যাকেটগুলি সর্বশেষ SYN প্যাকেটগুলির আগে সার্ভারে পৌঁছায়।
২- পুরাতন SYN প্যাকেটটি পাওয়ার পর সার্ভার ক্লায়েন্টকে একটি SYN + ACK প্যাকেটের উত্তর দেবে।
৩- যখন ক্লায়েন্ট SYN + ACK প্যাকেটটি গ্রহণ করে, তখন এটি নির্ধারণ করে যে সংযোগটি তার নিজস্ব প্রেক্ষাপট অনুসারে একটি ঐতিহাসিক সংযোগ (ক্রম সংখ্যার মেয়াদ শেষ হয়ে গেছে বা সময়সীমা শেষ হয়ে গেছে), এবং তারপর সংযোগটি বাতিল করার জন্য RST প্যাকেটটি সার্ভারে পাঠায়।
দুই-হ্যান্ডশেক সংযোগের মাধ্যমে, বর্তমান সংযোগটি একটি ঐতিহাসিক সংযোগ কিনা তা নির্ধারণ করার কোনও উপায় নেই। ত্রি-মুখী হ্যান্ডশেক ক্লায়েন্টকে তৃতীয় প্যাকেট পাঠানোর জন্য প্রস্তুত হওয়ার সময় প্রেক্ষাপটের উপর ভিত্তি করে বর্তমান সংযোগটি একটি ঐতিহাসিক সংযোগ কিনা তা নির্ধারণ করতে দেয়:
১- যদি এটি একটি ঐতিহাসিক সংযোগ হয় (ক্রম সংখ্যার মেয়াদ শেষ হয়ে গেছে বা সময় শেষ হয়ে গেছে), তাহলে তৃতীয় হ্যান্ডশেক দ্বারা প্রেরিত প্যাকেটটি ঐতিহাসিক সংযোগটি বাতিল করার জন্য একটি RST প্যাকেট।
২- যদি এটি একটি ঐতিহাসিক সংযোগ না হয়, তাহলে তৃতীয়বারের জন্য পাঠানো প্যাকেটটি একটি ACK প্যাকেট হবে এবং দুটি যোগাযোগকারী পক্ষ সফলভাবে সংযোগ স্থাপন করবে।
অতএব, TCP ত্রিমুখী হ্যান্ডশেক ব্যবহারের প্রধান কারণ হল এটি ঐতিহাসিক সংযোগ প্রতিরোধ করার জন্য সংযোগটি শুরু করে।
কারণ ২: উভয় পক্ষের প্রাথমিক ক্রম সংখ্যাগুলিকে সিঙ্ক্রোনাইজ করা
টিসিপি প্রোটোকলের উভয় পক্ষকেই একটি সিকোয়েন্স নম্বর বজায় রাখতে হবে, যা নির্ভরযোগ্য ট্রান্সমিশন নিশ্চিত করার জন্য একটি গুরুত্বপূর্ণ বিষয়। টিসিপি সংযোগে সিকোয়েন্স নম্বরগুলি গুরুত্বপূর্ণ ভূমিকা পালন করে। তারা নিম্নলিখিত কাজগুলি করে:
রিসিভার ডুপ্লিকেট ডেটা বাদ দিতে পারে এবং ডেটার নির্ভুলতা নিশ্চিত করতে পারে।
ডেটার অখণ্ডতা নিশ্চিত করার জন্য রিসিভার ক্রম সংখ্যার ক্রমে প্যাকেটগুলি গ্রহণ করতে পারে।
● সিকোয়েন্স নম্বরটি অন্য পক্ষ কর্তৃক গৃহীত ডেটা প্যাকেটটি সনাক্ত করতে পারে, যা নির্ভরযোগ্য ডেটা ট্রান্সমিশনকে সক্ষম করে।
অতএব, একটি TCP সংযোগ স্থাপনের পর, ক্লায়েন্ট প্রাথমিক সিকোয়েন্স নম্বর সহ SYN প্যাকেট পাঠায় এবং সার্ভারকে একটি ACK প্যাকেট দিয়ে উত্তর দিতে বলে যা ক্লায়েন্টের SYN প্যাকেটের সফল গ্রহণ নির্দেশ করে। তারপর, সার্ভার প্রাথমিক সিকোয়েন্স নম্বর সহ SYN প্যাকেটটি ক্লায়েন্টের কাছে পাঠায় এবং ক্লায়েন্টের উত্তর দেওয়ার জন্য অপেক্ষা করে, একবার এবং সর্বদা, প্রাথমিক সিকোয়েন্স নম্বরগুলি নির্ভরযোগ্যভাবে সিঙ্ক্রোনাইজ করা হয়েছে তা নিশ্চিত করার জন্য।
যদিও চার-মুখী হ্যান্ডশেক উভয় পক্ষের প্রাথমিক ক্রম সংখ্যাগুলিকে নির্ভরযোগ্যভাবে সিঙ্ক্রোনাইজ করার জন্যও সম্ভব, দ্বিতীয় এবং তৃতীয় ধাপগুলিকে একক ধাপে একত্রিত করা যেতে পারে, যার ফলে ত্রি-মুখী হ্যান্ডশেক হয়। যাইহোক, দুটি হ্যান্ডশেক কেবল গ্যারান্টি দিতে পারে যে এক পক্ষের প্রাথমিক ক্রম সংখ্যাটি অন্য পক্ষ দ্বারা সফলভাবে গৃহীত হয়েছে, তবে উভয় পক্ষের প্রাথমিক ক্রম সংখ্যাটি নিশ্চিত করা যাবে এমন কোনও গ্যারান্টি নেই। অতএব, TCP সংযোগের স্থিতিশীলতা এবং নির্ভরযোগ্যতা নিশ্চিত করার জন্য ত্রি-মুখী হ্যান্ডশেক হল সর্বোত্তম পছন্দ।
কারণ ৩: সম্পদের অপচয় এড়িয়ে চলুন
যদি কেবল "দুই-হ্যান্ডশেক" হয়, যখন ক্লায়েন্ট SYN অনুরোধ নেটওয়ার্কে ব্লক করা থাকে, তখন ক্লায়েন্ট সার্ভার দ্বারা প্রেরিত ACK প্যাকেটটি গ্রহণ করতে পারে না, তাই SYN পুনরায় পাঠানো হবে। তবে, যেহেতু তৃতীয় কোনও হ্যান্ডশেক নেই, তাই সার্ভার নির্ধারণ করতে পারে না যে ক্লায়েন্ট সংযোগ স্থাপনের জন্য ACK স্বীকৃতি পেয়েছে কিনা। অতএব, প্রতিটি SYN অনুরোধ পাওয়ার পরেই সার্ভার কেবল সক্রিয়ভাবে একটি সংযোগ স্থাপন করতে পারে। এর ফলে নিম্নলিখিতগুলি ঘটে:
সম্পদের অপচয়: যদি ক্লায়েন্টের SYN অনুরোধ ব্লক করা হয়, যার ফলে একাধিক SYN প্যাকেট বারবার ট্রান্সমিশন করা হয়, তাহলে অনুরোধ পাওয়ার পর সার্ভার একাধিক অপ্রয়োজনীয় অবৈধ সংযোগ স্থাপন করবে। এর ফলে সার্ভারের সম্পদের অপ্রয়োজনীয় অপচয় হবে।
বার্তা ধরে রাখা: তৃতীয় হ্যান্ডশেকের অভাবে, সার্ভারের জানার কোন উপায় নেই যে ক্লায়েন্ট সংযোগ স্থাপনের জন্য ACK স্বীকৃতি সঠিকভাবে পেয়েছে কিনা। ফলস্বরূপ, যদি বার্তা নেটওয়ার্কে আটকে যায়, তাহলে ক্লায়েন্ট বারবার SYN অনুরোধ পাঠাতে থাকবে, যার ফলে সার্ভারকে ক্রমাগত নতুন সংযোগ স্থাপন করতে হবে। এটি নেটওয়ার্ক কনজেশন এবং বিলম্ব বৃদ্ধি করবে এবং সামগ্রিক নেটওয়ার্ক কর্মক্ষমতাকে নেতিবাচকভাবে প্রভাবিত করবে।
অতএব, নেটওয়ার্ক সংযোগের স্থিতিশীলতা এবং নির্ভরযোগ্যতা নিশ্চিত করার জন্য, TCP এই সমস্যাগুলি এড়াতে সংযোগ স্থাপনের জন্য ত্রি-মুখী হ্যান্ডশেক ব্যবহার করে।
সারাংশ
দ্যনেটওয়ার্ক প্যাকেট ব্রোকারTCP সংযোগ স্থাপন তিন-মুখী হ্যান্ডশেকের মাধ্যমে সম্পন্ন হয়। তিন-মুখী হ্যান্ডশেকের সময়, ক্লায়েন্ট প্রথমে SYN ফ্ল্যাগ সহ একটি প্যাকেট সার্ভারে পাঠায়, যা নির্দেশ করে যে এটি একটি সংযোগ স্থাপন করতে চায়। ক্লায়েন্টের কাছ থেকে অনুরোধ পাওয়ার পর, সার্ভার ক্লায়েন্টকে SYN এবং ACK ফ্ল্যাগ সহ একটি প্যাকেটের উত্তর দেয়, যা নির্দেশ করে যে সংযোগের অনুরোধ গৃহীত হয়েছে এবং তার নিজস্ব প্রাথমিক ক্রম নম্বর পাঠায়। অবশেষে, ক্লায়েন্ট সার্ভারে একটি ACK ফ্ল্যাগ সহ উত্তর দেয় যা নির্দেশ করে যে সংযোগটি সফলভাবে প্রতিষ্ঠিত হয়েছে। সুতরাং, দুটি পক্ষ ESTABLISHED অবস্থায় রয়েছে এবং একে অপরের কাছে ডেটা পাঠানো শুরু করতে পারে।
সাধারণভাবে, TCP সংযোগ স্থাপনের জন্য ত্রি-মুখী হ্যান্ডশেক প্রক্রিয়াটি সংযোগের স্থিতিশীলতা এবং নির্ভরযোগ্যতা নিশ্চিত করার জন্য, ঐতিহাসিক সংযোগের উপর বিভ্রান্তি এবং সম্পদের অপচয় এড়াতে এবং উভয় পক্ষই ডেটা গ্রহণ এবং প্রেরণ করতে সক্ষম তা নিশ্চিত করার জন্য ডিজাইন করা হয়েছে।
পোস্টের সময়: জানুয়ারী-০৮-২০২৫