TDAT2004 Datakommunikasjon med nettverksprogrammering

Oppgavenummer 23 - Pålitelig overføring
Odd Erik Knudsen og Petter Aasen Tomren




Innledning

Pålitelig overføring er en overføring via nettverksprotokollen Transmission Control Protocol (TCP), og er en del av transportlaget i kommunikasjonsmodellen. Temaet går ut på hvordan protokollen oppretter en forbindelse og hvordan overføre informasjon på en pålitelig måte. TCP er en protokoll som er stadig under utvikling. Protokollen ble dokumentert og publisert først i løpet av mai 1974, av organisasjonen Institute of Electrical and Electronics Engineers (IEEE). Forfatterne av dokumentet, og utviklerne av TCP er amerikanerne Vint Cerf og Bob Kahn.

 

Ønsket funksjonalitet

TCP er en protokoll mellom Internett-protokollen og applikasjonen. En av grunnene til at TCP eksisterer er at applikasjonen som befinner seg på oversiden av protokollsettet kan være avhengig av en pålitelig tilkobling mellom endepunkter.  

Det er under applikasjonslaget at selve overføringen opererer. TCP vil opprette forbindelse mellom applikasjonslaget og Internett-protokollen. TCP opererer på klient-tjener-arkitekturen og forbindelsen må gå begge veier. Dette med tanke på at både klienten og tjeneren skal være sender og mottaker av pakker med data, som skal sendes til den andre.

TCP tilbyr, til forskjell fra UDP, pålitelig overføring. Dersom man benytter seg av UDP for å sende pakker med informasjon, vil man sende pakkene ved hjelp av en forbindelsesløs overføring, som står til sterk kontrast fra det TCP kan tilby. Med UDP vil man ikke få noen form for informasjon om hvordan det går med datapakkene som blir sendt mellom klient og tjener.

Brukes UDP kan man risikere at pakkene ikke vil komme frem i det hele tatt eller at pakkene blir skadet underveis i transporten mellom sender og mottaker. På mange måter er UDP et veldig enkelt grensesnitt når det kommer til overføringen mellom nettverksprotokoll og applikasjonen.

Benytter man seg av TCP vil man derimot kunne få informasjon om pakkene som sendes mellom sender og mottaker. Underveis vil man kunne få status angående pakkene, TCP vil kunne ordne opp dersom dataene er blitt ødelagte underveis og TCP vil sørge for at pakkene når mottakeren. Med andre ord er det et grensesnitt som sørger for en pålitelig overføring mellom nettverkslaget og applikasjonslaget.

 

Virkemåte

TCP-forbindelser har tre faser:

  • Opprettelsen av forbindelse

  • Dataoverføring

  • Avslutning av forbindelse

Vi skal i dette temaet se nærmere på dataoverføringsbiten.

TCP-protokollen deler informasjonsstrømmen opp i pakker med en bestemt størrelse, passer på at ingen pakker forsvinner ved overføring, og sørger for at pakkene blir levert i riktig rekkefølge hos mottakeren. For å forsikre at pakken har blitt mottatt, sender mottakerenden en såkalt kvittering tilbake for å varsle at pakken ble mottatt. Hvis denne kvitteringen ikke blir mottatt innen et visst tidsrom, vil et tidsavbrudd oppstå og pakken må sendes på nytt. En sjekksum blir beregnet av senderen, og kontrollert hos mottaker for hver pakke. Dette er en metode for å sjekke at datastrømmen ikke er skadd. Denne summen blir kalkulert av senderen og inkludert i segmentet som sendes. På samme måte kalkulerer mottaker også denne summen og sjekker om den avviker fra den sjekksummen senderen kalkulerte. Hvis den er lik vil det si at segmentet er intakt og uten feil.

Flytkontroll er også et viktig begrep innen pålitelig overføring. Dette gir mottaker muligheten til å be avsenderen om å bremse ned litt under overføring. Noe som er nyttig hvis for eksempel avsender overfører data kjappere enn det mottaker kan behandle innkommende data.


TCP har noen mekanismer som avgjør grad av robusthet og pålitelighet når det kommer til dataoverføring.

Et sekvensnummer er et 32-biters positivt heltall som brukes for å ordne pakkene, eller segmentene, i riktig rekkefølge, og for å detektere dupliserte data. Dette sekvensnummeret utveksles i opprettelsesfasen mellom de to endepunktene og blir brukt til å identifisere hvert enkelt tegn i strømmen. I en overføring er det to av disse sekvensnummerne.

  • Sender - refererer til sitt eget sekvensnummer som sekvensnummer, og mottaker sitt som kvitteringsnummer.

  • Mottaker - for å opprettholde pålitelighet kvitterer mottakeren et segment ved å angi at en gitt rekkefølge i strømmen er mottatt.

SACK (Selective Acknowledgements) er en utvidelse av TCP og tillater mottaker å kvittere for blokker av tegn som ikke er i rekkefølge. Dette brukes for å unngå at hvis noen tegn går tapt under overføring så sørger SACK for at tegnene før dette er kvittert for, og unngår dermed at de må sendes på nytt.

 

Bilde 1: Her ser vi et eksempel på pakker som blir sendt med forskjellige protokoller. Der det er grået ut ser vi også et eksempel på "Three-Way Handshake".

 

Bilde 2: Flere eksempler på pakker som blir sendt. Ser at TCP er i klart flertall.

 

 Referanser

https://en.wikipedia.org/wiki/Transmission_Control_Protocol

https://no.wikipedia.org/wiki/TCP

https://no.wikipedia.org/wiki/UDP

  • No labels