TCP құпия қаруы: желілік ағынды басқару және желінің бітелуін бақылау

TCP сенімділігі
Біз барлық TCP хаттамасымен таныспыз, бірақ сенімді көлік хаттамасы ретінде, бірақ ол көліктің сенімділігін қалай қамтамасыз етеді?

Дауыстық беріліске қол жеткізу үшін көптеген факторларды, мысалы, деректерді сыбайлас жемқорлық, жоғалу, қайталану және бұйымдардан тыс шостарды ескеру қажет. Егер бұл проблемалар шешілмесе, сенімді таратуға болмайды.

Сондықтан, TCP сенімді беріліске қол жеткізу үшін реттік нөмір, растау, растау, қайта жіберу, қосылуды басқару, қосылуды басқару және терезелерді басқару сияқты механизмдерді қолданады.

Бұл жұмыста біз TCP-ді жылжымалы терезеге, ағынды басқаруға және толығымен бақылауға назар аударамыз. Қайта жіберу механизмі келесі бөлімде бөлек қарастырылған.

Желілік ағынды басқару
Желілік ағындарды басқару немесе желілік трафикті басқару дегеніміз - өндірушілер мен тұтынушылар арасындағы нәзік қатынастардың көрінісі. Сіз бұл сценарийді жұмыста немесе сұхбатта көп кездестірдіңіз. Егер өндірушінің тұтынушының тұтынылу қабілетінен асып кетсе, ол тұтынуға мүмкіндік береді, бұл кезекке белгісіз өседі. Неғұрлым байсалды жағдайда, сіз Rabbitmq хабарламалары тым көп болған кезде, ол тым көп жиналған кезде, ол бүкіл MQ серверінің өнімділігіне әкелуі мүмкін екенін білесіз. TCP үшін де солай; Егер құсбелгі қойылса, көптеген хабарламалар желіге қосылады, ал тұтынушылар олардың сыйымдылығынан асып кетеді, ал өндірушілер желідің жұмысына айтарлықтай әсер етеді.

Осы құбылысты шешу үшін TCP жіберушіге ағынның бақылауы деп аталатын ресивердің нақты қабылдау сыйымдылығы негізінде жіберілген деректердің мөлшерін басқару механизмін ұсынады. Ресивер қабылдау терезесін ұстайды, ал жіберуші жіберуші терезені ұстайды. Айта кету керек, бұл терезелер тек бір TCP қосылымына арналған және барлық қосылымдар терезені бөлісе бермейді.

TCP қабылдау терезесі үшін айнымалы көмегімен ағынмен басқаруды қамтамасыз етеді. Қабылдау терезесі жіберушіге кэштің кеңістігі қанша қол жетімді екендігі туралы нұсқау береді. Жіберуші қабылдағыштың нақты қабылдау қабілеттілігіне сәйкес жіберілген мәліметтердің мөлшерін бақылайды.

Ресивер хосты жіберушіге ол алатын мәліметтердің мөлшерін ескереді және жіберуші осы шектеуге жіберіледі. Бұл шектеу терезе өлшемі болып табылады, TCP тақырыбын есте сақтаңыз ба? Алынған терезе өрісі бар, ол ресивердің байттарының санын көрсету үшін пайдаланылады немесе алуға дайын.

Жіберушінің хосты мерзімді түрде мерзімді түрде терезе Packet-ті жібереді, ол ресивер хостының деректерді қабылдай алмайтындығын анықтау үшін қолданылады. Ресивердің буфері толып кету қаупі бар болған кезде, терезе өлшемі Жіберушіге жіберілген деректердің мөлшерін басқаруды үйрету үшін кішірек мәнге орнатылады.

Мұнда желілік ағындарды басқару схемасы бар:

Жол қозғалысын бақылау

Желілік бітелуді бақылау
Топтарды бақылауды енгізер алдында, қабылдау терезесі мен жіберу терезесіне қосымша, сонымен қатар, көбінесе жіберушіге деректерді қабылдауды бастай бастайды. Сондықтан, Топтарды TCP жіберуші де жүргізеді. Бізге қанша деректерді жіберу үшін қажет екенін шешуге арналған алгоритм қажет, өйткені аз немесе тым көп мәліметтерді жібереді, демек, кептелу терезесінің тұжырымдамасы идеалды емес.

Алдыңғы желілік ағынмен басқарылатын, бізге қандай жолмен жіберуші қабылдағыштың кэшін деректермен толтырды, бірақ біз желіде не болып жатқанын білмедік. Әдетте, компьютерлік желілер ортақ ортада. Нәтижесінде, басқа хосттар арасындағы байланысқа байланысты желінің кептелісі болуы мүмкін.

Желі толып кеткен кезде, егер пакеттердің көп мөлшері жіберілсе, онда ол пакеттердің кідірісі мен жоғалуы сияқты проблемаларға әкелуі мүмкін. Осы кезде TCP деректерді қайта жібереді, бірақ қайта жіберу желідегі жүктемені арттырады, нәтижесінде үлкен кідірістер мен көбірек пакеттік шығындар пайда болады. Бұл қатал циклға түсіп, үлкенірек бола алады.

Осылайша, TCP желіде не болып жатқанын елемеуге болмайды. Желі кептеліп қалған кезде, TCP жіберілген мәліметтердің мөлшерін азайту арқылы құрбан етеді.

Сондықтан, бүкіл желіні жіберушіден деректерді толтыруға жол бермеуге бағытталған, ол жабдықты бақылау ұсынылады. Жіберуші жіберуі керек деректердің мөлшерін реттеу үшін TCP жинау терезесі деп аталатын тұжырымдаманы анықтайды. Кептелуді басқару алгоритмі жиналушы терезенің өлшемін Жіберуші жіберген деректердің мөлшерін бақылау үшін желінің бітелу дәрежесіне сәйкес реттейді.

Кептеліс терезесі дегеніміз не? Жіберу терезесімен не істеу керек?

Тасшөптің терезесі - жіберушіге жіберілетін мемлекеттік айнымалы, ол жіберуші жібере алатын мәліметтердің мөлшерін анықтайды. Топтама терезесі желінің кептелу деңгейіне сәйкес динамикалық түрде өзгереді.

Жіберу терезесі - бұл алушы мен қабылдағыштың арасындағы келісілген, ресивердің мөлшері туралы келісілген терезе өлшемі. Тіркелу терезесі мен жіберу терезесі байланысты; Жіберу терезесі әдетте кептеліс пен қабылдау терезелерінің ең азы, яғни SWND = MIN (CWnd, RWnd).

Кірген терезе CWnd келесідей өзгереді:

Егер желіде кептелу болмаса, яғни қайта жіберудің күту уақыты болмайды, толып кету терезесі артады.

Егер желіде кептелу болса, кептелу терезесі азаяды.

Жіберуші желінің ACK растау пакеті көрсетілген уақытта алынғанын бақылау арқылы жиналғанын анықтайды. Егер жіберуші ACK растау пакетін көрсетілген уақытта қабылдамаса, желі толып кеткен деп саналады.

Тасшөптің терезесіне қосымша, TCP бітімін басқару алгоритмін талқылайтын кез келді. TCP бітелуін бақылау алгоритмі үш негізгі бөліктен тұрады:

Баяу Бастау:Бастапқыда, CWnd бітелуі терезесі салыстырмалы түрде кішкентай, ал жіберуші желінің сыйымдылығына тез бейімделу үшін бітелу терезесін арттырады.
Кептелісті болдырмау:Тіркелу терезесі белгілі бір шекте асып кеткеннен кейін, жіберуші толып жатқан терезені кептелу терезесінің өсу қарқынын баяулату және желіні шамадан тыс жүктемеңіз.
Жылдам қалпына келтіру:Егер кептеліс пайда болса, жіберуші жиналушы терезені жартылай бөліп, оны алынған қайталанатын ACKKS арқылы желіні қалпына келтірудің орнын анықтау үшін, тез қалпына келтіру күйіне енеді, содан кейін кептелу терезесін арттыруды жалғастырады.

Баяу басталу
TCP қосылымы орнатылған кезде, CWnd кептелісі терезесі бастапқыда ең аз MSS (максималды сегменттік өлшем) мәніне орнатылады. Осылайша, бастапқы жіберу жылдамдығы MSS / RTT байт / секундқа қатысты. Нақты қол жетімді өткізу қабілеті әдетте MSS / RTT-ге қарағанда әлдеқайда үлкен, сондықтан TCP баяу бастауға болатын оңтайлы жіберу жылдамдығын табғысы келеді.

Баяу басталу процесінде CWnd CWnd терезесінің мәні 1 АМС-қа дейін, ал әркелгілік пакет сегменті расталады, әр уақытта CWnd мәні бір АСС-қа көбейеді, яғни CWnd мәні 2 АМ дейін болады. Осыдан кейін, CWnd мәні пакеттік сегменттің әр сәтті берілуіне және т.б. үшін екі есе өсті. Нақты өсу процесі келесі суретте көрсетілген.

 Желілік бітелуді бақылау

Алайда, жіберу ставкасы әрдайым өсе алмайды; Өсім біраз уақыт аяқталуы керек. Сонымен, жіберу жылдамдығы қашан аяқталады? Баяу басталу әдетте жіберу жылдамдығын бірнеше тәсілдердің бірінде аяқтайды:

Бірінші әдіс - баяу басталу процесі кезінде пакеттік жоғалту жағдайы. Пакеттік жоғалту болған кезде, TCP жіберушінің кептелісі терезесін 1-ге орнатады және баяу басталу процесін қайта бастайды. Осы кезде Ssthresh-тің баяу басталуының білуі туралы түсінік енгізілген, оның бастапқы мәні пакеттің жоғалуын тудыратын CWnd мәнінің жартысы болатын. Яғни, кептелу анықталған кезде, SSTHRESH мәні терезе мәнінің жартысы болып табылады.

Екінші әдіс - баяу басталу шекті Ssthresh мәнімен тікелей байланыстыру. Ssthresh мәні терезе мәнінің жартысы болып табылады Сондықтан, Ssthresh-ке орнату керек, бұл TCP-ны кептелістендіру режиміне ауысады және баяу бастауға мүмкіндік береді.

Басталудың соңғы әдісі аяқталуы мүмкін, егер үш артық ACKS анықталған болса, TCP тез қайта жіберуді жүзеге асырады және қалпына келтіру күйін енгізеді. (Егер неге ACK пакеттері неге бар екені анық болмаса, оны қайта жіберу механизмінде бөлек түсіндіріледі.)

Кептелісті болдырмау
TCP Кептелетін басқару күйіне енгенде, CWnd кептелу шекті сстриштің жартысына орнатылады. Бұл Packet сегменті алған сайын CWnd мәнін екі есеге арттыруға болмайды дегенді білдіреді. Оның орнына, салыстырмалы түрде консервативті тәсіл қабылданады, оның ішінде CWnd мәні тек бір MSS-ге көбейтіледі (пакеттік пакеттік сегменттің ұзындығы), әр берілу аяқталғаннан кейін. Мысалы, 10 пакеттік сегменттер мойындалған болса да, CWnd мәні бір MSS-ге көбейеді. Бұл сызықтық өсудің моделі, сонымен қатар оның өсуіне байланысты. Пакеттік шығын болған кезде, CWnd мәні АЖ-ге өзгертіледі, ал SSTHRESH мәні CWnd-ге орнатылады. Немесе ол MSS-тің 3 артық жұмысы қабылданған кезде тоқтатылады. Егер CWnd мәнін екі есе азайтқаннан кейін үш артық ACKS алса, SSTHRESH мәні CWnd және жылдам қалпына келтіру күйінің жартысына ауыстырылады.

Жылдам қалпына келтіру
Жылдам қалпына келтіру күйінде, CWnd CWnd-дің мәні әрбір қабылданған ACK үшін бір АСС-қа көбейеді, яғни, бірізділікке келмейтін ACK. Бұл мүмкіндігінше берілу тиімділігін арттыру үшін желіде сәтті жіберілген пакеттік сегменттерді пайдалану.

Жоғалған пакеттік сегменттің ACK келгенде, TCP CWnd мәнін азайтады, содан кейін жиналуға тыйым салу күйіне енеді. Бұл бітелу терезесінің мөлшерін бақылау және желінің кептелісін одан әрі арттырудан аулақ болу керек.

Егер кептелуді басқару күйінен кейін күту уақыты орын алса, желі жағдайы байыпты бола түссе және TCP жиналуды болдырмау күйінен баяу бастама күйіне ауысады. Бұл жағдайда CWnd CWnd терезесінің мәні 1 АМС, пакеттік сегменттің максималды ұзындығы және Ssthresh-тің баяу басталудың шекті мәні CWnd-ге орнатылады. Мұның мақсаты - желінің берілуін және желілік бітелу дәрежесін теңестіру үшін жиналу терезесінің мөлшерін біртіндеп арттыру.

Қысқаша мазмұндама
TCP сенімді көліктік протокол ретінде TCP сенімді көлікті, растауды, қайта жіберуді басқару, қосылуды басқару, қосылуды басқару және терезе бойынша сенімді тасымалдауды жүзеге асырады. Олардың ішінде ағынды бақылау тетігі Жіберушінің нақты қабылдау қабілетіне сәйкес жіберген деректердің көлемін басқарады, бұл желінің кептелісі және өнімділіктің нашарлауы проблемаларынан аулақ болады. Кептелуді бақылау тетігі Жіберуші жіберген деректердің мөлшерін түзету арқылы желілік жиналудың пайда болуына жол бермейді. Тіркелу терезесі мен жіберу терезесінің ұғымдары бір-бірімен байланысты, ал жіберушідегі деректер саны бітімгер терезенің өлшемін динамикалық түрде реттеу арқылы басқарылады. Баяу басталу, кептелісті болдырмау және тез қалпына келтіру TCP кептелісін басқару алгоритмінің үш негізгі бөлігі болып табылады, бұл толығырақ терезенің мөлшерін желінің сыйымдылығы мен кептелуге бейімделуге бейімделетін әр түрлі стратегиялар арқылы реттеледі.

Келесі бөлімде біз TCP-нің қайта жіберу механизмін егжей-тегжейлі тексереміз. Қайта жіберу механизмі TCP-дің сенімді берілуіне жету үшін маңызды бөлігі болып табылады. Ол жоғалған, бүлінген немесе кешіктірілген мәліметтерді қайта жіберу арқылы деректердің сенімді берілуін қамтамасыз етеді. Іске асыру қағидаты мен трансляция тетігінің стратегиясы келесі бөлімде егжей-тегжейлі тексеріліп, талданады. Бізбен бірге қалыңыз!


POST TIME: Feb-24-2025