TCP-uudelleenlähetys tarkoittaa kadonneiden tai vaurioituneiden pakettien uudelleenlähetystä verkon yli. Tässä uudelleenlähetys on mekanismi, jota käyttävät protokollat, kuten TCP tarjota luotettavaa viestintää. Luotettavalla tiedonsiirrolla tarkoitetaan tässä sitä, että protokolla takaa paketin toimituksen, vaikka datapaketti olisi kadonnut tai vaurioitunut.
miten saan selville näytön koon
Verkot ovat epäluotettavia eivätkä takaa kadonneiden tai vaurioituneiden pakettien viivettä tai uudelleenlähetystä. Verkko, joka käyttää vaurioituneiden tai kadonneiden pakettien kuittauksen ja uudelleenlähetyksen yhdistelmää, tarjoaa luotettavuuden.
Uudelleenlähetysmekanismi
Tässä uudelleenlähetys tarkoittaa, että datapaketit ovat kadonneet, mikä johtaa kuittauksen puuttumiseen. Tämä kuittauksen puute laukaisee ajastimen aikakatkaisuun, mikä johtaa datapakettien uudelleenlähetykseen. Tässä ajastin tarkoittaa, että jos kuittausta ei vastaanoteta ennen ajastimen umpeutumista, datapaketti lähetetään uudelleen.
Tarkastellaan seuraavia uudelleenlähetyksen skenaarioita.
Skenaario 1: Kun datapaketti on kadonnut tai virheellinen.
Tässä skenaariossa paketti lähetetään vastaanottajalle, mutta kuittausta ei vastaanoteta tämän aikakatkaisujakson aikana. Kun aikakatkaisuaika umpeutuu, paketti lähetetään uudelleen. Kun paketti lähetetään uudelleen, kuittaus vastaanotetaan. Kun kuittaus on vastaanotettu, uudelleenlähetystä ei toisteta.
Skenaario 2: Kun paketti vastaanotetaan, mutta kuittaus katoaa.
Tässä skenaariossa paketti vastaanotetaan toisella puolella, mutta kuittaus menetetään, eli ACK:ta ei vastaanoteta lähettäjäpuolella. Kun aikakatkaisuaika umpeutuu, paketti lähetetään uudelleen. Paketeista on kaksi kopiota toisella puolella; vaikka paketti vastaanotetaan oikein, kuittausta ei vastaanoteta, joten lähettäjä lähettää paketin uudelleen. Tässä tapauksessa uudelleenlähetys olisi voitu välttää, mutta ACK:n katoamisen vuoksi paketti lähetetään uudelleen.
Skenaario 3: Kun aikakatkaisu tapahtuu.
Tässä skenaariossa paketti lähetetään, mutta koska kuittauksessa on viivästynyt tai aikakatkaisu on tapahtunut ennen varsinaista aikakatkaisua, paketti lähetetään uudelleen. Tässä tapauksessa paketti on lähetetty uudelleen tarpeettomasti kuittausviiveen vuoksi tai aikakatkaisu on asetettu aikaisemmäksi kuin varsinainen aikakatkaisu.
Yllä olevissa skenaarioissa ensimmäistä skenaariota ei voida välttää, mutta kaksi muuta skenaariota voidaan välttää. Katsotaanpa, kuinka voimme välttää nämä tilanteet.
Kuinka kauan lähettäjän tulee odottaa?
Lähettäjä asettaa aikakatkaisujakson kuittaukselle. Aikakatkaisujakso voi olla kahdenlaisia:
Voittaa edellä mainitut kaksi tilannetta, TCP asettaa aikakatkaisun RTT:n (kiertoaika) funktiona, jossa edestakaisen matkan aika on aika, joka tarvitaan paketin kulkemiseen lähteestä määränpäähän ja palaamiseen takaisin.
Miten saamme RTT:n?
RTT voi vaihdella verkon ominaisuuksien mukaan, eli jos verkko on ruuhkautunut, se tarkoittaa, että RTT on erittäin korkea. Voimme arvioida RTT:n yksinkertaisesti katsomalla ACK:ita.
Katsotaan kuinka voimme mitata RTT:tä.
Tulemme käyttämään alkuperäinen algoritmi mittaamaan RTT:tä.
Vaihe 1: Ensin mitataan NäyteRTT jokaiselle segmentille tai ACK-parille. Kun lähettäjä lähettää paketin, tiedämme ajastimen, jolla paketti lähetetään, ja tiedämme myös ajastimen, jolla kuittaus vastaanotetaan. Laske aika näiden kahden välillä, ja siitä tulee NäyteRTT .
pete davidsonin kansalaisuus
Vaihe 2: Emme ota vain yhtä näytettä. Jatkamme erilaisten näytteiden ottamista ja laskemme näiden näytteiden painotetun keskiarvon, josta tulee EstRTT (Estimated RTT).
jossa α+ β = 1
α on välillä 0,8 - 0,9
β on välillä 0,1 ja 0,2
Vaihe 3: Aikakatkaisu on asetettu EstRTT:n perusteella.
aikakatkaisu = 2 * EstRTT.
Aikakatkaisu on asetettu kaksinkertaiseksi arvioituun RTT:hen verrattuna. Näin lasketaan todellinen aikakatkaisukerroin.
Virhe tässä lähestymistavassa
Alkuperäisessä algoritmissa on virhe. Tarkastellaan kahta skenaariota.
jdbc
Skenaario 1.
Yllä oleva kaavio osoittaa, että lähettäjä lähettää tiedot, jonka sanotaan olevan alkuperäinen lähetys. Aikakatkaisujakson aikana kuittausta ei vastaanoteta. Joten lähettäjä lähettää tiedot uudelleen. Tietojen uudelleenlähetyksen jälkeen vastaanotetaan kuittaus. Oletetaan, että kuittaus vastaanotetaan alkuperäisestä lähetyksestä, ei uudelleenlähetyksestä. Koska saamme alkuperäisen lähetyksen kuittauksen, niin NäyteRTT lasketaan alkuperäisen lähetyksen ja kuittauksen vastaanottoajan välillä. Mutta itse asiassa, NäyteRTT sen olisi pitänyt olla uudelleenlähetyksen ja kuittauksen välisenä aikana.
Skenaario 2.
Yllä oleva kaavio osoittaa, että lähettäjä lähettää alkuperäisen datapaketin, josta saamme myös kuittauksen. Mutta kuittaus vastaanotetaan tietojen uudelleenlähetyksen jälkeen. Jos oletetaan, että kuittaus kuuluu uudelleenlähetykseen, niin NäyteRTT lasketaan uudelleenlähetyksen ja kuittauksen välisenä aikana.
Yllä olevissa molemmissa skenaarioissa on epäselvyyttä siitä, että ei tiedetä, koskeeko kuittaus alkuperäistä lähetystä vai uudelleenlähetystä.
Yllä olevan algoritmin johtopäätös.
- Tässä ACK ei tarkoita lähetyksen kuittaamista, vaan itse asiassa se kuittaa datan vastaanoton.
- Jos tarkastelemme ensimmäistä skenaariota, uudelleenlähetys tehdään kadonneelle paketille. Tässä tapauksessa oletamme, että ACK kuuluu alkuperäiseen lähetykseen, minkä vuoksi SampleRTT on tulossa erittäin suureksi.
- Jos tarkastelemme toista skenaariota, kaksi samaa pakettia lähetetään, joten tässä tapauksessa esiintyy kaksinkertaisuutta. Tässä tapauksessa oletetaan, että ACK kuuluu uudelleenlähetykseen, jonka vuoksi SampleRTT on tulossa hyvin pieneksi.
Yllä olevien ongelmien ratkaisemiseksi Karn/Partridge-algoritmi antaa yksinkertaisen ratkaisun. Tämä algoritmi antoi yksinkertaisen ratkaisun, joka kerää kerralla lähetetyt näytteet eikä ota uudelleenlähetyshetkellä otettuja näytteitä huomioon arvioitua RTT:tä laskettaessa.
Karn/Partridge -algoritmi
Yllä olevissa kahdessa skenaariossa tapahtuu uudelleenlähetys, ja olemme tarkastelleet malli-RTT:tä. Mutta tämä algoritmi ei huomioi näyte-RTT:tä uudelleenlähetettäessä. Koska uudelleenlähetys on tapahtunut, mikä tarkoittaa, että tässä edestakaisen matkan aikana tapahtuu jotain tai verkossa voi esiintyä ruuhkaa. Tämän ongelman ratkaisemiseksi tämä algoritmi kaksinkertaistaa aikakatkaisun jokaisen uudelleenlähetyksen jälkeen. Tämä algoritmi on toteutettu TCP-verkossa.
Rajoitus
Se ei ota huomioon RTT:n varianssia.
Javaa päivitetään
Yllä olevan rajoituksen voittamiseksi kehitettiin Jacobson/Karels-algoritmi, joka ottaa käyttöön varianssitekijän RTT:ssä.
Jacobson/Karels-algoritmi
Tämä algoritmi on kehitetty voittamaan rajoitukset Karn / Partridge algoritmi. Se laskee SampleRTT:n ja EstimatedRTT:n välisen eron ja tehostaa RTT:tä eron perusteella.
Keskimääräisen RTT:n laskelmat
- Ensin lasketaan erokerroin.
Ero = SampleRTT - EstimatedRTT
- Nyt laskemme EstimatedRTT:n, joka lasketaan samalla tavalla kuin edellä.
EstRTT = EstRTT + (δ*ero)
- Nyt laskemme erokertoimen keskiarvon.
Kehittäjä = Kehittäjä + δ ( |Ero| - Kehittäjä)
Tässä Dev on poikkeamatekijä ja δ on tekijä välillä 0 ja 1 Dev on arvio varianssista EstRTT .
- Otamme varianssin huomioon laskettaessa aikakatkaisuarvoa.
Missä, µ =1 ja ɸ =4
miksi merkkijono muuttumaton javassa
Nopea uudelleenlähetys
Aikakatkaisuun perustuva uudelleenlähetyksen strategia on tehoton. TCP on liukuikkunatyyppinen protokolla, joten aina kun uudelleenlähetys tapahtuu, se alkaa lähettää sitä kadonneesta paketista eteenpäin.
Oletetaan, että lähetän paketit 0, 1, 2 ja 3. Koska paketti 0 ja paketti 1 vastaanotetaan toisella puolella, paketti 2 katoaa verkossa. Olen vastaanottanut paketin 0 ja paketin 1 kuittauksen, joten lähetän vielä kaksi pakettia, eli paketin 4 ja paketin 5. Kun paketit 3, 4 ja 5 on lähetetty, saan paketin 1 kuittauksen TCP-kuittauksina ovat kumulatiivisia, joten se kuittaa vastaanottamansa paketin järjestyksessä. En ole saanut kuittausta paketeista 2, 3, 4 ja 5 aikakatkaisujakson aikana, joten lähetän uudelleen paketit 2, 3, 4 ja 5. Koska paketti 2 on kadonnut, mutta muut paketit, eli 3, 4 ,5 vastaanotetaan toisella puolella, ne lähetetään edelleen uudelleen tämän aikakatkaisumekanismin vuoksi.
Miten tämä aikakatkaisun tehottomuus voidaan poistaa?
Parempi ratkaisu liukuikkunan alla:
Oletetaan, että n pakettia on kadonnut, mutta silti paketit n+1, n+2 ja niin edelleen on vastaanotettu. Vastaanotin vastaanottaa jatkuvasti paketteja ja lähettää ACK-paketteja sanoen, että vastaanotin odottaa edelleen n:ttä pakettia. Vastaanottaja lähettää toistuvia tai päällekkäisiä kuittauksia. Yllä olevassa tapauksessa paketin 1 kuittaus lähetetään kolme kertaa, koska paketti 2 on kadonnut. Tämä kaksinkertainen ACK-paketti on osoitus siitä, että n:s paketti puuttuu, mutta myöhemmät paketit vastaanotetaan.
Yllä oleva tilanne voidaan ratkaista seuraavilla tavoilla:
- Lähettäjä voi pitää 'kaksoistetut kuittaukset' varhaisena vihjeenä n:nnen paketin kadonmisesta, jotta lähettäjä voi tehdä uudelleenlähetyksen mahdollisimman aikaisin, eli lähettäjän ei pitäisi odottaa aikakatkaisun tapahtumista.
- Lähettäjä voi toteuttaa nopean lähetysstrategian TCP:ssä. Nopeassa lähetysstrategiassa lähettäjän tulisi harkita kolminkertaista ACK-kuittausta laukaisevana ja lähettää se uudelleen.
TCP käyttää kolmea päällekkäistä ACK:ta liipaisimena ja suorittaa sitten uudelleenlähetyksen. Yllä olevassa tapauksessa, kun paketin 1 kolme ACK-kuittausta vastaanotetaan, lähettäjän tulee lähettää kadonnut paketti, eli paketti 2, odottamatta aikakatkaisujaksoa.