2 Működési terület Adatkapcsolati réteg Szállítási réteg
3 Szállítási protokoll Alkalmazások, folyamatok között üzenetek garantált célbajuttatása üzenetek szállítása a megfelelő sorendben minden üzenetből csak egy példány eljuttatása tetszőleges hosszúságú üzenetek küldő és fogadó szinkronizációja fogadó szabályozhassa a küldést több alkalmazási folyamat ugyanazon a gépen
4 Szállítási protokoll (folyt.) megoldandó problémák (hálózatok jellemzői) üzenet vesztés üzenetek rossz sorrendbenérkeznek duplikált üzenetek korlátos üzenet méret tetszőlegesen nagy késleltetések
5 Multiplexelés, demultiplexelés TPDU szállítási réteg cím TSAP port segment header alkalmazási réteg adat segment Ht M Hn segment P1 M application transport network vevő M application transport network M M P2 application transport network
6 Internet szállítási szolgáltatások Megbízható, sorrendtartó unicast (TCP) torlódáskezelés adatfolyam szabályozás kapcsolat menedzselés Nem megbízható unicast vagy multicast (UDP) Nem megoldott szolgáltatások valósidejű garantált sávszélesség megbízható multicast
7 TCP, UDP/IP megvalósítások Alkalmazások TCP output Alkalmazások UDP output TCP input proc UDP portok control messages TCP timer TCP proc TCP sor O.R. IP sor O.R. IP proc IP proc IP sorok Dev1 Dev2 Devn Dev1 Dev2 Devn HW NI1 HW NI2 Hardver HW NIn HW NI1 HW NI2 Hardver HW NIn
8 Kapcsolat nélküli szállítás (UDP) kapcsolat nélküli folyamat-folyamat kommunikáció demultiplexálás portokra 16 bites port címek nem megbízható, nincs átvitel vezérlés
9 UDP Előnyök nincs kapcsolat felépítési késleltetés egyszerű nem kell kapcsolat menedzselés kis szegmens header nincs torlódás kezelés azonnali csatornára kerülés
10 UDP (folyt.) UDP felhasználás média streamelés DNS SNMP 0 16 31 SrcPort DstPort Checksum Length Data UDP szegmens
11 Megbízható szállítás Kapcsolat felvétel Kapcsolat bontás Adatfolyam szabályzás és pufferelés Multiplexelés Hibakezelés
12 Megbízható szállítás (folyt.) A megbízhatatlan csatorna (hálózati szolgáltatás) határozza meg a szállítási megoldás bonyolultságát Küld! folyamat Fogadó folyamat Alkalmazási réteg Megbízható csatorna Szállítási réteg RDT protokoll RDT protokoll Nem megbízható csatorna Hálózati réteg
13 Szállítási szolgáltatásprimitívek Alapvető funkciók a szállítási szolgáltatás használatára Primitív Listen Connect Send Receive Disconnect Jelentés Folyamat blokkolása kapcsolatfelvételi kérésig Aktív kapcsolatfelvétel Adatküldése a kapcsolaton Adat fogadása a kapcsolaton Kapcsolat bontása
14 Szállítási szolgáltatásprimitívek (folyt.) Nincs kapcsolat Passzív kapcsolatfelvétel folyamatban Aktív kapcsolatfelvétel folyamatban Szerver oldal Kapcsolat felépítve Kliens oldal Passzív kapcsolatbontás folyamatban Aktív kapcsolatbontás folyamatban Nincs kapcsolat A kapcsolat állapotgépe
15 Kapcsolat felvétel Nem hibamentes hálózat - többszörös kapcsolat felvételt meg kell előzni Rossz megoldások minden átvitelhez új cím kapcsolat azonosítók használata Jó megoldás csomagokhoz TTL szekvenciaszám <- óra csúszó ablakos algoritmus tiltott terület
16 Kapcsolat felvétel (folyt.) Háromutas kézfogás CR (seq=x) ACK (seq=y, ack=x) DATA (seq=x, ack=y)
17 Kapcsolat bontása Cél az adatvesztés elkerülése Két hadsereg probléma Megoldás háromutas kézfogás DR Timer DR ACK Timer
18 TCP Kapcsolat orientált Bájtfolyam Full duplex Adatfolyam szabályozás Torlódás kezelés Alkalmazás folyamat alkalmazás folyamat bájtok írása bájtok olvasása TCP Send buffer TCP Receive buffer Segment Segment Segment Szegmensek átvitele
19 Végpont-végpont adattovábbítás Problémák Explicit kapcsolat felvétel és bontás Különböző RTT-k Nagy hálózati késleltetések Torlódás felléphet
20 TCP szegmens Kapcsolat azonosítás <SrcIPAddr, SrcPort,DestIPAddr,DestPort> 0 4 10 16 31 SrcPort DstPort SequenceNum Acknowledgment HdrLen 0 Flags Checksum AdvertisedWindow UrgPtr Options (variable) Data
21 TCP adatfolyam szabályozás Fejléc mezők Csúszóablakos adatfolyam szabályozás SequenceNum, Acknowledgement, AdvertisedWindow Flagek SYN, FIN, RST, PSH, URG, ACK Checksum pseudo header+tcp header+data
22 TCP kapcsolatfelvétel Háromutas kézfogás Aktív fél (kliens) SYN, SequenceNum = x Passzív fél (szerver) SYN + ACK, SequenceNum = y, Acknowledgment = x + 1 ACK, Acknowledgment = y + 1
23 TCP kapcsolatbontás Kliens Szerver close FIN ACK FIN close timed wait closed ACK
24 TCP kapcsolatmodell Állapot Leírás CLOSED Nincs nyitott vagy függő kapcsolat. LISTEN Szerver bejövő kapcsoaltra vár. SYN RCVD Kapcsolat felvételi kérés érkezett. SYN SENT Kapcsolat felvétel kezdeményezése megtörtént. ESTABLISHED Kapcsolat felépítve, adatátvitel. FIN WAIT 1 Alkalmazás a kapcsolat bontását kezdeményezte. FIN WAIT 2 Másik fél is egyetért a kapcsolat bontással. TIMED WAIT Várakozás a csomagok kihalására. CLOSING Szimultán kapcsolat bontási kísérlet. CLOSE WAIT Másik oldal kapcsolatbontást kezdeményezett. LAST ACK Várakozás az utolsó nyugtára.
25 TCP kapcsolat állapotgép CLOSED Active open/syn Passive open Close Close LISTEN SYN_RCVD SYN/SYN + ACK Send/SYN SYN/SYN + ACK ACK SYN + ACK/ACK SYN_SENT Close/FIN ESTABLISHED FIN_WAIT_1 ACK Close/FIN FIN/ACK ACK + FIN/ACK FIN/ACK CLOSE_WAIT Close/FIN FIN_WAIT_2 CLOSING LAST_ACK FIN/ACK ACK TIME_WAIT Timeout after two segment lifetimes ACK CLOSED
26 TCP szekvenciaszámok Szekvenciaszám a szegmensben lévő első adatbájt streambeli száma Nyugta a következő várt adatbájt streambeli száma kumulatív nyugták Data (SequenceNum) Sender Receiver Acknowledgment + AdvertisedWindow
27 TCP nyugták Esemény Vevő oldali történés szegmens érkezik sorrendben, nincs rés, eddig minden nyugtázva szegmens érkezik sorrendben, nincs rés, késleltett nyugtázás folyamatban szegmens érkezik nem sorrendben, rés keletkezik szegmens érkezik, mely a rés elejét betömi késleltett nyugtaküldés nyugtaküldés duplikált nyugta küldése az első várt bájtra nyugtaküldés
28 TCP output processz egy lehetséges TCP output megvalósítás send IDLE all segments & ACKs sent TRANSMIT all segments & ACKs sent retr. timer expires ACK arrives zero window window becomes nonzero RETRANSMIT PERSIST retr. times expires persist timer expires
29 Újraküldési helyzetek Host A Host B Host A Host B Seq=92, 8 bytes data timeout Seq=92, 8 bytes data X sérülés ACK=100 Seq=92, 8 bytes data Seq=100 timeout Seq=92 timeout Seq=100, 20 bytes data ACK=100 ACK=120 Seq=92, 8 bytes data ACK=100 ACK=120 idő elveszett ACK scenárió korai timeout, cumulative ACKs
30 Csúszóablakos adatfolyam szabályozás Küldő alkalmazás Fogadó alkalmazás TCP TCP LastByteWritten LastByteRead LastByteAcked LastByteSent NextByteExpected LastByteRcvd
31 Adatfolyam szabályozás Küldő puffer mérete: MaxSendBuffer Fogadó puffer mérete: MaxRcvBuffer Fogadó oldal LastByteRcvd - NextByteRead MaxRcvBuffer AdvertisedWindow = MaxRcvBuffer - (LastByteRcvd - NextByteRead)
32 Adatfolyam szabályozás (folyt.) Küldő oldal NextByteExpected LastByteRcvd + 1 LastByteSent - LastByteAcked AdvertisedWindow EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked) LastByteWritten - LastByteAcked MaxSendBuffer küldő blokkolása ha (LastByteWritten - LastByteAcked) + y > MaxSendBuffer
33 A szekvenciaszám tartomány 32 bites szekvencia szám Sávszélesség T1 (1.5Mbps) Ethernet (10Mbps) T3 (45Mbps) FDDI (100Mbps) STS-3 (155Mbps) STS-12 (622Mbps) STS-24 (1.2Gbps) Átfordulási idő 6.4 hours 57 minutes 13 minutes 6 minutes 4 minutes 55 seconds 28 seconds 16 bites AdvertisedWindow RTT 100 ms Sávszélesség T1 (1.5Mbps) Ethernet (10Mbps) T3 (45Mbps) FDDI (100Mbps) STS-3 (155Mbps) STS-12 (622Mbps) STS-24 (1.2Gbps) Késleltetés x Sávszélesség 18KB 122KB 549KB 1.2MB 1.8MB 7.4MB 14.8MB
34 Implementálási részletek TCP állapotgép megvalósítása Tábla-vezérelt állapot-esemény kétdimenziós fv. pointer-táblázat Eljárás-vezérelt eljárás minden lehetséges bejövő állapothoz
35 Implementálási részletek (folyt.) Ellenőrző összeg unsigned short tcpcksum(struct ep *pep, unsigned len) { struct ip *pip = (struct ip *)pep->ep_data; struct tcp *ptcp = (struct tcp *)pip->ip_data; unsigned short *sptr; unsigned long tcksum; unsigned i; tcksum = 0; sptr = (unsigned short *) &pip->ip_src; /* 2*IP_ALEN octets = IP_ALEN shorts... */ /* they are in net order. */ for (i=0; i<ip_alen; ++i) tcksum += *sptr++; sptr = (unsigned short *)ptcp; tcksum += hs2net(ipt_tcp + len); if (len % 2) { ((char *)ptcp)[len] = 0; /* pad */ len += 1; /* for the following division */ } len >>= 1; /* convert to length in shorts */ for (i=0; i<len; ++i) tcksum += *sptr++; tcksum = (tcksum >> 16) + (tcksum & 0xffff); tcksum += (tcksum >> 16); } return (short)(~tcksum & 0xffff);
36 Implementálási részletek (folyt.) Silly Window szindróma int tcprwindow(struct tcb *ptcb) { int window; } window = ptcb->tcb_rbsize - ptcb->tcb_rbcount; if (ptcb->tcb_state < TCPS_ESTABLISHED) return window; /* * Receiver-Side Silly Window Syndrome Avoidance: * Never shrink an already-advertised window, but wait for at * least 1/4 receiver buffer and 1 max-sized segment before * opening a zero window. */ if (window*4 < (int)ptcb->tcb_rbsize window < (int)ptcb->tcb_rmss) window = 0; window = max(window, ptcb->tcb_cwin - ptcb->tcb_rnext); ptcb->tcb_cwin = ptcb->tcb_rnext + window; return window;
37 Implementálási részletek (folyt.) Urgent feldolgozás Urgent flag bit Urgent pointer (adatok vége) Push feldolgozás Push flag Puffer kiürítése vevő felébresztése
38 TCP torlódáskezelés sávszélesség kihasználása max. Congwin növelés csomag vesztésig csökkentés két fázis lassú kezdés torlódás elkerülés küszöbérték
39 TCP slowstart Slowstart algoritmus initialize: Congwin = 1 for (each segment ACKed) Congwin++ until (loss event OR CongWin > threshold) RTT Hoszt A Hoszt B 1 szegmens 2 szegmens 4 szegmens idő
40 TCP Tahoe TCP Tahoe Congestion avoidance /* slowstart is over */ /* Congwin > threshold */ Until (loss event) { every w segments ACKed: Congwin++ } threshold = Congwin/2 Congwin = 1 perform slowstart
41 TCP Reno TCP Reno Congestion avoidance /* slowstart is over */ /* Congwin > threshold */ Until (loss event) { every w segments ACKed: Congwin++ } threshold = Congwin/2 If (loss detected by timeout) { Congwin = 1 perform slowstart } If (loss detected by triple duplicate ACK) Congwin = Congwin/2 congestion window size (segments) 14 12 10 8 6 4 2 0 threshold 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Transmission round TCP Tahoe TCP Reno
42 TCP fast retransmit 70 60 50 B K 40 30 20 10 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (seconds) 70 60 50 B40 K30 20 10 1.0 2.0 3.0 4.0 5.0 6.0 7.0 Time (seconds)
43 TCP Vegas B K s p B K 70 60 50 40 30 20 10 g 1100 n r i 900 d e 700 n t 500 e u o 300 S r 100 n i 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) e z i s e u e u Q 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)
44 TCP Vegas (folyt.) let BaseRTT be the minimum of all measured RTTs (commonly the RTT of the first packet) if not overflowing the connection, then ExpectedRate = CongestionWindow / BaseRTT source calculates current sending rate (ActualRate) once per RTT source compares ActualRate with ExpectedRate Diff = ExpectedRate - ActualRate if Diff < a increase CongestionWindow linearly else if Diff > b decrease CongestionWindow linearly else B K 70 60 50 40 30 20 10 leave CongestionWindow unchanged 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) s p B240 K200 160 M120 A 80 C 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)
45 TCP AIMD tisztességessége R egyenlő sávszélesség Kapcsolat 2 átvitele kapcsolat 1 átvitele R
46 Adaptív újraküldés Eredeti algoritmus Measure SampleRTT for each segment/ack pair Compute weighted average of RTT EstimatedRTT = α x EstimatedRTT + β x SampleRTT where α + β = 1 α between 0.8 and 0.9 β between 0.1 and 0.2 Minták Átlag Set timeout based on EstimatedRTT TimeOut = 2 x EstimatedRTT
47 Karn/Partridge algoritmus Küldő Fogadó Küldő Fogadó Eredeti küldés Eredeti küldés Mért RTT Újraküldés ACK Mért RTT ACK Újraküldés Újraküldéskor ne mérjünk Újraküldés esetén Timeout=2*Timeout
48 Jacobson/Karel algoritmus Diff = SampleRTT - EstimatedRTT EstimatedRTT = EstimatedRTT + (δ x Diff) Deviation = Deviation + δ( Diff - Deviation) where δ is a fraction between 0 and 1 TimeOut = μ x EstimatedRTT + φ x Deviation where μ = 1 and φ = 4 T i m e O u t 11 10 9 8 7 6 5 4 3 2 1 RTT: 1 -> 5 Time
49 TCP kiterjesztések Opcionális fejlécként megvalósítva 32 bites időbélyeg a szekvenciaszám tartomány kiterjesztésére advertisedwindow skálázott használata
50 Berkeley Socket API Primitív SOCKET BIND LISTEN ACCEPT CONNECT SEND RECEIVE CLOSE Jelentés Új hálózati komm. végpont létrehozása. Cím hozzárendelése a sockethez. Kapcsolat fogadás engedélyezése. Blokkolás bejövő kapcsolatig. Aktív kapcsolódás. Adatküldés. Adatfogadás. Kapcsolat lezárása.
51 Socket API TCP példa import java.io.*; import java.net.*; class TCPClient { public static void main(string argv[]) throws Exception { String sentence; String modifiedsentence; BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); Socket clientsocket = new Socket("hostname", 6789); DataOutputStream outtoserver = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader infromserver = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = infromuser.readline(); outtoserver.writebytes(sentence + '\n'); modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); } } clientsocket.close(); Kliens
52 Socket API TCP példa (folyt.) import java.io.*; import java.net.*; class TCPServer { public static void main(string argv[]) throws Exception { String clientsentence; String capitalizedsentence; ServerSocket welcomesocket = new ServerSocket(6789); while(true) { Socket connectionsocket = welcomesocket.accept(); BufferedReader infromclient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); DataOutputStream outtoclient = new DataOutputStream(connectionSocket.getOutputStream()); clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; } } } outtoclient.writebytes(capitalizedsentence); Szerver