You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 27 Next »

 

TDAT 2004 Datakommunikasjon med nettverksprogrammering

Oppgavenummer 26 -  Tilstandsdiagram
 

Skrevet av Håvard Aasmo og Aner Glavovic

 

1. Innledning

Tilstandsdiagrammer i TCP hører til transportlageret, og blir brukt til å vise livslinjen til en forbindelse. En forbindelsesprosess går igjennom en serie av tilstander gjennom sitt livsløp. For å gjøre det enkelt, er det vanlig å dele disse opp i 3 faser, etablering av forbindelse, dataoverføring og terminering av forbindelse. En forbindelse mellom TCP-enhetene må være i orden før den går videre til neste fase. Når en forbindelse har blitt opprettet, kan dataoverføringen mellom de to TCP-enhetene foregå. Etter at dataoverføringen er fullført går den til siste tilstand som lukker alle kretsene og ressursene mellom de to enhetene.

 

2. Ønsket funksjonalitet

Pålitelig overføring: TCP bruker et sekvensnummer for å identifisere hver byte av data. På denne måten kan data som blir borte bli gjenoppbygget dersom packet loss skulle oppstå under overføringen. Pålitelighet oppnås ved at senderen oppdager tapt data gjennom RTO og DupAcks, og sender den på nytt. Selvom tapt data blir gjensendt er det likevel andre ting som kan forårsake skade når dataoverføringen pågår. Det hender en sjelden gang at en hacker greier å gjette sekvensnummeret, og kan dermed forfalske pakkene som blir sendt til mottakeren. Dette kan igjen bli forhindret ved at senderen konfigurerer ruteren eller brannmuren til å ikke ta inn pakker fra en ukjent IP-adresse.

Feilfri dataoverføring: For å sikre at pakker ikke er korrupte og at de kommer til sine rette destinasjoner, bruker TCP feilretting og datastrømteknikker til dette.

Flytkontroll: Hensikten med flytkontroll er å sikre pålitelig overføring. TCP bruker noe som heter «sliding window protocol» for akkurat dette. Sliding window fungerer ved at mottakeren kontinuerlig gir beskjed til senderen hvor mye data som kan bli sendt. Når mottakerens buffer er fylt, blir det sendt en beskjed om å stoppe dataoverføringen slik at dataen som har blitt sendt kan behandles.

 Metningskontroll: Hensikten med metningskontrollen i TCP er å oppnå så høy ytelse som mulig, uten at det skulle oppstå trafikkforstoppelse. For dette blir det brukt en rekke mekanismer, som blant annet passer på at raten dataen blir sendt med, holder seg under det som ville forårsaket forstoppelse. 

 

3. Virkemåter

En TCP-forbindelse kan beskrives som en endelig tilstandsmaskin med 3 hovedfaser; opprettelse av forbindelse, dataoverføring og avslutning av forbindelse. I hver av disse fasene har vi også mindre faser. Overgang mellom faser skjer ved at de aktuelle enhetene sender meldinger mellom hverandre. Kortfattet så har vi 3 forskjellige meldinger som brukes:

SYN: (synchronized) melding som brukes når forbindelsen skal opprettes.

FIN: (finish) Brukes når forbindelsen skal avsluttes.

ACK: (acknowledment) Brukes som til å bekrefte en SYN- eller FIN-melding.

 

 

Opprette forbindelse

Enhver TCP-forbindelse begynner in en lukket (CLOSED) tilstand.
For å opprette en forbindelse brukes et treveis håndtrykk.

CLOSED

Standard tilstand som alle forbindelser starter i. Representerer at det ikke er noen forbindelse mellom den aktuelle enhetene, og er derfor en ”fiktiv” tilstand.

LISTEN

Enheten venter på en SYN-meding fra en klient. Det er vanligvis servere som er i denne tilstanden.
Når enheten får svar (SYN), sendes en SYN+ACK-melding og den går videre til SYN-RECIEVED.

SYN-SENT

Enhetene har sendt en SYN-melding og venter på svar fra en annen enhet (vanligvis en server).
Når den får et svar (SYN), sender den en SYN+ACK-melding og går videre til SYN-RECIEVED.

SYN-RECIEVED

Enheten har både sendt og fått en SYN-melding fra den andre enheten. Venter på en ACK-melding for å gå videre til ESTABLISHED.


Dataoverføring

Her er begge enhetene (vanligvis server og klient) i en ESTABLISHED tilstand. Her kan data sendes fritt fram og tilbake mellom enhetene. Denne tilstanden vil holdes helt til forbindelsen avsluttes.
Hvis en enhet vil avslutte forbindelsen sendes en FIN-melding og enhetene går over til FIN-WAIT-1.
Hvis en enhet mottar en FIN-melding, vil den sende en ACK-melding og gå til CLOSE-WAIT.

 

Avslutte forbindelse

Startes når minst en av enhetene vil avslutte forbindelsen. Her brukes et fireveis håndtrykk, der hver enhet stenger forbindelsen uavhengig av den andre. Dette gjør at en TCP-forbindelse kan være ”halvveis” åpen, der en enhet har stengt forbindelsen mens den andre ikke har det.

 

CLOSE-WAIT

Enheten har mottatt en FIN-melding og venter nå på at den lokale brukeren vil bekrefte denne meldingen.
Når den blir bekreftet vil det sendes en ACK-melding og enheten går til LAST-ACK.

LAST-ACK

Enheten har nå fått en FIN-melding og bekreftet denne med en ACK-melding. Nå venter den bekreftelse (ACK) fra den andre enheten. Når det får det vil den gå til CLOSED.

FIN-WAIT-1

Enheten venter på en ACK-melding som den selv har sendt, eller på en FIN-melding fra den andre enheten.
I første tilfellet vil den gå til FIN-WAIT-2.
I andre tilfellet vil den sende en ACK-melding og gå til CLOSING.

FIN-WAIT-2

Enhetene har fått en bekreftelse (ACK) på at den vil avslutte forbindelsen og venter på en FIN-melding fra den andre enheten. Når den får det vil den gå videre til TIME-WAIT.

CLOSING

Enheten har fått en FIN-melding og sendt en ACK-melding, men den har ennå ikke fått en bekreftelse (ACK) for sin egen FIN-melding som er sendt.
Når den får det vil den gå til TIME-WAIT.

TIME-WAIT

Enhetene har nå fått en FIN-melding fra den andre enheten og bekreftet den, og den har sendt sin egen FIN-melding og fått den bekreftet av den andre enheten.
Etter en bestemt venteperiode vil enheten gå til CLOSED.

CLOSED

Se ”Opprette forbindelse” lenger oppe på siden.

Legg merke til at det ligger en timeout på slutten av denne fasen (TIME-WAIT). Dette er for å sikre at vi får bekreftet den siste FIN-meldingen og unngår overlapp med en eventuell ny forbindelse på samme port.

 

4. Referanser

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

http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm

 

  • No labels