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/e50e1938e8338aed92af7698bd8355c2/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_h2/e50e1938e8338aed92af7698bd8355c2/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
Source routing attack
The network layer is concerned with of data.
Mio-nfs
What is multicast communication in distributed system
In the field of udp, each used datagarm can travel on a
Datagram forwarding table
Reliable datagram sockets
Datagram nedir
Ip datagram format
Header design
Each packet is treated independently
Ipv4 datagram
Rfc udp
Ip datagram format
Datagram network
Reliable datagram sockets
Virtual circuit and datagram network
Datagram delivery protocol
Timing datagram
Ip datagram format
User datagram protocol diagram
Application of mobile ip
Roosevelt taft wilson comparison
Fresh oil, new wine scripture
New marketing realities pdf
Chapter 16 toward a new heaven and a new earth
Movie new hartford ny
Neil thisse is a loyalist who fled the colonies
Split direct speech
Njbta
Strengths and weaknesses of the articles of confederation
New classical and new keynesian macroeconomics
New york, new jersey, pennsylvania, and delaware
New classical and new keynesian macroeconomics
New-old approach to creating new ventures
Socket in distributed system
Socket adalah
Ball and socket joint engineering
Welcome socket
Java socket proxy
A socket is an interface between
C++ udp socket
421 could not create socket
Secure socket layer and transport layer security
Java raw socket
Que es socket
Python socket wrapper
Komponen diagram
Tcp/ip sockets in c
Tom chothia
Berkeley socket primitives
Thread socket python
Lập trình socket giao tiếp tcp client/server java
Linux raw sockets
Bind function in socket programming
R socket programming
Udp socket programming in java
Uninstall socket.io
Socket server
Socket abstraction
Django web socket
Berkley socket
Gqoutes
Socket in networking
Socket java example
Socket adalah
Secure socket layer and transport layer security
Hip socket
Udp
Secure socket layer adalah
Raw socket
Socket class encapsulates
Socket life cycle
Java socket library
System call pada client saat menggunakan socket adalah
Gib and cotter joint assembly drawing
Radial circuits
Sock_addr_in
Radius and ulna animal
Http unix socket
Bind vs listen
Architektura cpu
R sockets
Pin grid array
Socket outline
Udp socket timeout
Ball and socket joint
Plantar flexion
Lesson 4.1: anatomical structure of a long bone
Tcp udp
Socket programming
Socket gxp
Secure socket layer and transport layer security
Socket basics
Socket adalah
Ball and socket joint
Tcp socket options
Pengertian socket
Quadrilateral socket
Applicazione distribuita
Raw socket quotes
Socket osi
Diego nehab
Ball and socket joint
Hip retroversion vs anteversion
Socket java example
Structure of socket
Marlo anatomical socket
Ball and socket joint
Wsasocket
Recv winsock
Callbacks
Socket.io room 만들기
Bsd socket programming
Secure socket layer and transport layer security
Wetoverload
Python socket api
Python socket
Socket programming in c