260 likes | 479 Views
TCP protokoll. Torlódáskezelés. A szállítási protokoll (TCP). Feladata: hibamentes kommunikáció (end-to-end) Funkciók: fragmentálás/defragmentálás (bitfolyam tördelése csomagokra) sorrendhelyesség adatvesztés nélkül hibajavítás (ismétlés) torlódásvezérlés és torlódásvédelem.
E N D
TCP protokoll Torlódáskezelés
A szállítási protokoll (TCP) Feladata: hibamentes kommunikáció (end-to-end) Funkciók: • fragmentálás/defragmentálás (bitfolyam tördelése csomagokra) • sorrendhelyesség • adatvesztés nélkül • hibajavítás (ismétlés) • torlódásvezérlés és torlódásvédelem
A torlódás megközelítése • End-to-end: • hálozati visszajelzés nélkül • A kapcsolat két végén levő rendszer figyeli a veszteségeket, késéseket (TCP) • Network assisted: • A routerek visszajeleznek a végrendszereknek (egy küldési sebességet is ajánlanak)
A TCP torlódásvezérlése • Megnyílvánulások: • Csomagvesztés • Hosszú késések (felsorakozás a routerek buffereiben) • A TCP torlódásvezérlést az 1980-as évek végén Van Jacobson vezette be az internetbe, kb 8 évre miután a TCP/IP protokollcsomag megjelent. • Nem volt sikere, rögtön a megjelenése után az egész internet a nagy torlódásoktól szemvedett.A felhasználók által a hálózatba szúrt adatok felgyorsultak, ezzel túlterhelve a routereket • Lényege az hogy a vonal végein levő rendszerek kiprobálják a hálózat kapacitását annak érdekében hogy pontosan annyi adatot tudjanak egyszerre küldeni a hálózaton keresztül amennyit az megbir.
Fogalmak • Szegmens – egy TCP/IP csomag amely adatot, nyugtát vagy mindkettot tartalmaz • Küldőfél maximális szegmens mérete: (SENDER MAXIMUM SEGMENT SIZE (SMSS) ) a legnagyobb szegmens mérete amit a küldő elkuldhet. Ez a méret függhet a hálozattól, az MTU útkereső algoritmustol, az RMSS-től, stb. A mérethez nem számoljuk hozzá a TCP/IP headerjeinek és opcióinak méretét.
Fogalmak • Fogadófél maximális szegmens mérete: (RECEIVER MAXIMUM SEGMENT SIZE (RMSS)) a legnagyobb szegmens mérete amit a fogadófél elfogad. Ezt az értéket a küldő fél a kapcsolat felállításánál kapja meg a fogadótol egy ugynevezett MSS opció segítségével. Ha ez az opció nincs meghatározva, akkor a méret 536 byte lesz. A mérethez nem számoljuk hozzá a TCP/IP headerjeinek és opcióinak méretét.
Fogalmak • Teljes méretű szegmens: MSS amely a megengedett legnagyobb mennyiségű adatbyteot tartalmazza (pl. az a szegmens, amely SMSS byte adatot tartalmaz.) • Fogadó ablakméret: (RWND) a fogadó által utoljára hírdetett ablakméret.
Fogalmak • Torlódási ablakméret (CWND): egy TCP státusváltozó, amely meghatározza azt az adatmennyiséget amelyet a TCP elkuldhet. A protokoll nem küldhet olyan adatot, amelynek a sorszáma nagyobb mint a legnagyobb lenyugtázott csomag sorszámának valamint a CWND és az RWND minimumának az összege.
Fogalmak • Kezdeti ablakméret (IW): a küldő torlodási ablakmérete miután a kapcsolatteremtés megtörtént. • Veszteség ablakméret (LW): a torlódási ablakméret abban a pillanatban mikor a küldő veszteséget érzékel az újraküldési timer által.
Fogalmak • Ujraküldési ablakméret (RW): a torlódási ablakméret abban a pillanatban mikor a küldő elkezdi újraküldeni az adatokat. Csak a SLOW-START algoritmus használatánál alkalmas. • Flight size: az az adatméret amelyre a küldő még nem kapott nyugtát.
Torlódásvezérlő algoritmusok • SLOW START • CONGESTION AVOIDANCE • FAST RETRANSMIT • FAST RECOVERY
SLOW START,CONGESTION AVOIDANCE • A küldő által használt algoritmusok, amellyel a hálozatba vitt adatok mennyiségét szabályozzák. • E két algoritmus működését a CWND és a RWND változók minimumai határozzák meg. • CWND az az adatmennyiség amelyet a küldő küldhet a nyugta megkapásáig. • SSTHRESH státusváltozó, meghatározza hogy a küldő a SS illetve a CA algoritmust használja
Működés • Mire jó a SS algoritmus? • Az adatok egy ismeretlen hálozaton való küldése előtt a protokoll ki kell próbálja az illető utvonal kapacitását, azért hogy a küldött adatsorozat ne legyen nagyobb mint amennyit a hálozat elbir. • Miután veszteséget érzékel a küldő, a protokoll ujra el kell végezze a fenti műveletet.
Működés • SSTHRESH: kezdetben relativ nagy (pl. egyenlő a hirdetett ablakmérettel.), csökken ha torlódás jön létre. • SS alatt a protokoll növeli a CWND-t legtöbb SMSS-el (tht exponenciálisan) minden megkapott nyugtára amely új adat elérkezését jelzi. SS végét a CWND és SSTHRESH változók egyenlősége jelzi, illetve az, ha CWND nagyobb mint SSTHRESH.
Működés • CA alatt minden nem duplikált nyugta érkezésekor a CWND a következő módon változik: CWND += SMSS*SMSS/CWND (1) • Mikor a TCP küldő veszteséget érzékel: SSTHRESH = max (FlightSize / 2, 2*SMSS) (2) • Timeout eseténCWND értékét kötelező módon LW értékénél kisebb vagy vele egyenlő értékre kell állítani. LW mérete mindig 1 teljes méretű szegmens függetlenül az IW értékétől. Tehát, miután ujraküldi az elveszett szegmenseket, a TCP küldő megint a SS algoritmust használja ahhoz hogy növelje az ablakot az aktuális méretéről az SSTHRESH értékéig, azután pedig áttér a CA algoritmusra.
Host A Host B one segment RTT two segments four segments time Példa TCP Slow Start
Fast Retransmit/Fast Recovery • Egy TCP fogadónak rögtön jeleznie kell egy duplikált nyugta segítségével a TCP küldőnek ha egy szegmens sorszáma nem egyezik meg a várt szegmens sorszámával. • A TCP küldőnek egy duplikált nyugta jelentheti: • Elveszett szegmensek: ebben az esetben minden szegmens az elveszett szegmens után egy duplikált nyugtát idéz elő a fogadó részéről. • A hálozat átrendezi a szegmenseket • A hálozat duplikálja az adat illetve a nyugtákat tartalmazó szegmenseket
Működés • 3 duplikált nyugta után (4 nyugta, amiből az utolsó 3 az első duplikáltja) a küldő újraküldi az elveszettnek bizonyult szegmenst. • Nem várja meg a timeoutot • Miután a Fast Retransmit algoritmus ujraküldi az elveszett szegmenst, a Fast Recovery algoritmus átveszi a feladatot addig, míg egy nem duplikált nyugta érkezik.
Működés • A FR és FR algoritmusok általában a következő képpen vannak együtt implementálva: • Mikor a harmadik duplikált nyugta megérkezett, azSSTHRESH változóta 2. egyenlőség által megadott értéknél nem nagyobb értékre állítja. • Az elveszett szegmenst ujraküldi majdCWND értékétSSTHRESH +3*SMSS-re állítja. (megszorozza a torlódási ablak méretét a szegmensek számával, amelyek elhagyták a hálozatot és a fogadó bufferjébe kerültek)
Működés • Minden duplikált nyugtára, megnöveli CWND-t SMSS-el. (megnöveli az ablakméretet egy szegmens méretével, szegmens amely elhagyta a hálozatot) • Elküldi a szegmenst ha a CWND új értéke és a fogadó hírdetett ablakmérete megengedi. • Mikor egy nem duplikált nyugta érkezik, a CWND értékét SSTHRESH-re állítja(SSTHRESH értéke az 1. lépésből). A fenti nyugta az a válasz kell legyen előzőleg elveszett és újraküldött szegmensre. Ugyanakkor ez a nyugta konfirmálja azokat a szegmenseket, amik az elveszett szegmens és a 3.ik duplikált nyugta között lettek elküldve.
Inaktív kapcsolatok újraindítása • Relatív hosszú idejű inaktivitás után a fent említett algoritmusok megengedik a hálózat kapacitásának nem megfelelő mennyiségű adatok elküldését. Egy inaktivitási periódus után a TCP nem használhatja fel az ACK időzítőt mivel nyugták már nincsenek a hálózatban. Ezért a TCP nem csinálhat mást mint küldjön egy CWND méretű szegmenssorozatot ami lehet nem felel meg a kapcsolat aktuális kapacitásához. • Ajánlatos SS algoritmust használni a kapcsolat újraindítására egy inaktivitási periódus után. A SSújraindítja az ACK időzítőt pontosan úgy mint az adatok küldése elött. Mikor a TCP nem kapott egy szegmenst sem egynél több ujraküldési timeoutig, lecsökkenti a CWND értékét RW-re (újraküldési ablak) mielött megint küldeni kezd.
Nyugták generálása • A késleltetett ACK algoritmus: TCP fogadó által használt. A fogadónak nem ajánlott túl sokat késleltetni a nyugták küldését. Pontosabban, legalább minden második teljes méretű szegmensre ajánlott egy nyugtát kuldeni méghozzá 500 ms-on belül az utolsó még nem nyugtázott csomag érkezésétől. • Out-of-order szegmensek érkezésekor ezeket rögtön le kell nyugtázni, ezzel elősegítve a veszteségek gyors visszaállítását. • Ha egy nagyobb indexű szegmens érkezik mint a RWND által megengedett, akkor rögtön duplikált nyugtát kell küldeni. Ugyanúgy mikor olyan indexű szegmens érkezik amely befedi részben vagy teljesen a RWND-t akkor ezt rögtön jelezni kell nyugtával.
Veszteségeket helyreállító mechanizmusok • A Fast Retransmit és a Fast Recovery algoritmusokat bővítik ki, ezeket melegen ajánlják a TCP kutatói. • SACK-on (Selective ACK) alapuló algoritmusok (a küldő minden RTT alatt egyetlen elveszett szegmensről kap tudomást, így csak azokat a szegmenseket küldi újra, amik elvesztek). Ez a módszer akkor ad jelentős elönyt, mikor egy ablakból több szegmens is elveszlődik. • Nem SACK-on alapuló algoritmusok: ezek nem tudják eldönteni, hogy a duplikált nyugtákat egy előzőleg elveszett csomag vagy a fölöslegesen újraküldött csomagok idézik elő.
Veszteségeket helyreállító mechanizmusok • Mikor a veszteség felfedeződik, SSTHRESH értékét a (2)-s kifejezés értékével egyenlő vagy kisebb értékre állítjuk • Amíg mindegyik szegmens az illető ablakból a fogadónál a helyén nincs, minden RTT-ben elküldött szegmensek száma nem lehet nagyobb mint fele a még nem nyugtázott szegmenseknek abban a pillanatban mikor az elveszlődést észlelte a protokoll. • Miután minden veszteség helyre van állítva egy adott ablakban, CWND értékét SSTHRESH értékével egyenlő vagy kisebb értékre kell állítsa a protokoll és a CA algoritmus segítségével kell tovább növelni a CWND értékét. Veszteség két egymás utáni ablakban vagy az újraküldött adatok elvesztése direkt jelei a torlódásnak, ennek következményeként CWND és SSTHRESH értékeit kétszeresen csökkenteni kell.
Biztonsági megfontolás • A TCP a küldőt arra kötelezi hogy csökkentse a küldési sebességet ujraküldési timeout illetve duplikált nyugta esetén. Ebből kifolyolag egy támadó lelassíthatja a kapcsolatot a csomagok és a nyugták elvesztésével illetve falcs duplikált nyugták generálásával. Ha ezt a két esemény egyszerre bekövetkezik, a SSTHRESH automatikusan minimális lesz (2*SMSS).