RETI DI CALCOLATORI
Parte Settima
LIVELLO
TRASPORTO:
UDP/TCP
Gianfranco Prini
DICO - Università di Milano
[email protected]
NOTA DI COPYRIGHT
•
•
•
•
•
•
Queste trasparenze (slide) sono protette dalle leggi sul copyright e dalle disposizioni dei
trattati internazionali. Il titolo e il copyright delle slide (ivi inclusi, ma non limitatamente,
ogni immagine, fotografia, animazione, video, audio, musica, testo, tabella, disegno) sono
di proprietà dell'autore.
Le slide possono essere riprodotte e utilizzate liberamente dagli istituti di ricerca, scolastici
e universitari italiani afferenti al Ministero dell’Istruzione, dell’Università e della Ricerca per
scopi istituzionali e comunque non a fini di lucro. In tal caso non è richiesta alcuna
autorizzazione.
Ogni altro utilizzo o riproduzione, completa o parziale (ivi incluse, ma non limitatamente, le
riproduzioni su supporti ottici e magnetici, su reti di calcolatori e a stampa), sono vietati se
non preventivamente autorizzati per iscritto dall'autore.
L'informazione contenuta in queste slide è ritenuta essere accurata alla data riportata nel
frontespizio. Essa è fornita per scopi meramente didattici e non per essere utilizzata in
progetti di impianti, prodotti, reti, etc. In ogni caso essa è soggetta a cambiamenti senza
preavviso. L'autore non assume alcuna responsabilità per il contenuto delle slide (ivi
incluse, ma non limitatamente, la correttezza, la completezza, l'applicabilità, l'adeguatezza
per uno scopo specifico e l'aggiornamento dell'informazione).
In nessun caso possono essere rilasciate dichiarazioni di conformità all'informazione
contenuta in queste slide.
In ogni caso questa nota di copyright non deve mai essere rimossa e deve essere riportata
fedelmente e integralmente anche per utilizzi parziali.
ARGOMENTI
•
•
•
•
•
•
•
Dal routing alla richiesta di servizi
Servizi, porte, porte well-known
Protocollo (non affidabile) UDP
Dall’inaffidabilità all’affidabilità
Algoritmi di sliding window
Requisiti dei canali affidabili
Protocollo (affidabile) TCP
DAL ROUTING DI PACCKETTI
ALLA RICHIESTA DI SERVIZI
• Pacchetti instradati sulla base dell’indirizzo IP
di destinazione (DSAP di livello rete: L3)
– Indirizzi IP: sequenze di 32 bit, normalmente specificate
come quaterne di numeri decimali (es. 159.149.10.5) dove
ciascun numero assume valori nell’intervallo [0:255]
– Header L3: oltre a DSAP (indirizzo IP) per indirizzare una
(interfaccia di) destinazione, anche SSAP (indirizzo IP)
per consentire al destinatario di indirizzare il mittente
• Servizi (remoti) richiesti sulla base dei numeri
di porta (DSAP di livello trasporto: L4)
– Numeri di porta: sequenze di 16 bit, specificate come
numeri decimali (es. 21) nell’intervallo [0:65535]
– Header L4: oltre a DSAP (numero di porta) per richiedere
un servizio remoto, anche SSAP (numero di porta) per
consentire di rispondere a chi ne ha fatto richiesta
RICHIESTA/EROGAZIONE DEI
SERVIZI: IMPLEMENTAZIONE
• Paradigma client-server (anche breve durata)
– Client proattivo: diritto di iniziativa (richiede un servizio)
– Server reattivo: dovere di obbedienza (eroga il servizio)
• Client e server implementati come due attività
concorrenti (processi Linux, thread Java, etc.)
– Client e server entrambi installati sulla stessa macchina:
comunicazione via interfaccia di loopback (es. 127.0.0.1),
via interfaccia di rete comune (es. 159.149.154.254) o via
interfacce di rete distinte (es. 16.37.215.2 e 16.41.7.196),
eventualmente su reti distinte (es. 12.31.4.1 e 16.41.8.76)
• Invio/ricezione di pacchetti: operazioni di I/O
del S.O. in nome e per conto di client o server
– Pacchetti recapitati ex ante: il S.O. bufferizza pro tempore
– Pacchetti recapitati ex post: il processo/thread attende
(I/O bloccante – la norma) o prosegue (I/O non bloccante)
CLNS DI LIVELLO TASPORTO:
IL PROTOCOLLO UDP
• UDP (User Datagram Protocol): CLNS privo di
controllo di flusso suo proprio, e inaffidabile
– Velocità di elaborazione alla destinazione può essere
insufficiente rispetto al ritmo di arrivo dei pacchetti
– Possibilità di pacchetti persi, duplicati o fuori sequenza
• Header UDP: quattro campi di 16 bit ciascuno
–
–
–
–
Source port (SSAP): valore 0 se non si prevede risposta
Destination port (DSAP): numero di porta del servizio
Message length (min 8): comprende header e payload
Checksum: valore 0 se non la si intende usare (se calcolo
di checksum fornisce 0 come risultato, si usa il valore
0xFFFF, altra rappresentazione di 0 in complemento a 1)
• Payload UDP: può essere vuoto, ma anche
saturare un pacchetto IP di lunghezza max
NUMERI DI PORTA RISERVATI:
WELL-KNOWN PORT (1)
• I numeri di porta nell’intervallo [0:1023] sono
riservati. Gli altri sono assegnabili dal S.O. ai
servizi erogati dai programmi utente
• Alcuni numeri riservati sono assegnati a
specifici servizi (well-know port number)
• Servizi UDP/TCP con well-know port number:
–
–
–
–
–
–
–
Porta 007 – UDP/TCP – echo – Servizio di echo
Porta 009 – UDP/TCP – discard – Ignorare il pacchetto
Porta 013 – UDP/TCP – daytime – Ora del giorno
Porta 067 – UDP/TCP – bootps – Server BOOTP/DHCP
Porta 088 – UDP/TCP – kerberos – Servizio di sicurezza
Porta 111 – UDP/TCP – rpc – Remote Procedure Call
Porta 123 – UDP/TCP – ntp – Network Time Protocol
NUMERI DI PORTA RISERVATI:
WELL-KNOWN PORT (2)
• Servizi solo UDP con well-know port number:
– Porta 069 – UDP – tftp –Trivial File Transfer Protocol
• Servizi solo TCP con well-know port number:
–
–
–
–
–
–
–
–
Porta 020 – TCP – ftp-data – File Transfer Protocol (dati)
Porta 021 – TCP – ftp – File Transfer Protocol (comandi)
Porta 022 – TCP – ssh – Secure Shell
Porta 023 – TCP – telnet – Terminale remoto (o virtuale)
Porta 025 – TCP – smtp – Simple Mail Transfer Protocol
Porta 080 – TCP – www – World Wide Web
Porta 110 – TCP – pop3 – Post Office Protocol (ver. 3)
Porta 161 – TCP – snmp – Simple Network Mgmt Prot
INAFFIDABILITA’ DEL LIVELLO
NETWORK: CAUSE/SOLUZIONI
• Mancata ricezione di pacchetti: cause
– Errori di trasmissione (ricezione di pacchetti corrotti)
– Guasti nell’HW/SW dei sistemi intermedi o dei canali fisici
– Congestione lungo il percorso (rotta) dei pacchetti
• Ricezione di pacchetti duplicati: cause
– Ritrasmissione automatica indotta dal raggiungimento
del tempo-limite (timeout) nel ricevere conferma (ACK)
dell’avvenuta ricezione di un pacchetto (v. oltre)
• Ricezione di pacchetti fuori ordine: cause
– Instradamento dinamico di pacchetti appartenenti allo
stesso flusso di dati attraverso rotte differenti
– Ritrasmissione posticipata di pacchetti corrotti (v. oltre)
• Protocolli che risolvano questi problemi una
volta per tutte (es. TCP): soluzioni ad hoc per
ciascuna applicazione difficili e/o inefficienti
CONFERMA DI RICEZIONE
(ACK) E RITRASMISSIONE
• Conferma ACK sincrona, senza e con timeout
–
–
–
–
–
–
Invio pacchetto A
Arrivo ACK A
Invio pacchetto B
Arrivo ACK B
Invio pacchetto C
Invio pacchetto C
– Invio pacchetto A
– Arrivo ACK A
– Invio pacchetto B
– [Timeout]
– Invio pacchetto B
– Arrivo ACK B
• Timer attivato alla trasmissione di ciascun
pacchetto e disattivato alla ricezione di ACK
(timeout scatta se ACK non arriva per tempo)
• Prestazioni subottime: canali full-duplex usati
in modalità half-duplex (sottocanale uscente
inutilizzato tra una trasmissione e l’arrivo del
relativo ACK; similmente per canale entrante)
TRASMISSIONE ANTICIPATA E
POSSIBILI RITARDI DEGLI ACK
• Soluzione: anticipare invio di nuovi pacchetti
– Invio pacchetto A, avvio timer A
– Invio pacchetto B, avvio timer B
– Invio pacchetto C, avvio timer C
– Arrivo ACK A, arresto timer A
– Arrivo ACK C, arresto timer C
– [Timeout B – può essere andato perduto B oppure ACK B]
– Invio pacchetto B, avvio timer B
– Invio pacchetto D, avvio timer D
– Arrivo ACK B, arresto timer B
• Problema: se il timeout B è causato da perdita di
ACK B, come si capisce che il secondo B è una
copia da scartare e non un nuovo originale?
TRASMISSIONE ANTICIPATA E
NUMERI DI SEQUENZA (1)
• Soluzione: differenziare i pacchetti (numerarli
sequenzialmente insieme ai relativi ACK)
– Invio pacchetto A, seq=1, avvio timer 1
– Invio pacchetto B, seq=2, avvio timer 2
– Invio pacchetto C, seq=3, avvio timer 3
– Arrivo ACK A, seq=1, arresto timer 1
– [Timeout 2 – può essere andato perduto B o ACK B]
– Invio pacchetto B, seq=2, avvio timer 2
– Invio pacchetto D, seq=4, avvio timer 4
– Arrivo ACK B, seq=2, arresto timer 2
• Nota bene: è irrilevante che ACK B riguardi il
secondo invio o (anche se in ritardo) il primo
TRASMISSIONE ANTICIPATA E
NUMERI DI SEQUENZA (2)
• Alio modo: un ACK (cumulativo) con seq=n
conferma i pacchetti fino a quello con seq=n
– Invio pacchetto A, seq=1, avvio timer 1
– Invio pacchetto B, seq=2, avvio timer 2
– Invio pacchetto C, seq=3, avvio timer 3
– Arrivo ACK A, seq=1, arresta timer 1
– Arrivo ACK C, seq=3, arresta timer 3
– Invio pacchetto D, seq=4, avvio timer 4
– [Timeout 2 – non può che essere andato perduto ACK B]
– Arrivo ACK B, seq=2
[viene ignorato]
• Problema: ricevuti ACK fino a seq=n, per quali
i è bene anticipare pacchetti fino a seq=n+i?
TRASMISSIONE ANTICIPATA,
SLIDING WINDOW, PIGGYBACK
• Soluzione: sliding window (fisse o variabili)
– Sliding window di dimensione K (fissa o variabile): max
numero di pacchetti non ancora confermati che possono
essere anticipati: se n è il più alto valore per cui è stato
ricevuto un ACK con seq=n, allora si può anticipare la
trasmissione di tutti i pacchetti con seq=n+i, dove n+i
non sia superiore a n+K
– Se ho già anticipato i pacchetti con seq=n+1, ..., seq=n+m
(ancora non confermati), potrò ulteriormente anticipare i
pacchetti i K-m pacchetti con seq=n+m+1, ..., seq=n+N
• Piggyback: conferma di pacchetti mediante
inserimento di ACK nei pacchetti del flusso
che “viaggia” in direzione opposta
– Se non ci sono pacchetti pronti per la trasmissione, se ne
crea uno vuoto che contiene solo l’ACK in questione
CANALI AFFIDABILI: REQUISITI
PREVALENTI O FREQUENTI (1)
• Orientamento a connessione (circuiti virtuali)
– Separare instaurazione di una connessione a un servizio
remoto rispetto al dialogo con chi eroga quel servizio
• Orientamento al flusso (sequenza di ottetti)
– Quantità di dati di frequente non deteterminabile a priori
– Ordinamento degli ottetti alla trasmissione conservato in
ricezione (violazione possibile solo per dati “urgenti”)
• Flussi non strutturati (come i file di Unix/Win)
– Demandare strutturazione dei flussi alle applicazioni per
evitare scelte troppo rigide o non sostenibili nel tempo
• Flussi full-duplex (e riduzione a semi-duplex)
– Favorire dialogo bidirezionale client-server (anche ACK)
– Segnalazione (es. ACK) in linea (es. piggypack) invece
che fuori linea su canali di servizio dedicati allo scopo
CANALI AFFIDABILI: REQUISITI
PREVALENTI O FREQUENTI (2)
• Frammentazione in pacchetti opaca all’utente
– Applicazione produce dati con granularità “conveniente”
per la sua semantica (es. un carattere alla volta per telnet)
– Protocollo di trasporto libero di frammentare/raggruppare
dati in pacchetti di dimensione “conveniente” per routing
(ma possibilità di forzare inoltro rapido – push – nel caso
di applicazioni interattive intolleranti a bufferizzazione)
• Compensazione dinamica delle discrasie tra
tempi di propagazione, di trasmissione e di
elaborazione (tecnica delle sliding window)
– Trasmissione di nuovi pacchetti anticipata rispetto a
ricezione delle conferme di corretta ricezione (ACK)
– Ritrasmissione di pacchetti persi/corrotti posticipata
rispetto alla conservazione dell’ordine di trasmissione
– Adattamento dinamico della window al variare del carico
della rete e della velocità di elaborazione del ricevente
CONS DI LIVELLO TRASPORTO:
IL PROTOCOLLO TCP
• TCP (Transmission Control Protocol): CONS
affidabile, dotato di controllo di flusso, che
soddisfa tutti i requisiti delle slide precedenti
– Usa sliding window a lunghezza variabile, ma n, n+m e
n+K (con K variabile) indicano ottetti e non pacchetti
– K viene ridefinito a ogni ACK, inviando al trasmettitore il
numero di ottetti N che il ricevitore può ancora ricevere
(se N=0 si blocca ogni trasmissione di dati non urgenti)
– Nessun meccanismo esplicito per controllo congestione
• Multipla/demultipla connessioni di più client
allo stesso servizio (porta) del server
– Rappresenta le connessioni come coppie di punti
terminali del tipo [(addract,portact),(addrpas,portpas)]
– Un punto terminale è detto attivo [risp. passivo] se può
solo emettere [risp. accettare] richieste di connessione
SEGMENTI TCP: FORMATO
• Segmento: unità di trasferimento di TCP
– Scambio di segmenti consente di instaurare connessioni,
trasferire dati, inviare ACK, modificare le dimensioni della
sliding window, chiudere connessioni
– Dati utente (flussi di ottetti) frammentati in segmenti
• Header dei segmenti TCP: più complesso di
quello UDP (v. oltre)
– Gestisce informazioni per implementare sliding window,
ACK, numeri di sequenza, ottetti urgenti,
• Payload TCP: può essere vuoto, ma anche
saturare un pacchetto IP di lunghezza max
HEADER TCP: FORMATO
–
–
–
–
–
–
–
–
–
–
–
–
Source port (16 bit): diversamente da UDP, mai pari a 0
Destination port (16 bit): numero di porta del servizio
Sequence number (32 bit): seq associato al segmento
ACK number (32 bit): posizione (nel flusso di dati che
“viaggia” in direzione opposta a quella del segmento) del
prossimo ottetto che il ricevutore si attende di ricevere
Hlen (4 bit): lunghezza dello header (multiplo di 32 bit)
Reserved (6 bit): non utilizzato
Code bits (6 bit): URG, ACK, PSH, RST, SYN (seq), FIN
Window (16 bit): quantità di ottetti ancora anticipabili
Checksum (16 bit): come per UDP (valore zero=0xFFFF)
Urgent pointer (16 bit): offset dell’ultimo ottetto urgente
Options (0-32 bit): varie, utile per Max Segment Size
Padding (0-32 bit): allinea segmento a multiplo di 32 bit
Scarica

UDP/TCP - Home di