TCP کا خفیہ ہتھیار: نیٹ ورک فلو کنٹرول اور نیٹ ورک کنجشن کنٹرول

TCP قابل اعتماد ٹرانسپورٹ
ہم سب TCP پروٹوکول سے ایک قابل اعتماد ٹرانسپورٹ پروٹوکول سے واقف ہیں، لیکن یہ ٹرانسپورٹ کی قابل اعتمادی کو کیسے یقینی بناتا ہے؟

قابل اعتماد ٹرانسمیشن حاصل کرنے کے لیے، بہت سے عوامل پر غور کرنے کی ضرورت ہے، جیسے ڈیٹا کی بدعنوانی، نقصان، نقل، اور آؤٹ آف آرڈر شارڈز۔ اگر ان مسائل کو حل نہیں کیا جا سکتا تو قابل اعتماد ترسیل حاصل نہیں کی جا سکتی۔

لہذا، TCP قابل اعتماد ٹرانسمیشن حاصل کرنے کے لیے ترتیب نمبر، اعترافی جواب، دوبارہ بھیجنے کا کنٹرول، کنکشن مینجمنٹ، اور ونڈو کنٹرول جیسے میکانزم کو استعمال کرتا ہے۔

اس مقالے میں، ہم ٹی سی پی کے سلائیڈنگ ونڈو، فلو کنٹرول اور کنجشن کنٹرول پر توجہ مرکوز کریں گے۔ ری ٹرانسمیشن میکانزم کا اگلے حصے میں الگ سے احاطہ کیا گیا ہے۔

نیٹ ورک فلو کنٹرول
نیٹ ورک فلو کنٹرول یا نیٹ ورک ٹریفک کنٹرول کے نام سے جانا جاتا ہے دراصل پروڈیوسر اور صارفین کے درمیان لطیف تعلقات کا مظہر ہے۔ آپ نے شاید کام پر یا انٹرویوز میں اس منظر کو بہت زیادہ دیکھا ہوگا۔ اگر پروڈیوسر کی پیداوار کی صلاحیت صارفین کی استعمال کرنے کی صلاحیت سے بہت زیادہ ہے، تو اس کی وجہ سے قطار غیر معینہ مدت تک بڑھ جائے گی۔ زیادہ سنگین صورت میں، آپ کو معلوم ہو سکتا ہے کہ جب RabbitMQ پیغامات بہت زیادہ جمع ہو جاتے ہیں، تو یہ پورے MQ سرور کی کارکردگی کو خراب کر سکتا ہے۔ ٹی سی پی کے لیے بھی ایسا ہی ہے۔ اگر چیک نہ کیا گیا تو بہت سارے پیغامات نیٹ ورک میں ڈالے جائیں گے، اور صارفین اپنی صلاحیت سے تجاوز کر چکے ہوں گے، جبکہ پروڈیوسر ڈپلیکیٹ پیغامات بھیجتے رہیں گے، جو نیٹ ورک کی کارکردگی کو بہت متاثر کرے گا۔

اس رجحان کو حل کرنے کے لیے، TCP بھیجنے والے کے لیے ایک طریقہ کار فراہم کرتا ہے کہ وہ وصول کنندہ کی اصل استقبالیہ صلاحیت کی بنیاد پر بھیجے گئے ڈیٹا کی مقدار کو کنٹرول کرے، جسے بہاؤ کنٹرول کے نام سے جانا جاتا ہے۔ وصول کنندہ ایک وصولی ونڈو کو برقرار رکھتا ہے، جبکہ بھیجنے والا ایک بھیجنے والی ونڈو کو برقرار رکھتا ہے۔ واضح رہے کہ یہ ونڈوز صرف ایک TCP کنکشن کے لیے ہیں اور تمام کنکشنز ونڈو کا اشتراک نہیں کرتے۔

TCP وصولی ونڈو کے لیے متغیر کا استعمال کرکے بہاؤ کنٹرول فراہم کرتا ہے۔ وصول کرنے والی ونڈو بھیجنے والے کو اس بات کا اشارہ دیتی ہے کہ کیش کی کتنی جگہ ابھی بھی دستیاب ہے۔ بھیجنے والا وصول کنندہ کی اصل قبولیت کی صلاحیت کے مطابق بھیجے گئے ڈیٹا کی مقدار کو کنٹرول کرتا ہے۔

وصول کنندہ میزبان بھیجنے والے کو اس ڈیٹا کے سائز کے بارے میں مطلع کرتا ہے جو اسے موصول ہو سکتا ہے، اور بھیجنے والا اس حد تک بھیجتا ہے۔ یہ حد ونڈو کا سائز ہے، TCP ہیڈر یاد ہے؟ ایک ریسیو ونڈو فیلڈ ہے، جس کا استعمال بائٹس کی تعداد بتانے کے لیے کیا جاتا ہے جو وصول کنندہ کے قابل ہے یا وصول کرنے کے لیے تیار ہے۔

بھیجنے والا میزبان وقتاً فوقتاً ایک ونڈو پروب پیکٹ بھیجے گا، جس کا استعمال یہ معلوم کرنے کے لیے کیا جاتا ہے کہ آیا وصول کنندہ میزبان اب بھی ڈیٹا کو قبول کرنے کے قابل ہے یا نہیں۔ جب وصول کنندہ کا بفر بہہ جانے کے خطرے میں ہوتا ہے، تو ونڈو کا سائز ایک چھوٹی قدر پر سیٹ کیا جاتا ہے تاکہ بھیجنے والے کو بھیجے گئے ڈیٹا کی مقدار کو کنٹرول کرنے کی ہدایت کی جا سکے۔

یہاں ایک نیٹ ورک فلو کنٹرول ڈایاگرام ہے:

ٹریفک کنٹرول

نیٹ ورک کنجشن کنٹرول
کنجشن کنٹرول کو متعارف کرانے سے پہلے، ہمیں یہ سمجھنے کی ضرورت ہے کہ ریسیو ونڈو اور سینڈ ونڈو کے علاوہ، ایک کنجشن ونڈو بھی ہے، جو بنیادی طور پر اس مسئلے کو حل کرنے کے لیے استعمال ہوتی ہے کہ بھیجنے والا کس شرح سے ریسیو ونڈو پر ڈیٹا بھیجنا شروع کرتا ہے۔ لہذا، بھیڑ کی کھڑکی بھی TCP بھیجنے والے کے ذریعہ برقرار رکھی جاتی ہے۔ ہمیں یہ فیصلہ کرنے کے لیے ایک الگورتھم کی ضرورت ہے کہ کتنا ڈیٹا بھیجنا مناسب ہے، کیونکہ بہت کم یا بہت زیادہ ڈیٹا بھیجنا مثالی نہیں ہے، اس لیے کنجشن ونڈو کا تصور۔

پچھلے نیٹ ورک فلو کنٹرول میں، جس چیز سے ہم نے گریز کیا وہ تھا بھیجنے والے نے وصول کنندہ کی کیش کو ڈیٹا سے بھرنا تھا، لیکن ہمیں نہیں معلوم تھا کہ نیٹ ورک میں کیا ہو رہا ہے۔ عام طور پر، کمپیوٹر نیٹ ورک مشترکہ ماحول میں ہوتے ہیں۔ نتیجے کے طور پر، دوسرے میزبانوں کے درمیان رابطے کی وجہ سے نیٹ ورک کی بھیڑ ہو سکتی ہے۔

جب نیٹ ورک پر بھیڑ ہوتی ہے، اگر بڑی تعداد میں پیکٹ بھیجے جاتے رہے، تو اس سے پیکٹوں میں تاخیر اور ضائع ہونے جیسے مسائل پیدا ہو سکتے ہیں۔ اس وقت، TCP ڈیٹا کو دوبارہ منتقل کرے گا، لیکن دوبارہ منتقلی نیٹ ورک پر بوجھ بڑھائے گی، جس کے نتیجے میں بڑی تاخیر اور زیادہ پیکٹ کے نقصانات ہوں گے۔ یہ ایک شیطانی چکر میں پڑ سکتا ہے اور بڑا ہوتا جا سکتا ہے۔

اس طرح، TCP نیٹ ورک پر جو کچھ ہو رہا ہے اسے نظر انداز نہیں کر سکتا۔ جب نیٹ ورک پر ہجوم ہوتا ہے، تو TCP اپنے بھیجے جانے والے ڈیٹا کی مقدار کو کم کرکے خود کو قربان کرتا ہے۔

لہذا، بھیڑ کنٹرول کی تجویز ہے، جس کا مقصد بھیجنے والے کے ڈیٹا سے پورے نیٹ ورک کو بھرنے سے بچنا ہے۔ بھیجنے والے کو بھیجنے والے ڈیٹا کی مقدار کو منظم کرنے کے لیے، TCP ایک تصور کی وضاحت کرتا ہے جسے کنجشن ونڈو کہتے ہیں۔ کنجشن کنٹرول الگورتھم نیٹ ورک کی کنجشن ڈگری کے مطابق کنجشن ونڈو کے سائز کو ایڈجسٹ کرے گا، تاکہ بھیجنے والے کے بھیجے گئے ڈیٹا کی مقدار کو کنٹرول کیا جا سکے۔

کنجشن ونڈو کیا ہے؟ اس کا بھیجنے والی ونڈو سے کیا تعلق ہے؟

کنجشن ونڈو ایک ریاستی متغیر ہے جو بھیجنے والے کے ذریعہ برقرار رکھا جاتا ہے جو بھیجنے والے ڈیٹا کی مقدار کا تعین کرتا ہے۔ بھیڑ کی کھڑکی نیٹ ورک کی بھیڑ کی سطح کے مطابق متحرک طور پر تبدیل ہوتی ہے۔

بھیجنے والی ونڈو بھیجنے والے اور وصول کنندہ کے درمیان ونڈو کے سائز پر اتفاق ہے جو کہ وصول کنندہ کو موصول ہونے والے ڈیٹا کی مقدار کی نشاندہی کرتا ہے۔ کنجشن ونڈو اور سینڈنگ ونڈو کا تعلق ہے۔ بھیجنے والی ونڈو عام طور پر کم سے کم بھیڑ اور وصول کرنے والی ونڈوز کے برابر ہوتی ہے، یعنی swnd = min(cwnd, rwnd)۔

کنجشن ونڈو cwnd اس طرح تبدیل ہوتی ہے:

اگر نیٹ ورک میں بھیڑ نہیں ہے، یعنی دوبارہ ٹرانسمیشن کا کوئی ٹائم آؤٹ نہیں ہوتا ہے، تو بھیڑ کی کھڑکی بڑھ جاتی ہے۔

اگر نیٹ ورک میں بھیڑ ہے تو کنجشن ونڈو کم ہو جاتی ہے۔

بھیجنے والا اس بات کا تعین کرتا ہے کہ آیا نیٹ ورک پر بھیڑ ہے یا نہیں یہ دیکھ کر کہ آیا ACK ایکنولجمنٹ پیکٹ مخصوص وقت کے اندر موصول ہوا ہے۔ اگر ارسال کنندہ کو مقررہ وقت کے اندر ACK تسلیم شدہ پیکٹ موصول نہیں ہوتا ہے، تو یہ سمجھا جاتا ہے کہ نیٹ ورک بھیڑ ہے۔

کنجشن ونڈو کے علاوہ، یہ TCP کنجشن کنٹرول الگورتھم پر بات کرنے کا وقت ہے۔ TCP بھیڑ کنٹرول الگورتھم تین اہم حصوں پر مشتمل ہے:

سست آغاز:ابتدائی طور پر، cwnd کنجشن ونڈو نسبتاً چھوٹی ہے، اور بھیجنے والا نیٹ ورک کی صلاحیت کے مطابق تیزی سے اپنانے کے لیے کنجشن ونڈو کو تیزی سے بڑھاتا ہے۔
بھیڑ سے بچنا:کنجشن ونڈو کے ایک خاص حد سے تجاوز کرنے کے بعد، بھیجنے والا کنجشن ونڈو کو لکیری انداز میں بڑھاتا ہے تاکہ کنجشن ونڈو کی شرح نمو کو کم کیا جا سکے اور نیٹ ورک کو زیادہ بوجھ سے بچایا جا سکے۔
تیز بحالی:اگر بھیڑ ہوتی ہے تو، بھیجنے والا کنجشن ونڈو کو آدھا کر دیتا ہے اور موصول ہونے والے ڈپلیکیٹ اکس کے ذریعے نیٹ ورک کی بحالی کے مقام کا تعین کرنے کے لیے تیزی سے بحالی کی حالت میں داخل ہو جاتا ہے، اور پھر بھیڑ ونڈو کو بڑھانا جاری رکھتا ہے۔

سست آغاز
جب ایک TCP کنکشن قائم ہو جاتا ہے، کنجشن ونڈو cwnd ابتدائی طور پر کم از کم MSS (زیادہ سے زیادہ سیگمنٹ سائز) کی قدر پر سیٹ ہو جاتی ہے۔ اس طرح، ابتدائی بھیجنے کی شرح MSS/RTT بائٹس/سیکنڈ کے بارے میں ہے۔ اصل دستیاب بینڈوڈتھ عام طور پر MSS/RTT سے بہت زیادہ ہوتی ہے، اس لیے TCP بھیجنے کی بہترین شرح تلاش کرنا چاہتا ہے، جسے سست آغاز کے ذریعے حاصل کیا جا سکتا ہے۔

سست شروع ہونے والے عمل میں، کنجشن ونڈو cndd کی قدر 1 MSS پر شروع کی جائے گی، اور ہر بار جب منتقل شدہ پیکٹ سیگمنٹ کو تسلیم کیا جائے گا، cwnd کی قدر میں ایک MSS کا اضافہ کیا جائے گا، یعنی cwnd کی قدر 2 MSS ہو جائے گی۔ اس کے بعد، پیکٹ سیگمنٹ کی ہر کامیاب ٹرانسمیشن کے لیے cwnd کی قدر دوگنی ہو جاتی ہے، وغیرہ۔ مخصوص ترقی کا عمل درج ذیل تصویر میں دکھایا گیا ہے۔

 نیٹ ورک کنجشن کنٹرول

تاہم، بھیجنے کی شرح ہمیشہ نہیں بڑھ سکتی۔ ترقی کو کسی وقت ختم ہونا ہے۔ تو، بھیجنے کی شرح میں اضافہ کب ختم ہوتا ہے؟ سست آغاز عام طور پر بھیجنے کی شرح میں اضافے کو کئی طریقوں میں سے ایک میں ختم کرتا ہے:

پہلا طریقہ سست آغاز کے بھیجنے کے عمل کے دوران پیکٹ کے نقصان کا معاملہ ہے۔ جب پیکٹ کا نقصان ہوتا ہے تو، TCP بھیجنے والے کی کنجشن ونڈو cwnd کو 1 پر سیٹ کرتا ہے اور سست شروع ہونے والے عمل کو دوبارہ شروع کرتا ہے۔ اس مقام پر، سست آغاز کی حد ssthresh کا تصور متعارف کرایا گیا ہے، جس کی ابتدائی قیمت cwnd کی قدر کا نصف ہے جو پیکٹ کا نقصان پیدا کرتی ہے۔ یعنی، جب بھیڑ کا پتہ چلتا ہے، ssthresh کی قدر ونڈو ویلیو کا نصف ہوتی ہے۔

دوسرا طریقہ یہ ہے کہ سست شروع ہونے والی حد ssthresh کی قدر کے ساتھ براہ راست تعلق جوڑیں۔ چونکہ بھیڑ کا پتہ چلنے پر ssthresh کی قدر ونڈو کی قیمت کا نصف ہے، جب cwnd ssthresh سے بڑا ہو تو ہر دوگنا کے ساتھ پیکٹ کا نقصان ہو سکتا ہے۔ لہذا، cwnd کو ssthresh پر سیٹ کرنا بہتر ہے، جس کی وجہ سے TCP کنجشن کنٹرول موڈ میں تبدیل ہو جائے گا اور سست آغاز ختم ہو جائے گا۔

سست آغاز ختم ہونے کا آخری طریقہ یہ ہے کہ اگر تین بے کار Acks کا پتہ چل جائے تو TCP تیزی سے دوبارہ ٹرانسمیشن کرتا ہے اور بحالی کی حالت میں داخل ہوتا ہے۔ (اگر یہ واضح نہیں ہے کہ تین ACK پیکٹ کیوں ہیں، تو اس کی دوبارہ ترسیل کے طریقہ کار میں الگ سے وضاحت کی جائے گی۔)

بھیڑ سے بچنا
جب TCP بھیڑ کنٹرول کی حالت میں داخل ہوتا ہے، cwnd کو کنجشن تھریشولڈ ssthresh کے نصف پر سیٹ کیا جاتا ہے۔ اس کا مطلب ہے کہ جب بھی پیکٹ سیگمنٹ موصول ہوتا ہے تو cndd کی قیمت کو دگنا نہیں کیا جا سکتا۔ اس کے بجائے، ایک نسبتاً قدامت پسندانہ انداز اپنایا جاتا ہے جس میں ہر ٹرانسمیشن مکمل ہونے کے بعد cwnd کی قدر میں صرف ایک MSS (زیادہ سے زیادہ پیکٹ سیگمنٹ کی لمبائی) کا اضافہ کیا جاتا ہے۔ مثال کے طور پر، یہاں تک کہ اگر 10 پیکٹ سیگمنٹس کو تسلیم کر لیا جائے، cwnd کی قدر صرف ایک MSS سے بڑھے گی۔ یہ ایک لکیری نمو ماڈل ہے اور اس کی نمو پر اوپری حد بھی ہے۔ جب پیکٹ کا نقصان ہوتا ہے، cwnd کی قدر کو MSS میں تبدیل کر دیا جاتا ہے، اور ssthresh کی قدر cwnd کے نصف پر سیٹ کر دی جاتی ہے۔ یا یہ MSS کی ترقی کو بھی روک دے گا جب 3 بے کار ACK جوابات موصول ہوں گے۔ اگر cwnd کی قدر آدھی کرنے کے بعد بھی تین فالتو اکس موصول ہوتے ہیں، تو ssthresh کی قدر cwnd کی نصف قدر کے طور پر ریکارڈ کی جاتی ہے اور تیزی سے بحالی کی حالت درج کی جاتی ہے۔

فاسٹ ریکوری
فاسٹ ریکوری حالت میں، کنجشن ونڈو cwnd کی قدر میں ہر موصول ہونے والے فالتو ACK کے لیے ایک MSS کا اضافہ کیا جاتا ہے، یعنی ACK جو ترتیب میں نہیں آتا ہے۔ یہ پیکٹ کے ان حصوں کا استعمال کرنا ہے جو نیٹ ورک میں کامیابی کے ساتھ منتقل ہو چکے ہیں تاکہ ٹرانسمیشن کی کارکردگی کو زیادہ سے زیادہ بہتر بنایا جا سکے۔

جب کھوئے ہوئے پیکٹ سیگمنٹ کا ACK آتا ہے، TCP cwnd کی قدر کو کم کرتا ہے اور پھر بھیڑ سے بچنے کی حالت میں داخل ہوتا ہے۔ یہ کنجشن ونڈو کے سائز کو کنٹرول کرنے اور نیٹ ورک کنجشن کو مزید بڑھانے سے بچنے کے لیے ہے۔

اگر کنجشن کنٹرول حالت کے بعد ٹائم آؤٹ ہوتا ہے، تو نیٹ ورک کی حالت زیادہ سنگین ہو جاتی ہے اور TCP بھیڑ سے بچنے والی حالت سے سست شروع ہونے والی حالت میں منتقل ہو جاتا ہے۔ اس صورت میں، کنجشن ونڈو cwnd کی قدر 1 MSS پر سیٹ کی گئی ہے، زیادہ سے زیادہ پیکٹ سیگمنٹ کی لمبائی، اور سلو اسٹارٹ تھریشولڈ ssthresh کی قدر cwnd کے نصف پر سیٹ کی گئی ہے۔ اس کا مقصد ٹرانسمیشن کی شرح اور نیٹ ورک کنجشن کی ڈگری کو متوازن کرنے کے لیے نیٹ ورک کے ٹھیک ہونے کے بعد کنجشن ونڈو کے سائز کو بتدریج دوبارہ بڑھانا ہے۔

خلاصہ
ایک قابل اعتماد ٹرانسپورٹ پروٹوکول کے طور پر، TCP قابل اعتماد ٹرانسپورٹ کو ترتیب نمبر، اعتراف، دوبارہ ٹرانسمیشن کنٹرول، کنکشن مینجمنٹ اور ونڈو کنٹرول کے ذریعے لاگو کرتا ہے۔ ان میں سے، بہاؤ کو کنٹرول کرنے کا طریقہ کار وصول کنندہ کی اصل وصول کرنے کی صلاحیت کے مطابق بھیجنے والے کی طرف سے بھیجے گئے ڈیٹا کی مقدار کو کنٹرول کرتا ہے، جس سے نیٹ ورک کی بھیڑ اور کارکردگی میں کمی کے مسائل سے بچا جاتا ہے۔ بھیڑ کو کنٹرول کرنے کا طریقہ کار بھیجنے والے کی طرف سے بھیجے گئے ڈیٹا کی مقدار کو ایڈجسٹ کرکے نیٹ ورک کی بھیڑ کی موجودگی سے بچتا ہے۔ کنجشن ونڈو اور سینڈنگ ونڈو کے تصورات ایک دوسرے سے متعلق ہیں، اور بھیجنے والے میں ڈیٹا کی مقدار کو کنجشن ونڈو کے سائز کو متحرک طور پر ایڈجسٹ کرکے کنٹرول کیا جاتا ہے۔ سست آغاز، بھیڑ سے بچنے اور تیزی سے بحالی TCP کنجشن کنٹرول الگورتھم کے تین اہم حصے ہیں، جو نیٹ ورک کی گنجائش اور بھیڑ کی ڈگری کے مطابق ڈھالنے کے لیے مختلف حکمت عملیوں کے ذریعے کنجشن ونڈو کے سائز کو ایڈجسٹ کرتے ہیں۔

اگلے حصے میں، ہم TCP کے ری ٹرانسمیشن میکانزم کا تفصیل سے جائزہ لیں گے۔ قابل اعتماد ترسیل کے حصول کے لیے ری ٹرانسمیشن میکانزم TCP کا ایک اہم حصہ ہے۔ یہ گم شدہ، خراب یا تاخیر کا شکار ڈیٹا کو دوبارہ منتقل کرکے ڈیٹا کی قابل اعتماد ترسیل کو یقینی بناتا ہے۔ ری ٹرانسمیشن میکانزم کے نفاذ کے اصول اور حکمت عملی کو اگلے حصے میں متعارف کرایا جائے گا اور اس کا تفصیل سے تجزیہ کیا جائے گا۔ دیکھتے رہو!


پوسٹ ٹائم: فروری-24-2025