Transportnivån Kommunikation mellan processer :HEVHUYHU 6RFNHW 0LQSURFHVV 6RFNHW /RJLVNNRPPXQLNDWLRQPHOODQDSSOLNDWLRQV SURFHVVHU1lWYHUNVQLYnQLQQHElUORJLVN NRPPXQLNDWLRQPHOODQQRGHU (QVRFNHWSRUW JUlQVVQLWWPHOODQWUDQVSRUWQLYnQRFK DSSOLNDWLRQVSURFHVVHQ KHOWDOPHGXQLNLGHQWLWHW UHVHUYHUDGH Kommunikation mellan processer Från transportnivån till rätt process demultiplexing Från processen - multiplexing 8'3 )UnQSRUW 7LOOSRUW Sockets och TCP En socket används för att uppkoppling (t.ex. 80) Ny socket används för dialog, servern skapar ny process/tråd Identifieras av Š Klientens IP-adress Š Klientens portnummer Š Serverns IP-adress Š Portnummer för tjänsten UDP (User Datagram Protocol) ELWDU.lOOSRUW 'HVWLQDWLRQVSRUW /lqjg &KHFNVXPPD $SSOLNDWLRQVGDWD Checksumman Algoritm alla 16-bits ord = S Trunkera S till 16 bitar Beräkna 1-komplementet av S = S1 Kontroll: S + S1 = 1111 1111 1111 1111 1000 1000 1000 1000 + 1101 1101 1101 1101 1 0110 0110 0110 0101 0110 0110 0110 0101 1001 1001 1001 1010 0110 0110 0110 0101 + 1001 1001 1001 1010 1111 1111 1111 1111
Säker kommunikation Överföringsfel Tillståndsdiagram uppifrån Skicka Paketera Skicka iväg nerifrån Ta emot Extrahera Skicka uppåt Checksummor för felupptäckt Positiva och negativa bekräftelser Upprepade meddelanden sändare mottagare Tillståndsdiagram sändare uppifrån Skicka Ta emot ACK Vänta ACK Eller NAK Ta emot emot NAK Skicka en gång till Korrupt bekräftelse Inför ett sekvensnummer Š NAK eller korrupt => skicka om Felaktigt meddelande Skicka NAK nerifrån mottagare Korrekt meddelande Extrahera Skicka uppåt Skicka ACK Š Om en korrekt kopia dyker upp, skicka ACK Sekvensnummer i bekräftelse Tillståndsdiagram för sändare Skicka tillbaka senast korrekta sekvensnummer => endast ACK behövs Om man mottar två ACK med samma sekvensnummer => meddelandet efter korrupt Ta emot emot ACK(1) Uppifrån (0) Vänta ACK (1) Skicka(0) Vänta ACK (0) Uppifrån (1) Korrupt eller ACK(1) Skicka(0) en gång till Ta emot emot ACK(0) Korrupt eller ACK(0) Skicka(1) en gång till Skicka(1)
Borttappade meddelanden Tillståndsdiagram för mottagare n kan vänta en stund och upprepa meddelandet om inget svar erhålls n skickar med sekvensnummer för senast korrekt meddelande nerifrån (0) Korrupt eller (1) Skicka ACK(1) en gång till Ta emot(0) Packa upp Skicka uppåt Skicka ACK(0) Ta emot emot ACK(1) Packa upp Skicka uppåt Skicka ACK(1) Korrupt eller (0) Skicka ACK (0) en gång till Nerifrån(1) Fall 1: Hakuna Matata Fall 2: Borttappat paket WLPHRXW Fall 3: Borttappad bekräftelse Fall 4: Tidig timeout WLPHRXW WLPHRXW
Pipelining Sliding windows Kan inte vänta på en bekräftelse för varje meddelande. Mer än en bit för sekvensnummer Buffert på sändarsidan av icke bekräftade meddelande Buffert på mottagarsidan för att kunna leverera i rätt ordning. bekräftade möjliga 2 sända 3 väntande ej användbara Fönsterstorlek = 5 Sändande sida Skicka om fönsterstorleken inte överskrids Bekräftelse t.o.m. sekvensnummer i ACK Vid time-out skickas alla paket som inte bekräftats (en timeout för först skickat men ej bekräftat) Mottagande sida Nästa förväntade kommer in => skicka ACK med samma sekvensnummer och leverera till applikationsnivån Felaktig ordning => kasta, skicka ACK på senaste korrekta (alla skickas om i alla fall) Selective Repeat Endast paket med problem skickas om Fortfarande sliding window Varje paket bekräftas för sig (timeout för varje, ej bekräftat, paket). n lagrar paket som kommer in i fel ordning TCP Transmission Control Protocol Connection-oriented Mellan slutnoder, inga mellannoder inblandade Tillstånd enbart hos klient och server Š Sänd- eller mottagningsbuffert Š Diverse tillstånd
Meddelandeformat Sekvensnummer Som UDP: källadress, destinationsadress, check-summa, längd, data från applikationen Sekvens- och bekräftelsenummer (32 bitar) Antalet bytes en mottagare är villig att ta emot Fält för förhandling om buffert- och fönsterstorlek Flaggor som ACK, RST, SYN, FIN Diverse skräp som inte används 6HN $FN 6HN $FN 6HN $FN 6HN $FN Väntetider Vänta en stund innan meddelande skickas om (en timer per nod) Beräknad svarstid = 0,875 * beräknad svarstid + 0,125 * aktuell svarstid Beräknad avvikelse = 0,75 * beräknad avvikelse + 0,25 * aktuell svarstid beräknad svarstid Vänta en stund = beräknad svarstid + 4 * beräknad avvikelse Förenklad sändare Public Class TCPData End Class Public Class TCPSegment End Class Public Class IPSender End Class Public Class TCPSender Private nextseqnum, sendbase As Integer Private averagetime, deviation As Double Private thetimer As Timers.Timer Private IP As IPSender Public Sub New(ByVal initialseq As Integer, ByVal average As Double, ByVal dev As Double, ByVal ip As IPSender) Me.nextSeqNum = initialseq Me.sendBase = initialseq Me.averageTime = average Me.deviation = dev Me.theTimer = New Timers.Timer() Me.theTimer.Enabled = False Me.IP = ip End Sub Public Sub send(byval d As TCPData) Dim segment As TCPSegment = New TCPSegment(d, nextseqnum) If Not thetimer.enabled Then thetimer.interval = averagetime + 4 * deviation thetimer.autoreset = False thetimer.enabled = True End If IP.send(segment) nextseqnum += d.lenght End Sub
Public Sub timerevent() Dim d As TCPSegment hämta segment som inte bekräftats 'använd det som har lägst sekvensnummer IP.send(d) 'starta timer End Sub Public Sub ackrecieved(byval seq As Integer) If seq > sendbase Then sendbase = seq 'om det finns ej bekräftade segment 'starta om timer End If End Sub End Class Fall 1 WLPHRXW Fall 2 Fall 3 7LPHRXW 6HT 7LPHRXW 6HT 7LPHRXW 6HT Förbättringar Flödeskontroll Omstart av timer efter time-out Vill inte översvämma mottagaren Kan betyda att nätet överbelastat Š Fördubbla intervallet för varje gång Tre ack för ett meddelade Flera senare meddelande mottagna men ett hål har uppstått Š Skicka om direkt, vänta inte på timer 6WRUOHNHQ VNLFNDVLDOOD VYDU
Uppkoppling Nedkoppling 1. Skicka meddelande med SYN=1 och initialt sekvensnummer 2. Servern svarar med SYN=1, sitt initiala sekvensummer samt bekräftar klientens sekvensnummer 3. Klienten bekräftar serverns sekvensnummer 1. A skickar meddelande med FIN=1 2. B bekräftar 3. B skickar med meddelande med FIN=1 4. A bekräftar Belastning Belastning Exempel 1: Två sändande noder via en gemensam router med oändlig buffert samt kapacitet R Exempel 2: begränsad buffert i router 0RWWDJQD 5 6NLFNDGH ) UGU MQLQJ 5 6NLFNDGH 0RWWDJQD,GHDOIDOOHW 9HUNOLJWXWIDOO 5 6NLFNDGH 6NLOOQDGHQ EHURUSn" Belastning Belastningskontroll TCP Exempel 3: flera noder, flera routrar 0RWWDJQD 6NLFNDGH
Lyssna Åtgärda (förenklat) 7LPHRXW GXSOLFHUDGH Ny variabel (fönster) för data som kan skickas Halvera storleken vid belastning Öka storleken försiktigt Storlek += meddelandestorlek Öka mer i början