4.4 A megbízható átvitel alapjai
4.4.4 Cs˝ o szervezés˝ u megbízható adatátviteli protokollok
A korábbiakban kifejlesztett rdt3.0 protokoll funkcionalitását tekintve hibátlan, azonban komoly teljesítmény problémái vannak, különös tekintettel a mai nagy sebesség˝u hálózatokat szem el˝ott tartva.
A probléma gyökere a protokoll"állj és várj" stratégiája, azaz mindaddig nem kerül új adatot tartalmazó csomag kiküldésre, amíg az azt megel˝oz˝or˝ol nincs pozitív visszaigazolás adott várakozási id˝on belül. A teljesítmény probléma érzékeléséhez tekintsük az alábbi példát és számokat!
Vegyünk két rendszert, amelyek egymástól több ezer kilométer távolságra vannak, Európa két egymástól távoli pontján. Tegyük fel, hogy a két rendszer közötti adatátvitel fénysebességgel történik, így az adat útjának oda-vissza megtételéhez körül-belül 30 milliszekundum szükséges, ezt jelölje RTT (Round-Trip-Time). A két rendszer között egy 1 Gbps sebsség˝u vonal van (109 bit másodpercenként), ez az R értékünk. Ha 1000 bájt (8000 bit) méret˝u csomagokat (L) tekintünk, amely tartalmazza a fejléc mez˝oket és az adatot is, akkor egy csomag egy 1 Gbps sávszélesség˝u
küldő fogadó
(d) túl hamar időtúllépés/ késleltetett ACK időtúllépés pkt1
4.13: Az rdt3.0 protokoll m˝uködése1 vonalon történ˝o átviteléhez a szükséges id˝o:
dtrans= L
R = 8000 bit/csomag
109 bit/másodperc =8 mikroszekundum (4.1)
Ahogy a 4.14 és a 4.15 ábrákon látható, ha az "állj és várj" protokollt alkalmazzuk, akkor at=0 id˝opillanatban kiküldött csomag utolsó bitje at=L/R=8 mikroszekundumban kerül be csatornába a küld˝o oldalon. Ezt követ˝oen a csomag megteszi a 15 milliszekundumos útját a fogadó fél felé, így a fogadó félnél az utolsó bit at=RT T/2+L/R=15,008 milliszekundum id˝opillantban jelenik meg. Ha feltesszük, hogy a visszaigazolás (ACK) mérete olyan kicsi, hogy az átviteli id˝o figyelmen kívül hagyható, és az utolsó bit megérkeztével azonnal küldhet˝o, akkor a visszaigazolás at=RT T+L/R=30,008 milliszekundum id˝opillanatban érkezik meg a küld˝ohöz.
Ha a küld˝o (vagy a csatorna) kihasználtságát (Uküld˝o) a küld˝o tényleges foglaltságának és az oda-vissza úthoz szükséges id˝o hányadosaként írjuk fel, akkor az
Uküld˝o= L/R
RT T+L/R= 0,008
30,008=0,00027 milliszekundum (4.2)
értéket kapjuk, ami szerint a küld˝o nincs megfelel˝o módon kihasználva.
Az ilyen elven m˝uköd˝o protokollokat nevezzük cs˝o szervezés˝u protokolloknak. A következ˝okben két általános cs˝o szervezés˝u protokollt vizsgálunk meg: vissza N-nel és szelektív ismétlés.
az első bitet átküldtük, t = 0
az utolsó bit beérkezik, küldjük az ACK-ot
4.14: Az "állj és várj" m˝uvelet1
az első továbbítandó bit, t = 0 küldő
RTT az utolsó továbbítandó bit, t = L
/ R
ACK beérkezett, küldjük a következőt csomag, t = RTT + L / R
fogadó
az első bit beérkezik
az utolsó bit beérkezik, küldjük az ACK-ot a 2. csomag utolsó bitje beérkezik, ACK a 3. csomag utolsó bitje beérkezik, ACK
4.15: Cs˝o szervezés˝u adatküldés1
Vissza N-nel
A Vissza N-nel protokoll esetében a küld˝o számára megengedett, hogy több csomagot is kiküldjön visszaigazolásra történ˝o várakozás nélkül. A megengedésnek természetesen van egy beállított N fels˝o korlátja, azaz legfeljebb N még nem visszaigazolt csomag lehet a cs˝ovezetékben egyidej˝uleg.
A 4.16 ábrán látható a küld˝o fél szemszögéb˝ol a szekvencia számok. Ha az els˝o visszaigazolatlan csomagot jelölibase, ésnextseqnuma következ˝o szabad szekvencia számot, akkor a szekvencia számok tartománya 4 részre osztható:
• [0,base-1]: az elküldött és visszaigazolt csomagok
• [base,nextseqnum-1]: az elküldött, de még vissza nem igazolt csomagok
• [nextseqnum,base+N-1]: az azonnal küldhet˝o csomagok
• [base+N,∞): nem használhatóak, amíg a cs˝ovezetékben lev˝o csomagok közül nincs újabb visszaigazolt
A maximálisan kiküldhet˝o nyugtázatlan csomagok számát (N) szoktákablaknak nevezni. A fogadó nyugtázása is ennek megfelel˝oen történik. A küld˝o fél egy ún. összesít˝o (kumulált) nyugtát fog kapni az n. csomagról. Az n. csomag nyugtáját a fogadó akkor küldi ki, ha az n. volt a sorban következ˝o csomag. Ha egy soron kívüli csomag érkezik, akkor azt elveti, és nyugtát küld az utoljára helyesen fogadott csomagról. Az n. csomag nyugtája természetesen azt is jelenti, hogy az n szekvencia számnál alacsonyabbal ellátott csomagok is helyesen megérkeztek.
A Vissza N-nel nevét a protokoll a küld˝o viselkedésér˝ol kapta. Ismét visszaköszön az id˝ozít˝o használata, amellyel az adatvesztés adta problémákat kezeljük. Egyetlen id˝ozít˝ot használva, alkalmazzuk azt a legrégebben kiküldött még nem visszaigazolt csomagra. Ha nem érkezik adott id˝on belül visszaigazolás, akkor a legrégebben vissza nem igazolt csomag újraküldésre és kerül, és
ablak méret
4.16: Szekvencia számok a küld˝o oldalon a Vissza N-nel protokollnál1
az összes ezt követ˝o is, hiszen a sorrendhelyesség fontos a fogadónál. A 4.17 ábra szemlélteti a Vissza N-nel protokoll m˝uködését.
pkt0 fogadása, ack0 küldése pkt1 fogadása, ack1 küldése pkt3 fogadása, kidob,
4.17: A Vissza N-nel m˝uködés közben1 Szelektív ismétlés
Ugyan a Vissza N-nel protokoll megnövelte küld˝o kihasználtságát az "állj és várj" stratégiához képest, azonban vannak olyan esetek, amikor itt is mutatkoznak teljesítmény problémák. Például, ha az ablak méret és a késleltetés is magas, akkor egyidej˝uleg rengeteg csomag lehet a cs˝ovezetékben.
Egyetlen csomaghiba nagy mennyiség˝u csomag újraküldését eredményezi, hiszen a hibás csomagtól kezdve minden csomagot újra kell küldeni.
A szelektív válasz protokoll pontosan ezeket a szükségtelen újraküldéseket hivatott elkerülni.
Csak azokat a csomagokat fogja újraküldeni, amelyek hibásan érkeztek meg a fogadóhoz vagy elvesztek. Az ablak méretet továbbra is alkalmazzuk az egyidej˝uleg a cs˝ovezetékben tartózkodó csomagok számának maximális korlátozásához. A szekvencia számok tere azonban változik, melyet a 4.18 ábrán szemléltetünk.
ablak méret
már visszaigazolt elküldött, de még nem visszaigazolt
4.18: Szekvencia számok a küld˝o és a fogadó oldalon a Szelektív ismétlés protokollnál1
A küld˝o és a fogadó az alábbi eseményeket és m˝uveleteket hajtja végre.
Küld˝o:
• Adat fogadása fels˝obb rétegt˝ol:
megkeresi a sorban következ˝o szabad szekvencia számot, és ha az az ablakban van, akkor az adatot csomagolja és küldi. Más esetekben puffereli az adatot vagy visszaküldi a fels˝obb rétegnek.
• Id˝otúllépés: minden csomaghoz rendel egy id˝ozít˝ot, ezzel minden csomag nyomonkövethet˝o, és detektálható, ha elveszett.
• Visszaigazolás fogadása: a visszaigazolás alapján megjelöli az adott csomagot, hogy sikeresen megérkezett. Ha a csomag szekvencia száma az ablakban lév˝o els˝o volt, akkor az ablakot eggyel tovább mozgatja a még vissza nem igazolt csomagok szekvencia számának irányába. Ha az ablak pozíciója változik, és van elküldetlen szekvencia számmal rendelkez˝o csomag, akkor azt elküldi.
Fogadó:
• Helyesen fogadott csomag az [rcv_base, rcv_base+N-1]
intervallumba es˝o szekvencia számmal:ebben az esetben a fogadott csomag a fogadó ablakába esik, és egy szelektív visszaigazolás kerül továbbításra a küld˝o felé. Ha a csomag még korábban nem volt fogadott, akkor a pufferbe kerül. Ha a csomag szekvencia száma az ablak szerinti els˝o szekvencia számmal (rcv_base)egyenl˝o, akkor a csomag és az ˝ot megel˝oz˝o pufferelt csomagok továbbításra kerülnek a fels˝obb réteg felé. Így az fogadó ablaka tovább mozgatható. akkor is, ha a csomag már korábban vissza lett igazolva.
• Egyébként:figyelmen kívül hagyja a csomagot.
A fenti m˝uködés (4.19 ábra) f˝o problémája azonban az, hogy a küld˝o és a fogadó ablaka nincs szinkronban tartva, és nem látják egységesen, hogy mely csomagok lettek fogadva, melyek nem. Ennek komoly következményei lehetnek, ha a szekvencia számok véges tartományának problémájával szembesülünk.
Vegyük példaként a seq = 0,1,2,3 szekvencia számokat, és az ablak méret legyen 3. Tegyük fel, hogy a 0, 1 és 2 sorszámmal ellátott csomagok ki lettek küldve az ablak méretének megfelel˝oen, és
pkt0 küldése pkt3 fogadása, buffer, ack3 küldése Xelveszett
pkt4 fogadása, buffer, ack4 küldése pkt5 fogadása, buffer, ack5 küldése
pkt2 fogadása; pkt2, pkt3, pkt4, pkt5 kézbesítése; ack2 küldése
4.19: A Szelektív ismétlés protokoll m˝uködés közben1
helyesen fogadta és vissza is igazolta ˝oket a fogadó fél. Ezen a ponton a fogadó ablaka a 4., 5. és 6.
csomag fölött van, amelyek szekvencia számai rendre 3, 0 és 1.
Vizsgáljuk az alábbi két szituációt (4.20 ábra):
a) az els˝o három csomag (0, 1, 2) visszaigazolása elveszik, így a küld˝o ezeket újra fogja küldeni.
A fogadó következésképp egy 0-s sorszámmal ellátott csomagot fog kapni, ami az els˝o csomag másolata lesz.
b) az els˝o három csomag (0, 1, 2) visszaigazolása sikeresen megérkezik. A küld˝o tovább mozgatja ablakát, és elküldi a 4., 5. és 6. csomagot rendre a 3, 0 és 1 szekvencia számokkal.
A 3-as sorszámú csomag elveszik, de a 0-s sorszámú helyesen megérkezik, amely új adatot tartalmaz.
4.20: A Szelektív ismétlés protokoll m˝uködése túl nagy ablak méret esetén1
Ezek az esetek világítanak rá arra a problémára, ha a szekvencia számok halmazának méretéhez
képest 1-gyel kisebb az ablak mérete. Mivel a fogadó csak szekvencia számokat érzékel, így nem tudja megkülönböztetni az 1. csomag újraküldését az 5. csomag els˝o elküldését˝ol. Erre egy megoldást adhat, ha az ablak mérete legfeljebb a szekvencia számok halmazának méretének a fele.
A továbbiakban a TCP-t vizsgáljuk, amely megoldásokat nyújt a korábban említett problémákra.