ٽي سي پي جو ڳجهو هٿيار: نيٽ ورڪ فلو ڪنٽرول ۽ نيٽ ورڪ ڪنجيشن ڪنٽرول

ٽي سي پي اعتبار جو ٽرانسپورٽ
اسان سڀ TCP پروٽوڪول کان واقف آهيون هڪ قابل اعتماد ٽرانسپورٽ پروٽوڪول جي طور تي، پر اهو ٽرانسپورٽ جي اعتبار کي ڪيئن يقيني بڻائي ٿو؟

قابل اعتماد ٽرانسميشن حاصل ڪرڻ لاءِ، ڪيترن ئي عنصرن تي غور ڪرڻ جي ضرورت آهي، جهڙوڪ ڊيٽا ڪرپشن، نقصان، نقل، ۽ ترتيب کان ٻاهر شارڊ. جيڪڏهن اهي مسئلا حل نه ٿي سگهن، ته قابل اعتماد ٽرانسميشن حاصل نه ٿي سگهي.

تنهن ڪري، TCP قابل اعتماد ٽرانسميشن حاصل ڪرڻ لاءِ ترتيب نمبر، اعتراف جواب، ٻيهر موڪليو ڪنٽرول، ڪنيڪشن مينيجمينٽ، ۽ ونڊو ڪنٽرول جهڙا طريقا استعمال ڪري ٿو.

هن پيپر ۾، اسان TCP جي سلائيڊنگ ونڊو، وهڪري جي ڪنٽرول ۽ ڪنجيشن ڪنٽرول تي ڌيان ڏينداسين. ايندڙ حصي ۾ ري ٽرانسميشن ميڪانيزم کي الڳ الڳ ڍڪيو ويندو.

نيٽ ورڪ فلو ڪنٽرول
نيٽ ورڪ فلو ڪنٽرول يا نيٽ ورڪ ٽرئفڪ ڪنٽرول جي نالي سان سڃاتو وڃي ٿو، اصل ۾ پيدا ڪندڙن ۽ صارفين جي وچ ۾ نازڪ تعلق جو هڪ مظهر آهي. توهان شايد ڪم تي يا انٽرويو ۾ هن منظرنامي کي گهڻو ڏٺو هوندو. جيڪڏهن پيدا ڪندڙ جي پيداوار جي صلاحيت صارف جي استعمال جي صلاحيت کان تمام گهڻي وڌي ٿي، ته اهو قطار کي غير معين مدت تائين وڌڻ جو سبب بڻجندو. وڌيڪ سنجيده صورت ۾، توهان شايد ڄاڻو ٿا ته جڏهن RabbitMQ پيغام تمام گهڻو گڏ ٿين ٿا، ته اهو پوري MQ سرور جي ڪارڪردگي کي خراب ڪري سگهي ٿو. TCP لاءِ به ساڳيو ئي آهي؛ جيڪڏهن چيڪ نه ڪيو وڃي، ته تمام گهڻا پيغام نيٽ ورڪ ۾ رکيا ويندا، ۽ صارف پنهنجي گنجائش کان وڌي ويندا، جڏهن ته پيدا ڪندڙ نقل پيغام موڪلڻ جاري رکندا، جيڪو نيٽ ورڪ جي ڪارڪردگي کي تمام گهڻو متاثر ڪندو.

هن رجحان کي حل ڪرڻ لاءِ، TCP موڪليندڙ لاءِ هڪ طريقو مهيا ڪري ٿو جيڪو وصول ڪندڙ جي حقيقي استقبال جي گنجائش جي بنياد تي موڪليل ڊيٽا جي مقدار کي ڪنٽرول ڪري ٿو، جنهن کي وهڪري ڪنٽرول طور سڃاتو وڃي ٿو. وصول ڪندڙ هڪ وصول ونڊو برقرار رکي ٿو، جڏهن ته موڪليندڙ هڪ موڪلڻ ونڊو برقرار رکي ٿو. اهو ياد رکڻ گهرجي ته اهي ونڊوز صرف هڪ TCP ڪنيڪشن لاءِ آهن ۽ سڀئي ڪنيڪشن هڪ ونڊو شيئر نٿا ڪن.

TCP وصول ڪندڙ ونڊو لاءِ متغير استعمال ڪندي وهڪري ڪنٽرول فراهم ڪري ٿو. وصول ڪندڙ ونڊو موڪليندڙ کي هڪ اشارو ڏئي ٿي ته ڪيتري ڪيش اسپيس اڃا تائين موجود آهي. موڪليندڙ وصول ڪندڙ جي حقيقي قبوليت جي صلاحيت جي مطابق موڪليل ڊيٽا جي مقدار کي ڪنٽرول ڪري ٿو.

وصول ڪندڙ هوسٽ موڪليندڙ کي ڊيٽا جي سائيز جي اطلاع ڏئي ٿو جيڪو اهو حاصل ڪري سگهي ٿو، ۽ موڪليندڙ هن حد تائين موڪلي ٿو. هي حد ونڊو سائيز آهي، TCP هيڊر ياد رکو؟ هڪ وصول ڪندڙ ونڊو فيلڊ آهي، جيڪو وصول ڪندڙ جي قابل يا حاصل ڪرڻ لاءِ تيار بائيٽس جي تعداد کي ظاهر ڪرڻ لاءِ استعمال ڪيو ويندو آهي.

موڪليندڙ هوسٽ وقتاً فوقتاً هڪ ونڊو پروب پيڪٽ موڪليندو، جيڪو اهو معلوم ڪرڻ لاءِ استعمال ڪيو ويندو آهي ته ڇا وصول ڪندڙ هوسٽ اڃا تائين ڊيٽا قبول ڪرڻ جي قابل آهي. جڏهن وصول ڪندڙ جو بفر اوور فلو ٿيڻ جي خطري ۾ هوندو آهي، ته ونڊو جي سائيز کي ننڍي قدر تي سيٽ ڪيو ويندو آهي ته جيئن موڪليندڙ کي موڪليل ڊيٽا جي مقدار کي ڪنٽرول ڪرڻ جي هدايت ڪري سگهجي.

هتي هڪ نيٽ ورڪ فلو ڪنٽرول ڊاگرام آهي:

ٽرئفڪ ڪنٽرول

نيٽ ورڪ ڪنجيشن ڪنٽرول
ڪنجيشن ڪنٽرول متعارف ڪرائڻ کان اڳ، اسان کي اهو سمجهڻ جي ضرورت آهي ته وصول ڪرڻ واري ونڊو ۽ موڪلڻ واري ونڊو کان علاوه، هڪ ڪنجيشن ونڊو پڻ آهي، جيڪا بنيادي طور تي هن مسئلي کي حل ڪرڻ لاءِ استعمال ڪئي ويندي آهي ته موڪليندڙ ڪهڙي شرح تي وصول ڪرڻ واري ونڊو ڏانهن ڊيٽا موڪلڻ شروع ڪري ٿو. تنهن ڪري، ڪنجيشن ونڊو کي TCP موڪليندڙ پاران پڻ برقرار رکيو ويندو آهي. اسان کي هڪ الگورتھم جي ضرورت آهي ته اهو فيصلو ڪيو وڃي ته ڪيترو ڊيٽا موڪلڻ لاءِ مناسب آهي، ڇاڪاڻ ته تمام گهٽ يا تمام گهڻو ڊيٽا موڪلڻ مثالي ناهي، تنهن ڪري ڪنجيشن ونڊو جو تصور.

پوئين نيٽ ورڪ فلو ڪنٽرول ۾، اسان جيڪو پاسو ڪيو اهو هو ته موڪليندڙ وصول ڪندڙ جي ڪيش کي ڊيٽا سان ڀري رهيو هو، پر اسان کي خبر نه هئي ته نيٽ ورڪ ۾ ڇا ٿي رهيو آهي. عام طور تي، ڪمپيوٽر نيٽ ورڪ هڪ گڏيل ماحول ۾ هوندا آهن. نتيجي طور، ٻين ميزبانن جي وچ ۾ رابطي جي ڪري نيٽ ورڪ جي گنجائش ٿي سگهي ٿي.

جڏهن نيٽ ورڪ ۾ رش هوندو آهي، جيڪڏهن وڏي تعداد ۾ پيڪٽ موڪليا ويندا رهن ٿا، ته اهو دير ۽ پيڪٽ جي نقصان جهڙا مسئلا پيدا ڪري سگهي ٿو. هن موقعي تي، TCP ڊيٽا کي ٻيهر منتقل ڪندو، پر ٻيهر منتقلي نيٽ ورڪ تي بار وڌائيندو، جنهن جي نتيجي ۾ وڏي دير ۽ وڌيڪ پيڪٽ نقصان ٿيندو. اهو هڪ شيطاني چڪر ۾ پئجي سگهي ٿو ۽ وڏو ٿيندو رهي ٿو.

تنهن ڪري، TCP نيٽ ورڪ تي ڇا ٿي رهيو آهي ان کي نظرانداز نٿو ڪري سگهي. جڏهن نيٽ ورڪ ۾ رش هوندو آهي، TCP پنهنجي موڪليل ڊيٽا جي مقدار کي گهٽائي پاڻ کي قربان ڪري ٿو.

تنهن ڪري، ڪنجيشن ڪنٽرول تجويز ڪيو ويو آهي، جنهن جو مقصد موڪليندڙ جي ڊيٽا سان سڄي نيٽ ورڪ کي ڀرڻ کان بچڻ آهي. موڪليندڙ کي موڪلڻ واري ڊيٽا جي مقدار کي منظم ڪرڻ لاءِ، TCP هڪ تصور کي بيان ڪري ٿو جنهن کي ڪنجيشن ونڊو سڏيو ويندو آهي. ڪنجيشن ڪنٽرول الگورتھم نيٽ ورڪ جي ڪنجيشن ڊگري جي مطابق ڪنجيشن ونڊو جي سائيز کي ترتيب ڏيندو، ته جيئن موڪليندڙ پاران موڪليل ڊيٽا جي مقدار کي ڪنٽرول ڪري سگهجي.

ڪنجيشن ونڊو ڇا آهي؟ ان جو موڪلڻ واري ونڊو سان ڪهڙو تعلق آهي؟

ڪنجيشن ونڊو هڪ اسٽيٽ ويريئيبل آهي جيڪو موڪليندڙ طرفان برقرار رکيو ويندو آهي جيڪو اهو طئي ڪندو آهي ته موڪليندڙ ڪيترو ڊيٽا موڪلي سگهي ٿو. ڪنجيشن ونڊو نيٽ ورڪ جي ڪنجيشن ليول جي مطابق متحرڪ طور تي تبديل ٿيندي آهي.

موڪلڻ واري ونڊو موڪليندڙ ۽ وصول ڪندڙ جي وچ ۾ هڪ متفقه ونڊو سائيز آهي جيڪا وصول ڪندڙ کي ملي سگهي ٿو ڊيٽا جي مقدار کي ظاهر ڪري ٿي. ڪنجيشن ونڊو ۽ موڪلڻ واري ونڊو لاڳاپيل آهن؛ موڪلڻ واري ونڊو عام طور تي ڪنجيشن ۽ وصول ڪندڙ ونڊوز جي گهٽ ۾ گهٽ برابر هوندي آهي، يعني، swnd = min(cwnd, rwnd).

ڪنجيشن ونڊو سي ڊبليو اين ڊي هن ريت تبديل ٿئي ٿي:

جيڪڏهن نيٽ ورڪ ۾ ڪا به گنجائش نه هجي، يعني، ٻيهر ٽرانسميشن جو وقت ختم نه ٿئي، ته به گنجائش ونڊو وڌي ويندي آهي.

جيڪڏهن نيٽ ورڪ ۾ رش هجي ته رش ونڊو گهٽجي ويندي آهي.

موڪليندڙ اهو طئي ڪري ٿو ته نيٽ ورڪ ۾ رش آهي يا نه، اهو ڏسي ٿو ته ACK تصديق پيڪٽ مقرر وقت اندر ملي ٿو يا نه. جيڪڏهن موڪليندڙ کي ACK تصديق پيڪٽ مقرر وقت اندر نه ملي ته اهو سمجهيو ويندو ته نيٽ ورڪ ۾ رش آهي.

ڪنجيشن ونڊو کان علاوه، اهو وقت آهي ته TCP ڪنجيشن ڪنٽرول الگورتھم تي بحث ڪيو وڃي. TCP ڪنجيشن ڪنٽرول الگورتھم ٽن مکيه حصن تي مشتمل آهي:

سست شروعات:شروعات ۾، cwnd ڪنجيشن ونڊو نسبتاً ننڍي هوندي آهي، ۽ موڪليندڙ ڪنجيشن ونڊو کي تيزيءَ سان وڌائيندو آهي ته جيئن نيٽ ورڪ جي گنجائش سان تيزي سان مطابقت پيدا ڪري سگهجي.
رش کان بچڻ:جڏهن ڪنجيشن ونڊو هڪ خاص حد کان وڌي وڃي ٿي، ته موڪليندڙ ڪنجيشن ونڊو جي واڌ جي شرح کي سست ڪرڻ ۽ نيٽ ورڪ کي اوورلوڊ ڪرڻ کان بچڻ لاءِ ڪنجيشن ونڊو کي لڪير واري انداز ۾ وڌائي ٿو.
تيزي سان بحالي:جيڪڏهن ڪنجيشن ٿئي ٿي، ته موڪليندڙ ڪنجيشن ونڊو کي اڌ ڪري ٿو ۽ وصول ٿيل ڊپليڪيٽ ايڪن ذريعي نيٽ ورڪ ریکوري جي جڳهه کي طئي ڪرڻ لاءِ تيز بحالي واري حالت ۾ داخل ٿئي ٿو، ۽ پوءِ ڪنجيشن ونڊو کي وڌائڻ جاري رکي ٿو.

سست شروعات
جڏهن هڪ TCP ڪنيڪشن قائم ٿئي ٿو، ته ڪنجيشن ونڊو cwnd شروعاتي طور تي گهٽ ۾ گهٽ MSS (وڌ ۾ وڌ سيگمينٽ سائيز) ويليو تي سيٽ ڪئي ويندي آهي. هن طريقي سان، شروعاتي موڪلڻ جي شرح MSS/RTT بائيٽس/سيڪنڊ جي لڳ ڀڳ آهي. اصل دستياب بينڊوڊٿ عام طور تي MSS/RTT کان تمام گهڻي وڏي هوندي آهي، تنهن ڪري TCP بهترين موڪلڻ جي شرح ڳولڻ چاهي ٿو، جيڪا سست شروعات ذريعي حاصل ڪري سگهجي ٿي.

سست شروعات واري عمل ۾، ڪنجيشن ونڊو cwnd جي قيمت 1 MSS تائين شروع ڪئي ويندي، ۽ هر ڀيري جڏهن منتقل ٿيل پيڪٽ سيگمينٽ کي تسليم ڪيو ويندو، cwnd جي قيمت هڪ MSS وڌائي ويندي، يعني، cwnd جي قيمت 2 MSS ٿي ويندي. ان کان پوءِ، پيڪٽ سيگمينٽ جي هر ڪامياب ٽرانسميشن لاءِ cwnd جي قيمت ٻيڻي ڪئي ويندي آهي، ۽ انهي طرح. مخصوص واڌ جو عمل هيٺ ڏنل شڪل ۾ ڏيکاريو ويو آهي.

 نيٽ ورڪ ڪنجيشن ڪنٽرول

جڏهن ته، موڪلڻ جي شرح هميشه وڌي نه ٿي سگهي؛ واڌ کي ڪڏهن ختم ٿيڻو آهي. تنهن ڪري، موڪلڻ جي شرح ۾ واڌ ڪڏهن ختم ٿيندي؟ سست شروعات عام طور تي موڪلڻ جي شرح ۾ واڌ کي ڪيترن ئي طريقن مان هڪ ۾ ختم ڪري ٿي:

پهريون طريقو سست شروعات جي موڪلڻ جي عمل دوران پيڪٽ جي نقصان جو معاملو آهي. جڏهن هڪ پيڪٽ نقصان ٿئي ٿو، TCP موڪليندڙ جي ڪنجيشن ونڊو cwnd کي 1 تي سيٽ ڪري ٿو ۽ سست شروعات جي عمل کي ٻيهر شروع ڪري ٿو. هن نقطي تي، سست شروعات جي حد ssthresh جو تصور متعارف ڪرايو ويندو آهي، جنهن جي شروعاتي قيمت cwnd جي قيمت جو اڌ آهي جيڪا پيڪٽ نقصان پيدا ڪري ٿي. اهو آهي، جڏهن ڪنجيشن معلوم ٿئي ٿو، ssthresh جي قيمت ونڊو جي قيمت جو اڌ آهي.

ٻيو طريقو اهو آهي ته سڌو سنئون سست-شروعاتي حد ssthrash جي قدر سان لاڳاپو ڪيو وڃي. جيئن ته ssthrash جي قيمت ونڊو قدر جو اڌ آهي جڏهن ڪنجيشن معلوم ٿئي ٿي، پيڪٽ نقصان هر ڊبلنگ سان ٿي سگهي ٿو جڏهن cwnd ssthresh کان وڏو آهي. تنهن ڪري، اهو بهتر آهي ته cwnd کي ssthresh تي سيٽ ڪيو وڃي، جيڪو TCP کي ڪنجيشن ڪنٽرول موڊ تي سوئچ ڪرڻ ۽ سست-شروع کي ختم ڪرڻ جو سبب بڻجندو.

سست شروعات کي ختم ڪرڻ جو آخري طريقو اهو آهي ته جيڪڏهن ٽي غير ضروري ايڪز معلوم ٿين ٿا، ته TCP هڪ تيز ريٽرانسميشن انجام ڏئي ٿو ۽ بحالي واري حالت ۾ داخل ٿئي ٿو. (جيڪڏهن اهو واضح ناهي ته ٽي ACK پيڪٽ ڇو آهن، ته ان کي ريٽرانسميشن ميڪانيزم ۾ الڳ الڳ وضاحت ڪئي ويندي.)

رش کان بچڻ
جڏهن TCP ڪنجيشن ڪنٽرول اسٽيٽ ۾ داخل ٿئي ٿو، ته cwnd ڪنجيشن ٿريش ssthresh جي اڌ تي مقرر ڪيو ويندو آهي. ان جو مطلب آهي ته هر وقت پيڪٽ سيگمينٽ وصول ٿيڻ تي cwnd جي قيمت کي ٻيڻو نه ٿو ڪري سگهجي. ان جي بدران، هڪ نسبتاً قدامت پسند طريقو اختيار ڪيو ويندو آهي جنهن ۾ هر ٽرانسميشن مڪمل ٿيڻ کان پوءِ cwnd جي قيمت صرف هڪ MSS (وڌ ۾ وڌ پيڪٽ سيگمينٽ جي ڊيگهه) سان وڌي ويندي آهي. مثال طور، جيتوڻيڪ 10 پيڪٽ سيگمينٽ تسليم ڪيا وڃن، cwnd جي قيمت صرف هڪ MSS سان وڌندي. هي هڪ لڪير وارو واڌ ماڊل آهي ۽ ان ۾ واڌ تي هڪ مٿئين حد پڻ آهي. جڏهن پيڪٽ جو نقصان ٿئي ٿو، ته cwnd جي قيمت کي MSS ۾ تبديل ڪيو ويندو آهي، ۽ ssthresh جي قيمت cwnd جي اڌ تي مقرر ڪئي ويندي آهي. يا اهو MSS جي واڌ کي به روڪي ڇڏيندو جڏهن 3 بيڪار ACK جواب ملي ويندا آهن. جيڪڏهن cwnd جي قيمت کي اڌ ڪرڻ کان پوءِ به ٽي بيڪار acks ملي ويندا آهن، ته ssthresh جي قيمت کي cwnd جي اڌ قدر طور رڪارڊ ڪيو ويندو آهي ۽ تيز بحالي واري حالت داخل ڪئي ويندي آهي.

تيز بحالي
فاسٽ ریکوري اسٽيٽ ۾، ڪنجيشن ونڊو cwnd جي قيمت هر وصول ٿيل ريڊنڊنٽ ACK لاءِ هڪ MSS وڌائي ويندي آهي، يعني، ACK جيڪو تسلسل ۾ نه پهچندو آهي. اهو انهن پيڪٽ حصن کي استعمال ڪرڻ لاءِ آهي جيڪي نيٽ ورڪ ۾ ڪاميابي سان منتقل ڪيا ويا آهن ته جيئن ٽرانسميشن ڪارڪردگي کي ممڪن حد تائين بهتر بڻائي سگهجي.

جڏهن گم ٿيل پيڪٽ سيگمينٽ جو ACK اچي ٿو، TCP cwnd جي قيمت گھٽائي ٿو ۽ پوءِ ڪنجيشن کان بچڻ واري حالت ۾ داخل ٿئي ٿو. اهو ڪنجيشن ونڊو جي سائيز کي ڪنٽرول ڪرڻ ۽ نيٽ ورڪ ڪنجيشن کي وڌيڪ وڌائڻ کان بچڻ لاءِ آهي.

جيڪڏهن ڪنجيشن ڪنٽرول اسٽيٽ کان پوءِ ٽائم آئوٽ ٿئي ٿو، ته نيٽ ورڪ جي حالت وڌيڪ سنگين ٿي ويندي آهي ۽ TCP ڪنجيشن کان بچڻ واري اسٽيٽ کان سست-شروعاتي اسٽيٽ ڏانهن منتقل ٿي ويندو آهي. هن صورت ۾، ڪنجيشن ونڊو cwnd جي قيمت 1 MSS تي مقرر ڪئي وئي آهي، پيڪٽ سيگمينٽ جي وڌ ۾ وڌ ڊيگهه، ۽ سست-شروعاتي حد ssthresh جي قيمت cwnd جي اڌ تي مقرر ڪئي وئي آهي. ان جو مقصد اهو آهي ته نيٽ ورڪ جي بحالي کان پوءِ ڪنجيشن ونڊو جي سائيز کي بتدريج ٻيهر وڌايو وڃي ته جيئن ٽرانسميشن جي شرح ۽ نيٽ ورڪ ڪنجيشن جي درجي کي متوازن ڪري سگهجي.

خلاصو
هڪ قابل اعتماد ٽرانسپورٽ پروٽوڪول جي طور تي، TCP ترتيب نمبر، اعتراف، ٻيهر ٽرانسميشن ڪنٽرول، ڪنيڪشن مئنيجمينٽ ۽ ونڊو ڪنٽرول ذريعي قابل اعتماد ٽرانسپورٽ لاڳو ڪري ٿو. انهن مان، وهڪري ڪنٽرول ميڪانيزم موڪليندڙ پاران موڪليل ڊيٽا جي مقدار کي وصول ڪندڙ جي حقيقي وصول ڪرڻ جي صلاحيت جي مطابق ڪنٽرول ڪري ٿو، جيڪو نيٽ ورڪ ڪنجيشن ۽ ڪارڪردگي جي خرابي جي مسئلن کان بچي ٿو. ڪنجيشن ڪنٽرول ميڪانيزم موڪليندڙ پاران موڪليل ڊيٽا جي مقدار کي ترتيب ڏيندي نيٽ ورڪ ڪنجيشن جي واقعن کان بچي ٿو. ڪنجيشن ونڊو ۽ موڪلڻ واري ونڊو جا تصور هڪ ٻئي سان لاڳاپيل آهن، ۽ موڪليندڙ تي ڊيٽا جي مقدار کي ڪنجيشن ونڊو جي سائيز کي متحرڪ طور تي ترتيب ڏيڻ سان ڪنٽرول ڪيو ويندو آهي. سست شروعات، ڪنجيشن کان بچڻ ۽ تيز بحالي TCP ڪنجيشن ڪنٽرول الگورتھم جا ٽي مکيه حصا آهن، جيڪي نيٽ ورڪ جي گنجائش ۽ ڪنجيشن جي درجي کي ترتيب ڏيڻ لاءِ مختلف حڪمت عملين ذريعي ڪنجيشن ونڊو جي سائيز کي ترتيب ڏين ٿا.

ايندڙ حصي ۾، اسين TCP جي ٻيهر ٽرانسميشن ميڪانيزم جو تفصيل سان جائزو وٺنداسين. قابل اعتماد ٽرانسميشن حاصل ڪرڻ لاءِ ٻيهر ٽرانسميشن ميڪانيزم TCP جو هڪ اهم حصو آهي. اهو گم ٿيل، خراب ٿيل يا دير سان ڊيٽا کي ٻيهر ٽرانسميشن ڪندي ڊيٽا جي قابل اعتماد ٽرانسميشن کي يقيني بڻائي ٿو. ٻيهر ٽرانسميشن ميڪانيزم جي عملدرآمد جي اصول ۽ حڪمت عملي کي ايندڙ حصي ۾ تفصيل سان متعارف ڪرايو ويندو ۽ تجزيو ڪيو ويندو. ڏسندا رهو!


پوسٽ جو وقت: فيبروري-24-2025