Transportlaget Mål: Forstå prinsippene bak tjenestene på transportlaget: multiplexing/demultiplex ing Pålitelig overføring flytkontroll metningskontroll Implementasjon på Internett Overblikk: Tjenester på transportlaget multiplexing/demultiplexing Forbindelsesløs transport: UDP Prinsipper for pålitelig overføring forbindelsesorientert transport: TCP Pålitelig overføring flytkontroll forbindelseshåndtering Prinsipper for metningskontroll TCP metningskontroll Transportlaget 1 Transporttjenester og protokoll Støtter logisk kommunikasjon mellom applikasjonsprosesser som kjører på forskjellige maskiner Transportprotokoller kjører i endesystemene Transport kontra nettlagstjenester: nettlaget: dataoverføring mellom endesystemer transportlaget: dataoverføring mellom prosesser Hviler på og forbedrer nettlagets tjenester Applikasjon Transport Logisk ende til ende forb Applikasjon Transport Transportlaget 2
Transportlagsprotokoller Internett transporttjenester: Pålitelig, ordnet unicast levering (TCP) metning flytkontroll Oppsett av forbindelse Upålitelig ( best-effort ), uordnet unicast eller multicast levering: UDP Tjenester som foreløpig ikke finnes: sanntid båndbreddegarantier Pålitelig multicast Applikasjon Transport Logisk ende til ende forb Applikasjon Transport Transportlaget 3 Multiplexing/demultiplexing Husk: segment dataenhet utvekslet mellom enheter på transportlaget TPDU: transport protocol data unit segment header segment applikasjonslag data Ht M Hn segment P1 M Applikasjon Transport P3 Demultiplexing: levere mottatte segmenter til den riktige applikasjonsprosessen mottaker M M Applikasjon Transport P4 M P2 Applikasjon Transport Transportlaget 4
Multiplexing/demultiplexing Multiplexing: Samle data fra flere applikasjons- Prosesser, pakke dem sammen med headere som kan benyttes til demultiplexing multiplexing/demultiplexing: Basert på sender, mottaker port nummer, IP addresser sender, mottaker portnummer i hvert segment Kjente portnummere for spesielle applikasjoner 32 bits source port # dest port # Andre headerfelt applikasjons data (melding) TCP/UDP segment format Transportlaget 5 Multiplexing/demultiplexing: eksempler maskin A source port: x dest. port: 23 server B Web klient maskin C source port:23 dest. port: x port bruk: enkel telnet Source IP: C Dest IP: B source port: y dest. port: 80 Source IP: C Dest IP: B source port: x dest. port: 80 Web klient maskin A Source IP: A Dest IP: B source port: x dest. port: 80 Web server B port bruk: Web server Transportlaget 6
UDP: User Datagram Protocol [RFC 768] Enkel Internet transport protokoll best effort tjeneste, UDP segmenter kan: forsvinne leveres i feil rekkefølge forbindelsesløs: ingen handshaking mellom UDP sender, mottaker hvert UDP segment håndtert uavhengig av andre Hvorfor finnes UDP? Ingen opprettelse av forbindelse (som kan øke forsinkelse) enkel: ingen forbindelsestilstand hos sender og mottaker Liten segmentheader Ingen metningskontroll: UDP sender så fort den ønsker Transportlaget 7 UDP: mer Ofte brukt til å streame multimediaapplikasjoner tapstolerant ratesensitiv annen UDP bruk (hvorfor?): DNS SNMP Pålitelig overføring over UDP: legg til pålitelighet i applikasjonslaget Applikasjonsspesifik feilhåndtering! Lengde, i byte til UDP segment, Header inkludert 32 bits source port # dest port # length Applikasjons data (melding) checksum UDP segment format Transportlaget 8
UDP sjekksum Mål: oppdage feil (f.eks bitfeil) i overført segment Sender: Håndterer segment som sekvenser av 16- bit integere sjekksum: addisjon av innholdet i segmentet Sender legger summen inn i UDP sjekksum feltet Mottaker: Regner ut sjekksummen til mottatt segment Sjekker om den beregnede sjekksummen er den samme som den som er i segmentet. : NEI feil påvist JA ingen feil påvist, men det kan jo være feil likevel Transportlaget 9 TCP: Overblikk RFCs: 793, 1122, 1323, 2018, 2581 socket dør Punkt-til-punkt: En sender, en mottaker Pålitelig ordnet byte strøm: Ingen meldingsgrenser Sliding window: TCP metnings og flytkontroll gir vindusstørrelse send & receive buffere applikasjon skriver data TCP send buffer segment apapplikasjon leser data TCP receive buffer socket dør full duplex data: Bidireksjonal dataflyt i samme forbindelse MSS: maximum segment size forbindelsesorientert: handshaking (utveksling av kontrollmeldinger) initialiserer tilstanden i begge endene før data sendes flytkontroll: Sender ikke mer data enn mottakeren kan akseptere Transportlaget 10
TCP segment struktur URG: urgent data (sjelden i bruk) ACK: ACK # PSH: push data nå (sjelden i bruk) RST, SYN, FIN: Forbindelses håndtering (setup, teardown kommandoer) Internett sjekksum (som i UDP) 32 bits source port # dest port # head len sequence number acknowledgement number not used UA P R S F checksum rcvr window size ptr urgent data Options (variable length) application data (variable length) Brukes av sliding window Brukes av sliding window Transportlaget 11 TCP sekvensnummer og ACKer Sekvensnummer byte strøm tallet til første byte i segmentets data ACKer: Sekvensnummer til neste byte som er ventet fra andre siden kumulativ ACK Q: hvordan håndterer mottaker data i feil rekkefølge TCP spec overlater dette til implementasjonen Bruker skriver C A ACKer Mottaket av C som ekko Maskin A Maskin B Seq=42, ACK=79, data = C Seq=79, ACK=43, data = C Seq=43, ACK=80 Et enkelt telnet scenario B ACKer Mottaket av C, sender C tilbake som ekko tid Transportlaget 12
TCP: pålitelig overføring event: data mottatt fra applikasjonen over Skap og send segment Forenklet sender under antakelse av Vent på event event: timeout for segment med seq # y Send segment på nytt Enveis dataflyt Ingen flyt- eller metningskontroll event: ACK mottatt, med ACK # y ACK prosessering Transportlaget 13 TCP: pålitelig data overføring Forenklet TCP sender 00 sendbase = initial_sequence number 01 nextseqnum = initial_sequence number 02 03 loop (forever) { 04 switch(event) 05 event: data received from application above 06 create TCP segment with sequence number nextseqnum 07 start timer for segment nextseqnum 08 pass segment to IP 09 nextseqnum = nextseqnum + length(data) 10 event: timer timeout for segment with sequence number y 11 retransmit segment with sequence number y 12 compute new timeout interval for segment y 13 restart timer for sequence number y 14 event: ACK received, with ACK field value of y 15 if (y > sendbase) { /* cumulative ACK of all data up to y */ 16 cancel all timers for segments with sequence numbers < y 17 sendbase = y 18 } 19 else { /* a duplicate ACK for already ACKed segment */ 20 increment number of duplicate ACKs received for y 21 if (number of duplicate ACKS received for y == 3) { 22 /* TCP fast retransmit */ 23 resend segment with sequence number y 24 restart timer for segment y 25 } 26 } /* end of loop forever */ Transportlaget 14
TCP ACK generering [RFC 1122, RFC 2581] Event Ordnet segmentmottak, Ingen hull, Alt annet er allerede ACKet Ordnet segmentmottak, Ingen hull, en ACK på etterskudd Uordnet segmentmottak Høyere seq. # enn ventet Hull påvist Mottak av segment som delvis Eller helt fyller hullet TCP Mottaker aksjon forskinket ACK. Vent opp til 500ms På neste segment. Hvis intet kommer, send ACK Send en enkelt kumulativ ACK umiddelbart send duplikat ACK som indikerer seq. # Til neste ventede byte send ACK umiddelbart dersom segmentet starter i nedre ende av hullet Transportlaget 15 TCP: retransmisjons-scenarier Maskin A Maskin B Maskin A Maskin B timeout Seq=92, 8 bytes data X tap ACK=100 Seq=92, 8 bytes data Seq=100 timeout Seq=92 timeout Seq=92, 8 bytes data Seq=100, 20 bytes data ACK=100 ACK=120 Seq=92, 8 bytes data ACK=100 ACK=120 tid tapt ACK scenario tid For tidlig timeout, kumulative ACKer Transportlaget 16
TCP Flytkontroll flytkontroll sender sender ikke raskere enn at mottaker klarer å svelge unna RcvBuffer = størrelse på TCP Receive Buffer RcvWindow = størrelse på ledig plass i Buffer mottaker: informerer sender eksplisitt om hvor mye bufferplass han har ledig RcvWindow felt i TCP segment sender: holder mengden av sendte uackede data mindre enn det siste RcvWindow han mottok mottaker buffering Transportlaget 17 TCP Round Trip Time og Timeout Q: hvordan setter man TCP timeout verdien? Lenger enn RTT merk: RTT vil variere For kort: prematur timeout unødvendige retransmisjoner For lang: langsom reaksjon på tap av segment. Q: hvordan estimere RTT? SampleRTT: målt tid fra segmentsending til mottak av ACK Ignorer retransmisjoner og kumulativt ACKede segmenter SampleRTT vil variere, ønsker beregnet RTT som er mer stabil Bruk flere målinger, ikke bare siste SampleRTT Transportlaget 18
TCP Round Trip Time og Timeout EstimatedRTT = (1-x)*EstimatedRTT + x*samplertt Eksponensielt vektet flytende gjennomsnitt. Innflytelsen til en måling synker eksponensielt Typisk verdi for x: 0.1 Setting av timeout EstimtedRTT pluss sikkerhetsmargin Stor variasjon i EstimatedRTT -> større sikkerhetsmargin Timeout = EstimatedRTT + 4*Deviation Deviation = (1-x)*Deviation + x* SampleRTT-EstimatedRTT Transportlaget 19 TCP Forbindelseshåndtering Husk: TCP sender, mottaker etablerer forbindelse før de sender datasegmenter initialiserer TCP variable: seq. # buffere, flyt-kontroll info (f.eks RcvWindow) klient: initierer forbindelse Socket clientsocket = new Socket("hostname","port number"); tjener: kontaktet av klient Socket connectionsocket = welcomesocket.accept(); Treveis håndtrykk: Skritt 1: klient sender TCP SYN kontroll segment til tjener Spesifiserer initielt seq # Skritt 2: tjener mottar SYN, svarer med SYNACK kontroll segment ACKer mottatt SYN Allokerer buffere Spesifiserer tjener-> klient initielt seq. # Transportlaget 20
TCP forbindelseshåndtering (forts) Å koble ned en forbindelse: Klienten lukker forbindelsen: clientsocket.close(); Skritt 1: klient sender TCP FIN kontroll segment til tjener close klient FIN ACK FIN tjener close Skritt 2: tjener mottar FIN, svarer med ACK. Stenger forbindelsen, sender FIN. timed wait closed ACK Transportlaget 21 TCP forbindelseshåndtering (forts) Skritt 3: klient mottar FIN, svarer med ACK. Går inn i timed wait vil svare med ACK på mottatte FINs Skritt 4: tjener, mottar ACK. Forbindelsen stengt. closing klient FIN ACK FIN tjener closing Merk: med små modifikasjoner kan denne metoden håndtere simultane FINs. timed wait closed ACK closed Transportlaget 22
TCP forbindelseshåndtering (forts) TCP tjener livssykel TCP klient livssykel Transportlaget 23 Prinsipper for metningskontroll Metning: uformelt: for mange kilder sender data for fort til at nettverket klarer å håndtere det Ikke det samme som flytkontroll! Manifestasjoner av metning: pakketap (buffer overflow) long delays (køing i rutere) Et av de virkelig store problemene! Transportlaget 24
Årsaker til/kostnader ved metning: scenario 1 To sendere to mottakere En ruter, uendelige bufre Ingen retransmisjon Lange forsinkelser ved metning Maksimum gjennomstrømning Transportlaget 25 Årsaker til/kostnader ved metning: scenario 2 En ruter, endelige bufre sender retransmiterer tapte pakker Transportlaget 26
Årsaker til/kostnader ved metning: scenario 2 alltid: λ = λ in out perfekt retransmisjon bare ved tap: λ > λ in out Retransmisjon av forsinkede (ikke tapte) pakker gjør λ større in (enn det perfekte tilfelle) for samme λ out kostnader ved metning : Mer arbeid (retransmisjoner) for gitt gjennomstrømning Unødvendige retransmisjoner: link videresender flere kopier av samme pakke Transportlaget 27 Årsaker til/kostnader ved metning: scenario 3 Fire sendere Stier med flere hopp timeout/retransmisjon Q: hva skjer når og øker? λ in λ in Transportlaget 28
Årsaker til/kostnader ved metning: scenario 3 En annen kostnad ved metning: Nårpakkerblirkasteterall transmisjonskapasitet brukt for å få pakken så langt bortkastet. Transportlaget 29 Tilnærminger til metningskontroll To vanlige tilnærminger: Ende-ende metningskontroll: Ingen eksplisitt feedback fra nettverket Metning detekteres ved observert tap og forsinkelse Denne tilnærmingen tas av TCP sassistert metningskontroll: Rutere gir feedback til endesystemer Ett bit indikerer metning (SNA, DECbit, TCP/IP ECN, ATM) Eksplisitt senderate Transportlaget 30
Eksempel: ATM ABR metningskontroll ABR: available bit rate: elastisk tjeneste Dersom senderens sti er underbelastet : Sender bør bruke tilgjengelig båndbredde Om senderens sti er mettet Sender strupes til minimum garantert rate RM (resource management) celler: Sendt av sender innimellom datacellene Bit i RM cellen satt av svitsjene ( network-assisted ) NI bit: ingen økning i raten (mild metning) CI bit: metningsindikasjon RM cellene returnert til sender med bits intakt. Transportlaget 31 Eksempel: ATM ABR metningskontroll to-byte ER (explicit rate) felt i RM celle Mettet svitsj kan senke ER verdi i cellen Senders sende rate blir minste tilgjengelige rate i stien. EFCI bit i data celler: satt til 1 i mettet svitsj Dersom datacellen før RM har EFCI satt, setter senderen CI bit i returnert RM celle. Transportlaget 32
TCP Metningskontroll ende-ende kontroll (ingen støtte fra nettverket) Senderaten begrenset av metnings-vindusstørrelse, Congwin, over segmenter: Congwin w segmenter, hvert med MSS byte sent i en RTT: throughput = w * MSS RTT Bytes/sek Transportlaget 33 TCP metningskontroll: testing for tilgjengelig båndbredde: ideellt: send så fort som mulig (Congwin så stor som mulig) uten tap øk Congwin til du får tap (metning) tap: senk Congwin, så start testing (økning) igjen to faser slow start unngå metning viktige variable: Congwin threshold: definerer terskel mellom to slow start fasermetningskontroll faser Transportlaget 34
TCP Slowstart Slowstart algoritmen initialize: Congwin = 1 for (each segment ACKed) Congwin++ until (loss event OR CongWin > threshold) RTT Maskin A Maskin B ett segment to segment fire segment Eksponensiell økning (per RTT) i vindusstørrelse (not so slow!) Ved tap: timeout (Tahoe TCP) og/eller tre duplikate ACKer (Reno TCP) time Transportlaget 35 TCP metningsunngåelse Metningsunngåelse /* slowstart is over */ /* Congwin > threshold */ Until (loss event) { every w segments ACKed: Congwin++ } threshold = Congwin/2 Congwin = 1 1 perform slowstart 1: TCP Reno dropper slowstart (fast recovery) etter tre duplikate ACKer Transportlaget 36
AIMD TCP metningsunngåelse: AIMD: additive increase, multiplicative decrease Øk vinduet med 1 per RTT Reduser vindu med faktor 2 ved tap TCP Fairness Fairness mål: om N TCP sesjoner deler den samme flaskehalslinken, bør hver av dem få 1/N av linkkapasiteten TCP forbindelse 1 TCP forbindelse 2 Flaskehalsrouter Kapasitet R Transportlaget 37 Hvorfor er TCP fair? To konkurrerende sesjoner: Additive increase derivert lik 1, så lenge throughput øker multiplicative decrease senker throughput proporsjonalt R Lik andel av båndbredden Forbindelse 2 throughput Forbindelse 1 throughput tap: senk vindusstørrelsen med faktor 2 metningsunngåelse: additive increase tap: senk vindusstørrelsen med faktor 2 metningsunngåelse: additive increase R Transportlaget 38
TCP modellering av forsinkelse Q: Hvor lang tid tar det å motta et objekt fra en Web server etter at forespørselen er sendt? Oppretting av TCP forbidelse dataoverføringsforsinkelse Notasjon, antakelser: Anta en link mellom klient og tjener med rate R Anta: fast metningsvindu, W segmenter S: MSS (bits) O: object size (bits) Ingen retrasmisjoner To tilfeller må vurderes: WS/R > RTT + S/R: ACK for første segment i vindu kommer tilbake før data tilsvarende hele viduet er sendt. WS/R < RTT + S/R: vent på ACK etter å ha sendt de data som vinduet tillater Transportlaget 39 TCP forsinkelsesmodellering K:= O/WS Tilfelle 1: latency = 2RTT + O/R Tilfelle 2: latency = 2RTT + O/R + (K-1)[S/R + RTT - WS/R] Transportlaget 40
TCP forsinkelsesmodellering: Slow Start Anta så at vindusstørrelsen øker som i Slow Start. Forsinkelsen til et objekt av størrelse O er: Latency O S P = 2RTT + + P RTT (2 1) R + R S R hvor P er antallet ganger TCP stopper hos tjeneren P = min{ Q, K 1} - hvor Q er antallet ganger tjeneren ville stoppe om O var uendelig stort - og K er antallet vinduer som trengs for å dekke objektet Transportlaget 41 Metoder for å unngå metning Transportlaget 42
TCP sin strategi kontroller metning når det skjer å øke belastningen helt til metning detekteres, trekke seg tilbake igjen, for så å øke på nytt Alternativ strategi å forutsi når nettet holder på å gå i metning, og så redusere senderaten akkurat før pakker går tapt dette blir altså å unngå metningsproblemer i stedet for metningskontroll To muligheter ruter-sentrisk: DECbit og RED Gateways endemaskin-sentrisk: TCP Vegas Transportlaget 43 DECbit Legg til et metningsbit i hver pakkeheader Ruter følger gj.snittlig kølengde over siste busy+idle sykel + nåværende busysykel. sett metningsbit dersom gjenomsnittet er større enn 1 når pakken mottas forsøker å balansere gjennomstrømning mot forsinkelse Queue length Current time Previous cycle Averaging interval Current cycle Time Transportlaget 44
Endemaskinene destinasjonen gir ekko tilbake til kilden kilden merker seg hvor mange pakker som resulterer i et satt metningsbit hvis mindre enn 50% av siste vindus pakker hadde satt metningsbit, øk CongestionWindow med 1 pakke dersom 50% eller mer av siste vindus pakker hadde satt metningsbit, så multipliser CongestionWindow med 0.875 Transportlaget 45 Random Early Detection (RED) Gateways Informasjonsflyten er implisitt bare dropp en pakke (TCP vil gå i timeout) kan i prinsippet gjøres eksplisitt ved å merke pakken Tidlig tilfeldig dropping av pakker i stedet for å vente til køen blir full, dropp noen pakker i henhold til en sannsynlighet (drop probability) når kølengden er over et visst nivå (drop level) RED: detaljer regn ut gjennomsnittlig kølengde: AvgLen=(1-Weight)*AvgLen+Weight*SampleLen 0 < Weight < 1 (vanligvis 0.002) SampleLen er kølengden hver gang en pakke ankommer Transportlaget 46
To terskler for kølengde ifavglen MinThreshold then legg pakken i køen if MinThreshold < AvgLen < MaxThreshold regn ut sannsynligheten P dropp pakken med sannsynlighet P if MaxThreshold AvgLen dropp pakken MaxThreshold MinThreshold AvgLen Transportlaget 47 Sannsynlighet P flytende funksjon av AvgLen og hvor lenge siden forrige drop. Variabelen count holder rede på antallet nye pakker som er lagt inn i køen (ikke droppet) mens AvgLen lå mellom de to tersklene TempP = MaxP * (AvgLen - MinThreshold) /(MaxThreshold - MinThreshold) P = TempP/(1 - count * TempP) Transportlaget 48
Merk sannsynligheten for å droppe pakker fra en gitt flyt er grovt sett proporsjonal med størrelsen på flyten MaxP vil typisk være 0.02. Det betyr at når gjennomsnittlig kølengde er midt mellom terskelene vil omtrent 1 av 50 pakker bli kastet. Når trafikken er bursty bør MinThreshold være høy nok til at utnyttelsen av linkene er akseptabel. Differansen mellom tersklene bør være større enn den typiske økningen i beregnet gjennomsnittlig kølengde i en RTT. For dagens Internettrafikk er det rimelig å la MaxThreshold være MinThreshold multiplisert med 2. Transportlaget 49 TCP Vegas Ide: Kilden ser etter tegn til at en ruter nærmer seg metning -- f. eks ved at RTT vokser den opplevde senderaten flater ut Transportlaget 50
Ide: kilden ser etter tegn til at ruterens kø bygger segoppogmetningerpåvei, vedf. eksat RTT stiger Senderaten flater ut Kort strek er sendte KB 70 60 50 40 30 20 10 900 700 500 300 100 Sending KBps1100 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 Time (seconds) 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 Time (seconds) pakker Lang strek er når en retransmittert pakke ble sendt første gang Punkt markerer timeout hos sender Queue size in router 10 5 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 Time (seconds) Transportlaget 51 Algoritme la BaseRTT være minimum av alle målte RTTer (vanligvis RTT til den første pakken) dersom vi ikke overforbruker forbindelsen kan vi anta ExpectedRate = CongestionWindow / BaseRTT kilden regner ut den faktiske sendraten (ActualRate) en gang per RTT kilden sammenligner ActualRate med ExpectedRate: Diff = ExpectedRate - ActualRate if Diff < α increase CongestionWindow linearly else if Diff > β decrease CongestionWindow linearly else leave CongestionWindow unchanged Transportlaget 52
Parametre α: 1 pakke β: 3 pakker Eksempel på en trace Øverst: metningsvindu Under: ActualRate (svart) Expectedrate (blå) Intervall mellom α og β (skyggelagt) KB CAM KBps 70 60 50 40 30 20 10 240 200 160 120 80 40 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 Time (seconds) 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 Time (seconds) Transportlaget 53 Oppsummering Prinsipper på transportlaget multiplexing/demultiplexing Pålitelig overførig flytkontroll metningskontroll Eksempler i Tnternett UDP TCP Transportlaget 54