TCP ишенимдүүлүк ташуу
Баарыбыз TCP протоколун ишенимдүү транспорттук протокол катары билебиз, бирок ал транспорттун ишенимдүүлүгүн кантип камсыз кылат?
Ишенимдүү берүүнү камсыз кылуу үчүн маалыматтардын бузулушу, жоголушу, кайталанышы жана иретсиз үзүндүлөр сыяктуу көптөгөн факторлорду эске алуу керек. Эгерде бул көйгөйлөр чечилбесе, ишенимдүү берүүнү камсыз кылуу мүмкүн эмес.
Ошондуктан, TCP ишенимдүү берүүнү камсыз кылуу үчүн ырааттуулук номери, тастыктоо жообу, кайра жөнөтүүнү башкаруу, байланышты башкаруу жана терезени башкаруу сыяктуу механизмдерди колдонот.
Бул макалада биз TCPтин жылма терезесине, агымдарды башкарууга жана тыгындарды башкарууга токтолобуз. Кайра берүү механизми кийинки бөлүмдө өзүнчө каралат.
Тармак агымын башкаруу
Тармак агымын башкаруу же Тармак трафигин башкаруу деп аталган нерсе чындыгында өндүрүүчүлөр менен керектөөчүлөрдүн ортосундагы назик мамиленин көрүнүшү. Сиз бул сценарийди жумушта же маектешүүлөрдө көп кездештирген чыгарсыз. Эгерде өндүрүүчүнүн өндүрүү мүмкүнчүлүгү керектөөчүнүн керектөө мүмкүнчүлүгүнөн бир топ ашып кетсе, анда кезек чексиз көбөйөт. Оорураак учурда, RabbitMQ билдирүүлөрү өтө көп үйүлүп калганда, бүтүндөй MQ серверинин иштешинин начарлашына алып келиши мүмкүн экенин билишиңиз мүмкүн. TCP үчүн да ушундай; эгерде текшерилбесе, тармакка өтө көп билдирүүлөр киргизилет жана керектөөчүлөр өздөрүнүн сыйымдуулугунан ашып кетишет, ал эми өндүрүүчүлөр кайталанган билдирүүлөрдү жөнөтө беришет, бул тармактын иштешине чоң таасирин тийгизет.
Бул кубулушту чечүү үчүн, 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 оптималдуу жөнөтүү ылдамдыгын тапкысы келет, буга жай баштоо аркылуу жетишүүгө болот.
Жай баштоо процессинде, тыгын терезесинин cwnd мааниси 1 MSSке инициалдашат жана берилген пакет сегменти ар бир жолу таанылганда, cwnd мааниси бир MSSке көбөйөт, башкача айтканда, cwnd мааниси 2 MSSке айланат. Андан кийин, пакет сегментинин ар бир ийгиликтүү өткөрүлүшү үчүн cwnd мааниси эки эсе көбөйөт жана башкалар. Өсүүнүн конкреттүү процесси төмөнкү сүрөттө көрсөтүлгөн.
Бирок, жөнөтүү ылдамдыгы дайыма эле өсө бербейт; өсүү качандыр бир убакта аякташы керек. Ошентип, жөнөтүү ылдамдыгынын өсүшү качан аяктайт? Жай баштоо, адатта, жөнөтүү ылдамдыгынын өсүшүн бир нече жол менен токтотот:
Биринчи жол - бул жай баштоо жөнөтүү процессинде пакеттин жоголушу. Пакет жоголгондо, TCP жөнөтүүчүнүн тыгын терезеси cwndди 1ге коюп, жай баштоо процессин кайра баштайт. Бул жерде, баштапкы мааниси пакеттин жоголушун пайда кылган cwnd маанисинин жарымына барабар болгон жай баштоо босогосу ssthresh түшүнүгү киргизилет. Башкача айтканда, тыгын аныкталганда, ssthresh мааниси терезе маанисинин жарымына барабар.
Экинчи жол - жай баштоо босогосунун ssthresh мааниси менен түздөн-түз корреляциялоо. Тыгын аныкталганда ssthresh мааниси терезе маанисинин жарымына барабар болгондуктан, cwnd ssthreshтен чоң болгондо ар бир эки эселенген сайын пакет жоголушу мүмкүн. Ошондуктан, cwndди ssthreshке койгон жакшы, бул TCPтин тыгынды башкаруу режимине өтүп, жай баштоону токтотушуна алып келет.
Жай баштоонун акыркы жолу - үч ашыкча ACK аныкталса, TCP тез кайра жөнөтүүнү аткарып, калыбына келтирүү абалына өтөт. (Эгерде эмне үчүн үч ACK пакети бар экени түшүнүксүз болсо, анда ал кайра жөнөтүү механизминде өзүнчө түшүндүрүлөт.)
Тыгындардын алдын алуу
TCP тыгынды көзөмөлдөө абалына киргенде, cwnd тыгын босогосунун жарымына коюлат sthresh. Бул пакет сегменти алынган сайын cwnd маанисин эки эсеге көбөйтүүгө болбойт дегенди билдирет. Анын ордуна, ар бир берүү аяктагандан кийин cwnd мааниси бир гана MSSке (пакет сегментинин максималдуу узундугу) көбөйгөн салыштырмалуу консервативдүү ыкма колдонулат. Мисалы, 10 пакет сегменти таанылса да, cwnd мааниси бир гана MSSке көбөйөт. Бул сызыктуу өсүү модели жана анын өсүүнүн жогорку чеги бар. Пакет жоголгондо, cwnd мааниси MSSке өзгөртүлөт жана sthresh мааниси cwnd жарымына коюлат. Же болбосо, ал 3 ашыкча ACK жообу алынганда MSSтин өсүшүн токтотот. Эгерде cwnd маанисин эки эсеге азайткандан кийин дагы эле үч ашыкча ACK алынса, sthresh мааниси cwnd маанисинин жарымы катары жазылат жана тез калыбына келтирүү абалы киргизилет.
Тез калыбына келтирүү
Тез калыбына келтирүү абалында, ар бир алынган ашыкча ACK, башкача айтканда, ырааттуулук менен келбеген ACK үчүн тыгын терезесинин cwnd мааниси бир MSSке көбөйтүлөт. Бул тармакта ийгиликтүү өткөрүлүп берилген пакет сегменттерин колдонуу менен өткөрүүнүн натыйжалуулугун мүмкүн болушунча жогорулатуу үчүн жасалат.
Жоголгон пакет сегментинин ACK келгенде, TCP cwnd маанисин азайтып, андан кийин тыгынды болтурбоо абалына өтөт. Бул тыгын терезесинин өлчөмүн көзөмөлдөө жана тармактын тыгынын андан ары көбөйүшүнө жол бербөө үчүн керек.
Эгерде тыгынды көзөмөлдөө абалынан кийин тайм-аут пайда болсо, тармактын абалы ого бетер оорлошуп, TCP тыгынды болтурбоо абалынан жай баштоо абалына өтөт. Бул учурда, тыгын терезесинин cwnd мааниси 1 MSSке, пакет сегментинин максималдуу узундугуна жана жай баштоо босогосунун ssthresh мааниси cwndдин жарымына коюлат. Мунун максаты - тармак калыбына келгенден кийин тыгын терезесинин өлчөмүн акырындык менен көбөйтүү, өткөрүү ылдамдыгын жана тармактын тыгынынын даражасын тең салмактоо.
Кыскача маалымат
Ишенимдүү транспорттук протокол катары TCP ырааттуулук номери, таануу, кайра берүү башкаруусу, туташууну башкаруу жана терезе башкаруусу боюнча ишенимдүү транспортту ишке ашырат. Алардын арасында агым башкаруу механизми жөнөтүүчү тарабынан жөнөтүлгөн маалыматтардын көлөмүн кабыл алуучунун чыныгы кабыл алуу кубаттуулугуна ылайык көзөмөлдөйт, бул тармактын тыгыны жана иштин начарлашы көйгөйлөрүнөн качууга мүмкүндүк берет. Тыгынды башкаруу механизми жөнөтүүчү тарабынан жөнөтүлгөн маалыматтардын көлөмүн тууралоо менен тармактын тыгынынын пайда болушуна жол бербейт. Тыгылыш терезеси жана жөнөтүү терезеси түшүнүктөрү бири-бири менен байланыштуу жана жөнөтүүчүдөгү маалыматтардын көлөмү тыгын терезесинин өлчөмүн динамикалык түрдө тууралоо менен башкарылат. Жай баштоо, тыгынды болтурбоо жана тез калыбына келтирүү - бул TCP тыгынды башкаруу алгоритминин үч негизги бөлүгү, алар тармактын сыйымдуулугуна жана тыгын даражасына ылайыкташуу үчүн ар кандай стратегиялар аркылуу тыгын терезесинин өлчөмүн тууралашат.
Кийинки бөлүмдө биз TCPтин кайра берүү механизмин кененирээк карап чыгабыз. Кайра берүү механизми ишенимдүү берүү үчүн TCPтин маанилүү бөлүгү болуп саналат. Ал жоголгон, бузулган же кечиктирилген маалыматтарды кайра берүү менен маалыматтардын ишенимдүү берилишин камсыз кылат. Кайра берүү механизмин ишке ашыруу принциби жана стратегиясы кийинки бөлүмдө кененирээк тааныштырылат жана талданат. Биз менен бирге болуңуз!
Жарыяланган убактысы: 2025-жылдын 24-февралы

