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_h2/7d5b38dddee50ce84feed4c362e0bc8d/image-49.jpg)





































































- Slides: 118












Ασυνδεσμική αποπολύπλεξη (παράδειγμα) 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); P 1 application 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 3 P 2 transport network link physical host: IP address A transport 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 3 application P 4 P 3 P 2 transport network link physical host: IP address A transport 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_h2/7d5b38dddee50ce84feed4c362e0bc8d/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 Send. Base=120 ACK=120 Send. Base=120 time Σενάριο χαμένου ACK Πρώιμη λήξη χρόνου (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 can still send data LAST_ACK can no longer send data ACKbit=1; ACKnum=y+1 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
Ip datagram format
Datagram network
Reliable datagram sockets
Datagram delivery protocol
Difference between datagram and virtual circuit operation
Circuit switching timing diagram
Ip datagram format
User datagram protocol diagram
Wtp in mobile computing
Loose source routing
Network layer design issues in computer networks
Session mobility in mobile computing
External data representation and marshalling
In the field of udp, each used datagarm can travel on a
Datagram forwarding table
Datagram nedir
Reliable datagram sockets
Ip datagram format
Ip datagram
A switch in a datagram network uses
Ipv4 datagram
Udp protocol rfc
Split direct speech worksheet
3 weaknesses of the articles of confederation
New years old is new again
New classical and new keynesian macroeconomics
New york pennsylvania new jersey delaware
New-old approach to creating new ventures
New classical and new keynesian macroeconomics
New nationalism vs new freedom venn diagram
New oil and new wineskin
Chapter 16 toward a new heaven and a new earth
Marketing kotler keller
Marquee orchard 14
Leanne keene french ambassador arrives from paris
Ball and socket joint
Biaxial ellipsoid joint
Udp socket timeout
Socket.io udp
Lesson 4.1 anatomical structure of a long bone
Bae socet gxp
Secure socket layer and transport layer security
Socket programming
Gliding joint
Socket basics
Socket adalah
Pengertian socket
Tcp socket options
Esercizi socket java
Raw socket quotes
Ischial containment socket
Diego nehab
Ball and socket joint
Socket osi
Retroversion vs anteversion
Socket java example
Marlo anatomical socket
Ball and socket joint
Byte ordering functions
Convenience socket
Wsasocket
Recv winsock
Bsd socket programming
Socket.io room 만들기
Wet plug socket
Secure socket layer and transport layer security
Hot socket
Python fork
érdemjegyek százalékban
Socket programming in c
Amd pga socket
Secure socket funneling
Socket adalah
Ball and socket joint engineering
Socket in distributed system
Welcome socket
Java socket proxy
C++ udp socket
421 could not create socket
A socket is an interface between
Java raw socket
Que es socket en informatica
Secure socket layer and transport layer security
Contoh komponen diagram
Java raw socket
Gethostbyaddr python
Tom chothia
Berkeley socket is used for
Lập trình socket giao tiếp tcp client/server java
Linux raw sockets
Python socket thread
R socket programming
Tcp and udp socket programming in java
Uninstall socket.io
Bind function in socket programming
Socket server
Socket abstraction
Berkeley sockets
Django web socket
So_linger
Udp broadcast c
Socket adalah
Secure socket layer and transport layer security
Socket java example
Raw socket
Agiab
Socket.io udp
Secure socket layer adalah
Socket class encapsulates
Socket life cycle
Gib and cotter joint drawing
Rmi vs socket
System call pada client saat menggunakan socket adalah
Dog sternum
Iee regulations regarding 13a socket outlets
Sock_addr_in
Amd opteron
What is a socket