TCP megbízhatósági átvitel
Mindannyian ismerjük a TCP protokollt, mint megbízható szállítási protokollt, de hogyan biztosítja ez a szállítás megbízhatóságát?
A megbízható átvitel eléréséhez számos tényezőt kell figyelembe venni, például az adatvesztést, az adatmásolást és a sorrenden kívüli töredékeket. Ha ezeket a problémákat nem lehet megoldani, a megbízható átvitel nem érhető el.
Ezért a TCP olyan mechanizmusokat alkalmaz, mint a sorszámozás, a visszaigazoló válasz, az újraküldés vezérlése, a kapcsolatkezelés és az ablakvezérlés a megbízható átvitel elérése érdekében.
Ebben a cikkben a TCP csúszóablakra, áramlásszabályozására és torlódásszabályozására összpontosítunk. Az újraküldési mechanizmust a következő szakasz külön tárgyalja.
Hálózati áramlásszabályozás
A hálózati folyamatvezérlés, vagy más néven hálózati forgalomvezérlés valójában a termelők és a fogyasztók közötti finom kapcsolat megnyilvánulása. Valószínűleg sokat találkoztál már ezzel a forgatókönyvvel a munkahelyeden vagy interjúkon. Ha a termelő termelési kapacitása jelentősen meghaladja a fogyasztó fogyasztási kapacitását, az a sor végtelen növekedését okozza. Súlyosabb esetben, ha a RabbitMQ üzenetek túlságosan felhalmozódnak, az a teljes MQ szerver teljesítményének romlását okozhatja. Ugyanez igaz a TCP-re is; ha nem ellenőrizzük, túl sok üzenet kerül a hálózatba, és a fogyasztók túllépik a kapacitásukat, míg a termelők továbbra is duplikált üzeneteket küldenek, ami nagyban befolyásolja a hálózat teljesítményét.
A jelenség megoldására a TCP egy mechanizmust biztosít a küldő számára, amely a vevő tényleges vételi kapacitása alapján szabályozza az elküldött adatok mennyiségét, ezt áramlásvezérlésnek nevezik. A vevő egy vételi ablakot, míg a küldő egy küldési ablakot tart fenn. Meg kell jegyezni, hogy ezek az ablakok csak egyetlen TCP-kapcsolatra vonatkoznak, és nem minden kapcsolat oszt meg egy ablakot.
A TCP egy fogadási ablakhoz tartozó változó használatával biztosítja az adatfolyam-vezérlést. A fogadási ablak jelzi a küldőnek, hogy mennyi gyorsítótár-terület áll még rendelkezésre. A küldő a fogadó tényleges vételi kapacitása alapján szabályozza az elküldött adatok mennyiségét.
A fogadó gazdagép értesíti a küldőt a fogadható adatok méretéről, a küldő pedig eddig a korlátig küldi el az adatokat. Ez a korlát az ablakméret, emlékszel a TCP fejlécre? Van egy fogadási ablak mező, amely azt jelzi, hogy a fogadó hány bájtot tud vagy hajlandó fogadni.
A küldő gazdagép rendszeresen küld egy ablakvizsgálati csomagot, amely annak ellenőrzésére szolgál, hogy a fogadó gazdagép továbbra is képes-e adatokat fogadni. Amikor a fogadó puffere túlcsordulás veszélyével néz szembe, az ablakméret kisebb értékre van állítva, hogy utasítsa a küldőt az elküldött adatok mennyiségének szabályozására.
Itt egy hálózati áramlásvezérlési ábra:
Hálózati torlódások szabályozása
Mielőtt bevezetnénk a torlódásvezérlést, meg kell értenünk, hogy a vételi ablak és a küldési ablak mellett létezik egy torlódási ablak is, amelyet főként arra használnak, hogy megoldják azt a problémát, hogy a küldő milyen sebességgel kezd el adatokat küldeni a vételi ablakba. Ezért a torlódási ablakot is a TCP küldő tartja fenn. Szükségünk van egy algoritmusra, amely eldönti, hogy mennyi adatot célszerű elküldeni, mivel a túl kevés vagy túl sok adat küldése nem ideális, innen ered a torlódási ablak fogalma.
Az előző hálózati áramlásvezérlésben elkerültük, hogy a küldő adatokkal töltse fel a fogadó gyorsítótárát, de nem tudtuk, mi történik a hálózatban. A számítógépes hálózatok jellemzően megosztott környezetben működnek. Ennek eredményeként hálózati torlódás léphet fel a többi hoszt közötti kommunikáció miatt.
Amikor a hálózat túlterhelt, ha továbbra is nagyszámú csomagot küldenek, az olyan problémákat okozhat, mint a csomagok késleltetése és elvesztése. Ezen a ponton a TCP újraküldi az adatokat, de az újraküldés növeli a hálózat terhelését, ami nagyobb késéseket és további csomagvesztést eredményez. Ez egy ördögi körbe kerülhet, és egyre nagyobb lesz.
Így a TCP nem hagyhatja figyelmen kívül, mi történik a hálózaton. Amikor a hálózat túlterhelt, a TCP feláldozza magát az általa küldött adatmennyiség csökkentésével.
Ezért javasolják a torlódásvezérlést, amelynek célja, hogy elkerülje a teljes hálózat feltöltését a küldőtől származó adatokkal. A küldő által küldendő adatmennyiség szabályozására a TCP definiál egy torlódási ablaknak nevezett fogalmat. A torlódásvezérlési algoritmus a hálózat torlódási fokának megfelelően módosítja a torlódási ablak méretét, hogy szabályozza a küldő által küldött adatmennyiséget.
Mi az a torlódási ablak? Mi köze ennek a küldési ablakhoz?
A torlódási ablak egy, a küldő által fenntartott állapotváltozó, amely meghatározza a küldő által küldhető adatmennyiséget. A torlódási ablak dinamikusan változik a hálózat torlódási szintjének megfelelően.
A küldő ablak (Sending Window) egy, a küldő és a fogadó között egyeztetett ablakméret, amely jelzi a fogadó által fogadható adatmennyiséget. A torlódási ablak és a küldő ablak összefüggenek; a küldő ablak általában megegyezik a torlódási és a fogadó ablakok minimumával, azaz swnd = min(cwnd, rwnd).
A torlódási ablak (cwnd) a következőképpen változik:
Ha nincs torlódás a hálózatban, azaz nem történik újraküldési időtúllépés, a torlódási ablak megnő.
Ha torlódás van a hálózatban, a torlódási ablak csökken.
A küldő úgy határozza meg a hálózat túlterheltségét, hogy megfigyeli, hogy az ACK visszaigazoló csomag a megadott időn belül megérkezik-e. Ha a küldő nem kapja meg az ACK visszaigazoló csomagot a megadott időn belül, akkor a hálózat túlterheltnek tekinthető.
A torlódási ablakon kívül itt az ideje megvitatni a TCP torlódásvezérlési algoritmust is. A TCP torlódásvezérlési algoritmus három fő részből áll:
Lassú kezdés:Kezdetben a cwnd torlódási ablaka viszonylag kicsi, és a küldő exponenciálisan növeli a torlódási ablakot, hogy gyorsan alkalmazkodjon a hálózat kapacitásához.
Torlódások elkerülése:Miután a torlódási ablak meghalad egy bizonyos küszöbértéket, a küldő lineárisan növeli a torlódási ablakot, hogy lelassítsa a torlódási ablak növekedési ütemét és elkerülje a hálózat túlterhelését.
Gyors felépülés:Torlódás esetén a küldő a torlódási ablakot a felére csökkenti, és gyors helyreállítási állapotba lép, hogy a fogadott duplikált nyugták alapján meghatározza a hálózati helyreállítás helyét, majd tovább növeli a torlódási ablakot.
Lassú kezdés
Amikor egy TCP-kapcsolat létrejön, a torlódási ablak (cwnd) kezdetben egy minimális MSS (maximális szegmensméret) értékre van beállítva. Így a kezdeti küldési sebesség körülbelül MSS/RTT bájt/másodperc. A ténylegesen elérhető sávszélesség általában sokkal nagyobb, mint az MSS/RTT, ezért a TCP meg akarja találni az optimális küldési sebességet, amelyet lassú indítással érhet el.
A lassú indítású folyamatban a torlódási ablak (cwnd) értéke 1 MSS-re inicializálódik, és minden alkalommal, amikor az elküldött csomagszegmens nyugtázásra kerül, a cwnd értéke egy MSS-sel növekszik, azaz a cwnd értéke 2 MSS lesz. Ezt követően a cwnd értéke minden egyes sikeres csomagszegmens-átvitel esetén megduplázódik, és így tovább. A specifikus növekedési folyamatot a következő ábra mutatja.
A küldési sebesség azonban nem növekedhet mindig; a növekedésnek valamikor véget kell érnie. Mikor ér véget a küldési sebesség növekedése? A lassú kezdés jellemzően többféleképpen is véget vet a küldési sebesség növekedésének:
Az első eset a lassú indítású küldési folyamat során fellépő csomagvesztés esete. Csomagvesztés esetén a TCP a küldő torlódási ablakát (cwnd) 1-re állítja, és újraindítja a lassú indítási folyamatot. Ezen a ponton bevezetésre kerül a lassú indítási küszöb (ssthresh) fogalma, amelynek kezdeti értéke a csomagvesztést generáló cwnd értékének fele. Vagyis torlódás észlelésekor az ssthresh értéke az ablakérték fele.
A második módszer a lassú kezdési küszöb (ssthresh) értékével való közvetlen korreláció. Mivel az ssthresh értéke a torlódás észlelésekor az ablakérték fele, minden egyes megduplázódásnál csomagvesztés léphet fel, amikor a cwnd nagyobb, mint az ssthresh. Ezért a legjobb, ha a cwnd értékét ssthresh-re állítja, aminek hatására a TCP torlódásvezérlési módba vált, és befejezi a lassú kezdést.
A lassú indítás utolsó lehetséges vége, ha három redundáns nyugtát észlel a TCP. Ilyenkor gyors újraküldést hajt végre, és helyreállítási állapotba lép. (Ha nem világos, hogy miért van három ACK csomag, azt külön ismertetjük az újraküldési mechanizmusban.)
Torlódások elkerülése
Amikor a TCP torlódásvezérlési állapotba lép, a cwnd a torlódási küszöb (ssthresh) felére van beállítva. Ez azt jelenti, hogy a cwnd értéke nem duplázható meg minden alkalommal, amikor egy csomagszegmens vétele megtörténik. Ehelyett egy viszonylag konzervatív megközelítést alkalmaznak, amelyben a cwnd értékét minden átvitel befejezése után csak egy MSS-sel (maximális csomagszegmens hossz) növelik. Például, még ha 10 csomagszegmens is nyugtázva van, a cwnd értéke csak egy MSS-sel fog növekedni. Ez egy lineáris növekedési modell, és a növekedésnek is van felső korlátja. Csomagvesztés esetén a cwnd értéke MSS-re változik, és az ssthresh értéke a cwnd felére van állítva. Vagy az MSS növekedését is leállítja, amikor 3 redundáns ACK válasz érkezik. Ha a cwnd értékének felezése után is három redundáns nyugta érkezik, az ssthresh értéke a cwnd értékének feleként lesz rögzítve, és a rendszer a gyors helyreállítási állapotba lép.
Gyors felépülés
Gyors helyreállítási állapotban a torlódási ablak (cwnd) értéke minden beérkező redundáns ACK, azaz nem sorrendben érkező ACK esetén egy MSS-sel nő. Ez azért van, hogy a hálózatban sikeresen továbbított csomagszegmenseket kihasználva a lehető legnagyobb mértékben javítsa az átviteli hatékonyságot.
Amikor az elveszett csomagszegmens visszaigazolása (ACK) megérkezik, a TCP csökkenti a cwnd értékét, majd torlódáskerülő állapotba lép. Ez a torlódási ablak méretének szabályozására és a hálózati torlódás további növelésének elkerülésére szolgál.
Ha a torlódásvezérlési állapot után időtúllépés történik, a hálózati helyzet súlyosabbá válik, és a TCP a torlódás elkerüléséről a lassú indítás állapotába lép át. Ebben az esetben a torlódási ablak (cwnd) értéke 1 MSS, a maximális csomagszegmens-hossz, az ssthresh lassú indítási küszöbérték pedig a cwnd fele. Ennek célja, hogy a hálózat helyreállása után a torlódási ablak méretét fokozatosan növelje, hogy kiegyensúlyozza az átviteli sebességet és a hálózati torlódás mértékét.
Összefoglalás
Megbízható szállítási protokollként a TCP megbízható szállítást valósít meg sorszámozás, nyugtázás, újraküldés-vezérlés, kapcsolatkezelés és ablakvezérlés alapján. Ezek közül az áramlásszabályozási mechanizmus a küldő által küldött adatmennyiséget a vevő tényleges vételi kapacitása szerint szabályozza, ami elkerüli a hálózati torlódás és a teljesítményromlás problémáit. A torlódásszabályozási mechanizmus a küldő által küldött adatmennyiség beállításával kerüli el a hálózati torlódások előfordulását. A torlódási ablak és a küldő ablak fogalmai összefüggenek egymással, és a küldőnél lévő adatmennyiséget a torlódási ablak méretének dinamikus beállításával szabályozzák. A lassú indítás, a torlódás elkerülése és a gyors helyreállítás a TCP torlódásszabályozási algoritmusának három fő része, amelyek különböző stratégiákon keresztül állítják be a torlódási ablak méretét, hogy alkalmazkodjanak a hálózat kapacitásához és torlódási fokához.
A következő részben részletesen megvizsgáljuk a TCP újraküldési mechanizmusát. Az újraküldési mechanizmus a TCP fontos része a megbízható átvitel eléréséhez. Az elveszett, sérült vagy késleltetett adatok újraküldésével biztosítja az adatok megbízható továbbítását. Az újraküldési mechanizmus megvalósítási elvét és stratégiáját a következő részben részletesen bemutatjuk és elemezzük. Maradjanak velünk!
Közzététel ideje: 2025. február 24.