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