Informatika | Hálózatok » Szállítási réteg

Alapadatok

Év, oldalszám:2006, 52 oldal

Nyelv:magyar

Letöltések száma:130

Feltöltve:2009. március 04.

Méret:568 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!

Tartalmi kivonat

Szállítási réteg Szállítási réteg 2 Működési terület Adatkapcsolati réteg Szállítási 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 Szállítási réteg 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 Szállítási réteg 5 Multiplexelés, demultiplexelés • TPDU • szállítási réteg cím • TSAP • port vevő alkalmazási réteg adat segment P1 header M segment Ht M Hn

segment application transport network M M application transport network M P2 application transport network Szállítási réteg 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 Szállítási réteg 7 TCP, UDP/IP megvalósítások TCP output Alkalmazások UDP output Alkalmazások control messages UDP portok TCP input proc TCP timer TCP proc IP sor TCP sor O.R O.R IP proc IP proc IP sorok Dev1 Dev2 HW NI1 HW NI2 Hardver Devn Dev1 Dev2 HW NIn HW NI1 HW NI2 Devn Hardver HW NIn Szállítási réteg 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 Szállítási réteg 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 Szállítási réteg 10 UDP (folyt.) • UDP felhasználás • média streamelés • DNS • SNMP 0 16 31 SrcPort DstPort Checksum Length Data UDP szegmens Szállítási réteg 11 Megbízható szállítás • Kapcsolat felvétel • Kapcsolat bontás • Adatfolyam szabályzás és pufferelés • Multiplexelés • Hibakezelés Szállítási réteg 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 RDT protokoll Szállítási réteg RDT protokoll Nem megbízható csatorna Hálózati réteg

Szállítási 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 Jelentés Listen Folyamat blokkolása kapcsolatfelvételi kérésig Connect Aktív kapcsolatfelvétel Send Adatküldése a kapcsolaton Receive Adat fogadása a kapcsolaton Disconnect Kapcsolat bontása Szállítási réteg 14 Szállítási szolgáltatásprimitívek (folyt.) Nincs kapcsolat Passzív kapcsolatfelvétel folyamatban Aktív kapcsolatfelvétel folyamatban Kapcsolat felépítve Szerver oldal Passzív kapcsolatbontás folyamatban Kliens oldal Aktív kapcsolatbontás folyamatban Nincs kapcsolat A kapcsolat állapotgépe Szállítási réteg 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 • • • • • • • Szállítási réteg 16 Kapcsolat felvétel (folyt.) • Háromutas kézfogás CR (seq=x) ACK (seq=y, ack=x) DATA (seq=x, ack=y) Szállítási réteg 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 Timer ACK Szállítási réteg 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 TCP Send buffer Receive buffer Segment Segment Segment Szegmensek átvitele Szállítási réteg 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 Szállítási réteg 20 TCP szegmens • Kapcsolat azonosítás • <SrcIPAddr,

SrcPort,DestIPAddr,DestPort> 0 10 4 16 31 SrcPort DstPort SequenceNum Acknowledgment HdrLen 0 Flags AdvertisedWindow Checksum UrgPtr Options (variable) Data Szállítási réteg 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 Szállítási réteg 22 TCP kapcsolatfelvétel • Háromutas kézfogás Aktív fél (kliens) Passzív fél (szerver) SYN, Sequ enceN um = x ue um nceN = y, x+1 = t n me + g d e l SYN ow Ackn ACK, Ackno wledg ment =y+1 Seq ACK, Szállítási réteg 23 TCP kapcsolatbontás Kliens close Szerver FIN ACK timed wait FIN closed ACK close Szállítási réteg 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. Szállítási réteg 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 Close/FIN SYN + ACK/ACK ESTABLISHED Close/FIN FIN/ACK FIN WAIT 1 ACK FIN WAIT 2 SYN SENT CLOSE WAIT AC FIN/ACK K + FI FIN/ACK N /A C K Close/FIN CLOSING ACK Timeout after two segment lifetimes TIME WAIT LAST ACK ACK CLOSED Szállítási réteg 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 Szállítási réteg 27 TCP nyugták Esemény Vevő oldali történés szegmens érkezik sorrendben, késleltett nyugtaküldés nincs rés, eddig minden nyugtázva szegmens érkezik sorrendben, nincs rés, késleltett nyugtázás folyamatban nyugtaküldés szegmens érkezik nem sorrendben, duplikált nyugta küldése az első várt rés keletkezik bájtra szegmens érkezik, mely a rés elejét nyugtaküldés betömi Szállítási réteg 28 TCP output processz • egy lehetséges TCP output megvalósítás send IDLE TRANSMIT all segments & ACKs sent all segments & ACKs sent retr. timer expires ACK arrives zero window RETRANSMIT retr. times expires window becomes nonzero PERSIST persist timer expires Szállítási réteg 29 Újraküldési helyzetek Host A X 8 byte s data =100 ACK sérülés

Seq=9 2, 8 byte s data =100 ACK elveszett ACK scenárió Host B Seq=9 2, Seq=100 timeout Seq=92 timeout timeout Seq=9 2, idő Host A Host B 8 byte s data Seq= 100, 20 by tes d ata 00 =1 K 120 AC ACK= Seq=9 2, 8 byte s data 20 K=1 C A korai timeout, cumulative ACKs Szállítási réteg 30 Csúszóablakos adatfolyam szabályozás Fogadó alkalmazás Küldő alkalmazás TCP LastByteWritten LastByteAcked LastByteSent TCP LastByteRead NextByteExpected LastByteRcvd Szállítási réteg 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) Szállítási réteg 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 Szállítási réteg 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 Szállítási réteg 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 Szállítási

réteg 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; /* 2IP 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); } Szállítási réteg 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; } Szállítási réteg 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 Szállítási réteg 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

Szállítási réteg 39 TCP slowstart initialize: Congwin = 1 for (each segment ACKed) Congwin++ until (loss event OR CongWin > threshold) RTT Slowstart algoritmus Hoszt A Hoszt B 1 szegme ns 2 szegme ns 4 szegme ns idő Szállítási réteg 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 Szállítási réteg 41 TCP Reno TCP Reno Congestion avoidance 14 congestion window size (segments) /* 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 12 10 8 6 threshold 4 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Transmission round TCP Tahoe TCP Reno Szállítási réteg 42 TCP fast retransmit 70 60

50 B K40 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 Time (seconds) 5.0 6.0 7.0 Szállítási réteg 43 TCP Vegas 70 60 50 B 40 K 30 20 10 s p B K 0.5 1.0 15 2.0 2.5 3.0 3.5 40 45 Time (seconds) 5.0 5.5 6.0 6.5 7.0 7.5 8.0 85 0.5 1.0 15 2.0 2.5 3.0 3.5 40 45 Time (seconds) 5.0 5.5 6.0 6.5 7.0 7.5 8.0 85 0.5 1.0 15 2.0 2.5 3.0 3.5 40 45 Time (seconds) 5.0 5.5 6.0 6.5 7.0 7.5 8.0 85 g1100 n r ie 900 700 d t 500 n u e o 300 S r 100 n i e z i 10 s e u e u Q 5 Szállítási réteg 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 70 60 else 50 B 40 K 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 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 40 45 Time (seconds) Szállítási réteg 45 TCP AIMD tisztességessége egyenlő sávszélesség Kapcsolat 2 átvitele R kapcsolat 1 átvitele R Szállítási réteg 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 09 • β between 0.1 and 02 • Set timeout based on EstimatedRTT • TimeOut = 2 x EstimatedRTT Minták Átlag Szállítási réteg 47 Karn/Partridge algoritmus Fogadó Küldő eti k ü ld é Újra küld é s ACK Ered s Mért RTT Mért RTT Ered Fogadó

Küldő eti k ü ld é s ACK Újra küld é • Újraküldéskor ne mérjünk • Újraküldés esetén Timeout=2*Timeout s Szállítási réteg 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 11 10 9 T i m e O u t 8 7 6 5 4 3 2 1 RTT: 1 -> 5 Time Szállítási réteg 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 Szállítási réteg 50 Berkeley Socket API Primitív Jelentés SOCKET Új hálózati komm. végpont létrehozása BIND Cím hozzárendelése a sockethez. LISTEN Kapcsolat fogadás engedélyezése. ACCEPT Blokkolás bejövő kapcsolatig. CONNECT SEND RECEIVE CLOSE

Aktív kapcsolódás. Adatküldés. Adatfogadás. Kapcsolat lezárása. Szállítási réteg 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 + ); modifiedSentence = inFromServer.readLine(); System.outprintln("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } Kliens Szállítási réteg 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() + ; outToClient.writeBytes(capitalizedSentence); } } } Szerver