Datagram Socket my Socket 2 new Datagram Socket
















































![GBN: Επεκτεταμένη FSM αποστολέα rdt_send(data) L base=1 nextseqnum=1 if (nextseqnum < base+N) { sndpkt[nextseqnum] GBN: Επεκτεταμένη FSM αποστολέα rdt_send(data) L base=1 nextseqnum=1 if (nextseqnum < base+N) { sndpkt[nextseqnum]](https://slidetodoc.com/presentation_image_h/10183622da1f5b7d9589d74aad40647f/image-49.jpg)






































































- Slides: 119












Ασυνδεσμική αποπολύπλεξη (παράδειγμα) Datagram. Socket my. Socket 2 = new Datagram. Socket (9157); Datagram. Socket server. Socket = new Datagram. Socket (6428); application Datagram. Socket my. Socket 1 = new Datagram. Socket (5775); application P 1 P 3 P 4 transport network link physical source port: 6428 dest port: 9157 source port: 9157 dest port: 6428 Το SP δίνει τη “διεύθυνση επιστροφής” source port: ? dest port: ? Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -12


Συνδεσμική αποπολύπλεξη (παράδειγμα) application P 4 P 3 P 5 application P 6 P 2 P 3 transport network link physical host: IP address A server: IP address B source IP, port: B, 80 dest IP, port: A, 9157 source IP, port: A, 9157 dest IP, port: B, 80 physical source IP, port: C, 5775 dest IP, port: B, 80 host: IP address C source IP, port: C, 9157 dest IP, port: B, 80 3 τμήματα, όλα προορίζονται για IP διεύθυνση: B, θύρα προορισμού: 80 αποπολυπλέκονται σε διαφορετικές sockets Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -14

Συνδεσμική αποπολύπλεξη : Web Server με νήματα threaded server application P 4 P 3 P 2 P 3 transport network link physical host: IP address A server: IP address B source IP, port: B, 80 dest IP, port: A, 9157 source IP, port: A, 9157 dest IP, port: B, 80 physical source IP, port: C, 5775 dest IP, port: B, 80 host: IP address C source IP, port: C, 9157 dest IP, port: B, 80 3 -15















rdt 2. 0: περιγραφή FSM rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L sender receiver rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -30

rdt 2. 0: λειτουργίa χωρίς σφάλματα rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -31

rdt 2. 0: σενάριο σφάλματος rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -32


rdt 2. 1: αποστολέας, διαχειρίζεται αλλοιωμένα ACK/NAKs rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt) Wait for call 0 from above rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. NAK(rcvpkt) ) udt_send(sndpkt) Wait for ACK or NAK 0 L Wait for ACK or NAK 1 Wait for call 1 from above rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -34

rdt 2. 1: δέκτης, διαχειρίζεται αλλοιωμένα ACK/NAKs rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 0(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq 1(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq 0(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 1(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -35



rdt 2. 2: Αποσπάσματα αποστολέα, δέκτη rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && Wait for call 0 from above rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq 1(rcvpkt)) udt_send(sndpkt) Wait for 0 from below ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) udt_send(sndpkt) Wait for ACK 0 sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 0) receiver FSM fragment L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 1(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK 1, chksum) udt_send(sndpkt) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -38


rdt 3. 0 αποστολέας rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 1) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 0) ) timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 0) stop_timer timeout udt_send(sndpkt) start_timer L Wait for ACK 0 Wait for call 0 from above L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) Wait for ACK 1 Wait for call 1 from above rdt_rcv(rcvpkt) L rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -40








![GBN Επεκτεταμένη FSM αποστολέα rdtsenddata L base1 nextseqnum1 if nextseqnum baseN sndpktnextseqnum GBN: Επεκτεταμένη FSM αποστολέα rdt_send(data) L base=1 nextseqnum=1 if (nextseqnum < base+N) { sndpkt[nextseqnum]](https://slidetodoc.com/presentation_image_h/10183622da1f5b7d9589d74aad40647f/image-49.jpg)
GBN: Επεκτεταμένη FSM αποστολέα rdt_send(data) L base=1 nextseqnum=1 if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum, data, chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) Wait rdt_rcv(rcvpkt) && corrupt(rcvpkt) timeout start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -49


GBN «εν δράσει» sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt 1 send pkt 2 send pkt 3 (wait) rcv ack 0, send pkt 4 rcv ack 1, send pkt 5 ignore duplicate ACK pkt 2 timeout 012345678 send pkt 2 pkt 3 pkt 4 pkt 5 receiver Xloss receive pkt 0, send ack 0 receive pkt 1, send ack 1 receive pkt 3, discard, (re)send ack 1 receive pkt 4, discard, (re)send ack 1 receive pkt 5, discard, (re)send ack 1 rcv rcv pkt 2, pkt 3, pkt 4, pkt 5, deliver, send Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς ack 2 ack 3 ack 4 ack 5 3 -51




Επιλεκτική επανάληψη «εν δράσει» sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt 1 send pkt 2 send pkt 3 (wait) receiver Xloss receive pkt 3, buffer, send ack 3 rcv ack 0, send pkt 4 rcv ack 1, send pkt 5 receive pkt 4, buffer, send ack 4 receive pkt 5, buffer, send ack 5 record ack 3 arrived pkt 2 timeout 012345678 receive pkt 0, send ack 0 receive pkt 1, send ack 1 send pkt 2 record ack 4 arrived rcv pkt 2; deliver pkt 2, pkt 3, pkt 4, pkt 5; send ack 2 record ack 4 arrived Q: τι συμβαίνει όταν φθάνει το ack 2; Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -55





TCP: αριθμοί ακολουθίας και ACKs Αριθμοί ακολουθίας (Seq. #’s): § Αριθμός του πρώτου byte των δεδομένων του τμήματος ACKs: § seq # του επόμενου byte που αναμένεται από την άλλη πλευρά § συσσωρευτικά ACK Ε: πώς διαχειρίζεται ο δέκτης τα τμήματα εκτός σειράς; § A: η προδιαγραφή του TCP δεν καθορίζει (εναπόκειται στην υλοποίηση) outgoing segment from sender source port # dest port # sequence number acknowledgement number rwnd checksum urg pointer window size N sender sequence number space sent ACKed sent, not- usable not yet ACKed but not usable (“in-flight”) yet sent incoming segment to sender source port # dest port # sequence number acknowledgement number rwnd A checksum urg pointer Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -60

TCP αριθμοί ακολουθίας, ACKs Host B Host A User types ‘C’ host ACKs receipt of echoed ‘C’ Seq=42, ACK=79, data = ‘C’ Seq=79, ACK=43, data = ‘C’ host ACKs receipt of ‘C’, echoes back ‘C’ Seq=43, ACK=80 simple telnet scenario (1 byte γα το “C”) χρόνος 3 -61








Αποστολέας TCP (απλοποιημένος) data received from application above L Next. Seq. Num = Initial. Seq. Num Send. Base = Initial. Seq. Num wait for event create segment, seq. #: Next. Seq. Num pass segment to IP (i. e. , “send”) Next. Seq. Num = Next. Seq. Num + length(data) if (timer currently not running) start timer timeout retransmit not-yet-acked segment with smallest seq. # start timer ACK received, with ACK field value y if (y > Send. Base) { Send. Base = y /* Send. Base– 1: last cumulatively ACKed byte */ if (there are currently not-yet-acked segments) start timer else stop timer } Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -69

Σενάρια αναμεταδόσεων TCP Host B Host A Send. Base=92 X ACK=100 Seq=92, 8 bytes of data timeout Seq=92, 8 bytes of data Seq=100, 20 bytes of data ACK=100 ACK=120 Seq=92, 8 bytes of data Send. Base=100 ACK=100 Seαnd. Base = 100 time Seq=92, 8 bytes of data Send. Base=120 ACK=120 Send. Base=120 Σενάριο χαμένου ACK time Πρώιμη λήξη χρόνου (premature timeout) Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -70





Αλγόριθμος ταχείας αναμετάδοσης: event: ACK received, with ACK field value of y if (y > Send. Base) { Send. Base = y if (there are currently not-yet-acknowledged segments) start timer } else { increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) { resend segment with sequence number y } Ένα duplicate ACK για ένα ήδη επιβεβαιωμένο τμήμα Ταχεία αναμετάδοση 3 -75







Διαχείριση σύνδεσης TCP (συν. ) Πριν γίνει ανταλλαγή δεδομένων, ο αποστολέας κι ο δέκτης κάνουν “χειραψία”: q συμφωνούν για τη δημιουργία σύνδεσης ( ο καθένας να γνωρίζει ότι ο άλλος είναι πρόθυμος να δημιουργήσει τη σύνδεση) q συμφωνούν στις παραμέτρους της σύνδεσης application connection state: ESTAB connection variables: seq # client-to-server-to-client rcv. Buffer size at server, client network Socket client. Socket = new. Socket("hostname", "port number"); application connection state: ESTAB connection Variables: seq # client-to-server-to-client rcv. Buffer size at server, client network Socket connection. Socket = welcome. Socket. accept(); Δίκτυα Επικοινωνιών Ι - Επίπεδο μεταφοράς 3 -82



TCP 3 -μερής χειραψία FSM closed Socket connection. Socket = welcome. Socket. accept(); L SYN(x) SYNACK(seq=y, ACKnum=x+1) create new socket for communication back to client listen SYN(seq=x) SYN sent SYN rcvd ACK(ACKnum=y+1) Socket client. Socket = new. Socket("hostname", "port number"); ESTAB SYNACK(seq=y, ACKnum=x+1) ACK(ACKnum=y+1) L 3 -85



TCP: Κλείσιμο σύνδεσης (ανάλυση) client state server state ESTAB client. Socket. close() FIN_WAIT_1 FIN_WAIT_2 can no longer send but can receive data FINbit=1, seq=x CLOSE_WAIT ACKbit=1; ACKnum=x+1 wait for server close FINbit=1, seq=y TIMED_WAIT timed wait for 2*max segment lifetime ACKbit=1; ACKnum=y+1 can still send data LAST_ACK can no longer send data CLOSED 3 -88

Ο κύκλος ζωής μιας TCP σύνδεσης TCP server lifecycle TCP client lifecycle 3 -89


















Σύνοψη: Έλεγχος συμφόρησης TCP duplicate ACK dup. ACKcount++ L cwnd = 1 MSS ssthresh = 64 KB dup. ACKcount = 0 slow start timeout ssthresh = cwnd/2 cwnd = 1 MSS dup. ACKcount = 0 retransmit missing segment dup. ACKcount == 3 ssthresh= cwnd/2 cwnd = ssthresh + 3 retransmit missing segment New ACK! new ACK cwnd = cwnd+MSS dup. ACKcount = 0 transmit new segment(s), as allowed cwnd > ssthresh L timeout ssthresh = cwnd/2 cwnd = 1 MSS dup. ACKcount = 0 retransmit missing segment timeout ssthresh = cwnd/2 cwnd = 1 dup. ACKcount = 0 retransmit missing segment . New ACK! new ACK cwnd = cwnd + MSS (MSS/cwnd) dup. ACKcount = 0 transmit new segment(s), as allowed congestion avoidance duplicate ACK dup. ACKcount++ New ACK! New ACK cwnd = ssthresh dup. ACKcount = 0 fast recovery dup. ACKcount == 3 ssthresh= cwnd/2 cwnd = ssthresh + 3 retransmit missing segment duplicate ACK cwnd = cwnd + MSS transmit new segment(s), as allowed 3 -107












Q: in datagram subnet new route is chosen
Datagram forwarding table
Ip datagram
Datacenter fabric
Ip datagram format
Ip datagram
A switch in a datagram network uses
Ipv4 datagram
Udp rfc
Internet header length
Datagram network
Reliable datagram sockets
Datagram delivery protocol
Virtual circuit approach
Circuit switching timing diagram
Ip datagram format
User datagram protocol diagram
Wtls in mobile computing
Network layer design issues in computer networks
Loose source routing
Wtls in mobile computing
Characteristics of inter process communication
User datagram protocol diagram
Chapter 16 toward a new heaven and a new earth
Negative demand
Movies in new hartford ny
Both new hampshire and new york desire more territory
You control your destiny you don't need magic to do it
Weaknesses and strengths of the articles of confederation
Njbta
New classical and new keynesian macroeconomics
New york pennsylvania new jersey delaware
New classical macroeconomics
New-old approach to creating new ventures
Roosevelt taft wilson comparison
New oil and new wineskin
Lập trình socket giao tiếp tcp client/server java
Raw sockets in unix network programming
Modulo socket python
R socket programming
Socket programming tcp udp
Uninstall socket.io
Bind function in socket programming
Socket server
Socket abstraction
Berkeley sockets in computer networks
Django web socket
Socket in networking
Gqoutes
Socket adalah
Secure socket layer and transport layer security
Socket java example
Secure socket layer adalah
Raw sockets
Agiab
Sockdgram
Socket life cycle
Socket class encapsulates
System call pada client saat menggunakan socket adalah
Sketch and explain cotter joint
Rmi vs socket
Sock_addr_in
Radius and ulna animal
Radial circuits
Socket bind connect
Architektura cpu
What is a socket
Http unix socket
Lga vs pga socket
Socket outline
Ball and socket joint
Articulation movement
Udp socket timeout
Lesson 4.4 identifying movable joints
Socket.io udp
Socet gxp conference
Secure socket layer and transport layer security
Client in programming
Which tissue gives definite shape to body of vertebrae
Socket basics
Socket adalah
Pengertian socket
Tcp socket options
Applicazione distribuita
Raw socket quotes
Quadrilateral socket
Lua ltn12
Ball and socket joint
Socket osi layer
Anteversion vs retroversion
Socket java example
Marlo anatomical socket
Ball and socket joint
Socket address structure
Socket data structure
Convenience socket
Lpsockaddr
Socket.io room 만들기
Bsd socket programming
Wetoverload
Secure socket layer and transport layer security
Oktnb
Programming
Hot socket
Fork socket
Secure socket funneling
Socket pga
Socket adalah
Ball and socket joint engineering
Socket in distributed system
Java socket proxy
Welcome socket
A socket is an interface between
C++ udp socket
421 could not create socket
Java raw socket
Que es socket
Secure socket layer and transport layer security
Component diagram adalah
Tcp/ip sockets in c