Livello di trasporto - porte e multiplexing
In questa pagina 9
In questa pagina 6
Dove sta e che cosa fa
Il livello di trasporto (transport layer) sta sopra il livello di rete e sotto il livello applicazione (Modello ISO-OSI e pila TCP-IPUna comunicazione tra due calcolatori è un problema troppo vario (segnali, errori, accesso al mezzo, instradamento, controllo di flusso, rappresentazione dei dati) per un solo protocollo, quindi si divide in strati (layer). Il modello ISO/OSI ha 7 livelli (fisico, collegamento, rete, trasporto, sessione, presentazione, applicazione); la pila TCP/IP riunisce gli ultimi tre in un solo livello applicazione, quindi ne ha 5. Ogni livello offre un servizio a quello sopra e parla solo con il livello pari dell'altro nodo tramite PDU; scendendo si aggiunge un'intestazione (PCI): incapsulamento. Indirizzi: MAC (collegamento, locale), IP (rete, globale).Modello ISO-OSI e pila TCP-IP →; per i modelli a livelli nelle telecomunicazioni in generale Sistemi di telecomunicazioni e modello ISO-OSIUn servizio di telecomunicazioni porta informazione da una sorgente a una destinazione lontana attraverso trasmettitore, canale e ricevitore. Le comunicazioni si classificano per destinatari (unicast, broadcast, multicast) e per direzione (simplex, half-duplex, full-duplex); le reti hanno una topologia (stella, mesh, albero, anello, bus) e usano commutazione di circuito o di pacchetto. Le funzioni di rete sono divise in strati: nel modello ISO-OSI sono 7 e questo corso studia quasi solo lo strato fisico.Sistemi di telecomunicazioni e modello ISO-OSI →). Il livello di rete (Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →) porta un datagramma fino al computer giusto; ma sullo stesso computer girano molti programmi, e il datagramma deve arrivare al programma giusto. Questo secondo passo lo fa il trasporto.
Definizione (livello di trasporto). Fornisce una comunicazione logica end-to-end tra processi applicativi in esecuzione su host diversi. Il mittente spezza i messaggi applicativi in segmenti e li passa al livello di rete; il ricevente li ricompone in messaggi e li passa all'applicazione.
La comunicazione è logica: i due livelli applicazione, anche agli antipodi, si comportano come se fossero collegati da una connessione diretta e immaginaria. In realtà tra i due host ci sono molti router e collegamenti di tipo diverso. Per questo i protocolli di trasporto sono implementati nei sistemi finali (gli host) e non nei router, che arrivano al massimo al livello di rete.
Analogia. Dodici bambini nella casa di Ann (costa est degli Stati Uniti) scrivono lettere ai dodici bambini della casa di Bill (costa ovest). Le case sono gli host, i bambini sono i processi, le lettere nelle buste sono i messaggi applicativi, Ann e Bill, che raccolgono e distribuiscono la posta ai bambini, sono il protocollo di trasporto, il servizio postale è il protocollo di rete. Il servizio postale porta la busta alla casa giusta; poi tocca a Bill darla al bambino giusto, e per farlo gli serve il nome scritto sulla busta: il numero di porta.
I servizi del livello di trasporto
| servizio | che cosa fa |
|---|---|
| comunicazione processo-processo | porta il messaggio al processo destinatario, non solo al computer |
| indirizzamento | identifica i processi con i numeri di porta (paradigma client-server) |
| incapsulamento / decapsulamento | aggiunge e toglie l'intestazione di trasporto |
| multiplexing / demultiplexing | molti processi usano lo stesso protocollo di trasporto dello stesso host |
| controllo di errore | solo se il protocollo è affidabile (TCP) |
| controllo di flusso | solo se il protocollo è affidabile (TCP) |
| controllo di congestione | solo se il protocollo è affidabile (TCP) |
Comunicazione da processo a processo
Un processo è un'entità del livello applicazione (un programma in esecuzione) che usa i servizi del trasporto. Il livello di rete è responsabile della comunicazione a livello di computer (host-to-host): un protocollo di rete sa consegnare un messaggio soltanto all'host di destinazione, e questa è una consegna incompleta. Il protocollo di trasporto completa la consegna fino al processo giusto.
Indirizzamento: i numeri di porta
Un host remoto può far girare più programmi server contemporaneamente, così come un computer locale può avere più programmi client attivi. Servono quindi un processo locale e un processo remoto, oltre ai due host. Gli host si identificano con gli indirizzi IP, i processi con i numeri di porta.
Definizione (numero di porta). È un intero di 16 bitcon k bit si rappresentano i numeri da 0 a 2^k − 1Sistemi di numerazione posizionali →, quindi compreso tra e (con bit ci sono combinazioni distinte, da a ). L'indirizzo IP di destinazione sceglie l'host tra tutti gli host del mondo; una volta scelto l'host, il numero di porta di destinazione sceglie il processo su quell'host.
Il server deve farsi trovare, quindi la sua porta non può essere scelta a caso: TCP/IP ha stabilito numeri di porta universali per i server, detti porte note (well-known ports). Il client, invece, sceglie per sé una porta temporanea, detta porta effimera (ephemeral port, "di breve durata": maggiore di 1023). Esistono eccezioni: alcuni client hanno porte note (il client DHCP usa la 68, Protocollo DHCPDopo che a un'organizzazione è stato assegnato un blocco di indirizzi, configurare a mano IP e netmask di ogni host non è efficiente. BOOTP (obsoleto) associa in modo statico un indirizzo MAC a un indirizzo IP; DHCP (Dynamic Host Configuration Protocol) assegna gli indirizzi in modo dinamico, a prestito (lease) per un tempo limitato, anche a sistema operativo già avviato. Il dialogo client-server è su UDP (porta 67 server, 68 client) e usa quattro messaggi: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK (più DHCPRELEASE a fine uso). Nell'ACK arrivano IP, netmask, default gateway e server DNS.Protocollo DHCP →).
Gli intervalli dell'ICANN
L'ICANN ha diviso i numeri di porta in tre intervalli:
| intervallo | nome | chi lo gestisce |
|---|---|---|
| – | porte note (well-known) | assegnate e controllate dall'ICANN |
| – | porte registrate (registered) | non controllate, ma si possono registrare per evitare duplicazioni |
| – | porte dinamiche (dynamic) | né controllate né registrate: uso temporaneo o privato |
Esempio. Il numero di porte registrate è (gli estremi sono entrambi inclusi, perciò ); quelle note sono ; quelle dinamiche sono (un quarto dello spazio: ). Le tre classi sommano a . Un browser che apre una pagina sceglie per esempio la porta effimera come porta sorgente e usa la porta nota (HTTP) o (HTTPS) come porta destinazione. Nei sistemi Unix le porte note stanno nel file /etc/services; con grep si trova la riga di una applicazione. Sempre in Unix, solo un processo con privilegi di amministratore può usare le porte riservate (quelle note).
Le porte note più usate
| porta | applicazione | protocollo di trasporto |
|---|---|---|
| 7 | Echo | UDP, TCP |
| 20, 21 | FTP (dati, controllo) | TCP |
| 22 | SSH | TCP |
| 23 | Telnet | TCP |
| 25 | SMTP (posta in uscita) | TCP |
| 53 | DNS | UDP (TCP per risposte grandi) |
| 67, 68 | DHCP (server, client) | UDP |
| 80 | HTTP | TCP |
| 110 | POP3 | TCP |
| 143 | IMAP | TCP |
| 161 | SNMP | UDP |
| 179 | BGP | TCP |
| 443 | HTTPS | TCP |
| 520 | RIP | UDP |
Le applicazioni sono descritte in Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →, Livello applicazione - HTTPIl livello applicazione è il più alto della pila: offre servizi all'utente con una connessione logica tra le due applicazioni e riceve servizi solo dal trasporto (DNS, HTTP, e-mail, FTP). Il Web (WWW, nato al CERN nel 1989) è un servizio client-server distribuito di pagine collegate da ipertesti; ogni pagina ha un URL protocollo://host:porta/percorso. HTTP: il client manda una richiesta, il server una risposta, su TCP (server sulla porta 80, client su una porta temporanea); senza stato. Messaggi di testo (riga di richiesta o di stato, intestazioni, riga vuota, corpo), metodi GET, POST, HEAD, PUT, DELETE, codici di stato 2xx-5xx. Una pagina con N oggetti incorporati richiede 2(N+1) RTT con connessioni non persistenti e (N+2) RTT con connessione persistente (trascurando la trasmissione). I cookie danno memoria al protocollo: Set-Cookie nella risposta, Cookie nelle richieste, file nel browser e base di dati nel sito. Un proxy (web cache) tiene le copie delle risposte recenti: meno carico sul server, meno traffico, meno ritardo.Livello applicazione - HTTP →, Posta elettronica - SMTP, POP3 e IMAPLa posta elettronica è una transazione a senso unico: non ha senso che il destinatario tenga un server sempre acceso, quindi si usano server intermedi. Servono due User Agent (UA, il programma dell'utente), due programmi client/server di spinta (MTA, protocollo SMTP: mittente-suo server e server-server) e un programma client/server di tiro (MAA, POP3 o IMAP4: server del destinatario-destinatario). SMTP usa TCP porta 25, comandi HELO, MAIL FROM, RCPT TO, DATA, QUIT e risposte a tre cifre (220 pronto, 250 ok, 354 inizia il testo, 221 chiusura, 421 non disponibile) in tre fasi: apertura, trasferimento, chiusura. POP3 (porta 110): utente e password, poi elenca e scarica i messaggi uno a uno; non organizza la posta sul server. IMAP4 aggiunge intestazioni prima del download, ricerca, download parziale, cartelle sul server. MIME permette di spedire dati non ASCII (immagini, video, lettere accentate) traducendoli in ASCII a 7 bit, per esempio in base64 (3 byte diventano 4 caratteri).Posta elettronica - SMTP, POP3 e IMAP →; RIP e BGP in Protocolli di instradamento - RIP, OSPF e BGPIn Internet l'instradamento non si può fare con un solo protocollo, per scalabilità (tabelle troppo grandi) e per autonomia amministrativa: ogni ISP è un sistema autonomo (AS) con il proprio algoritmo. All'interno di un AS si usano i protocolli IGP: RIP (distance vector, numero di salti, massimo 15, aggiornamenti ogni circa 30 s, su UDP porta 520) e OSPF (link state con Dijkstra, aree collegate all'area 0, cinque tipi di LSA, messaggi direttamente in IP). Tra AS si usa BGP4 (path vector, su TCP porta 179, eBGP tra AS e iBGP dentro l'AS, scelta del percorso per politica: preferenza locale, AS-PATH più corto, origine; i cicli si evitano scartando i cammini che contengono già il proprio AS; quattro messaggi: Open, Keepalive, Notification, Update).Protocolli di instradamento - RIP, OSPF e BGP →.
Socket e identificazione di una connessione
Definizione (socket). È la combinazione di un indirizzo IP e di un numero di porta, scritta . Seleziona un host (IP) e un processo su quell'host (porta).
Esempio. : l'IP individua l'host, la porta il processo.
Per usare i servizi di trasporto in Internet servono due socket: quello del client e quello del server. Le quattro informazioni stanno nelle intestazioni dei pacchetti: gli indirizzi IP in quella del livello di rete, le porte in quella del livello di trasporto.
Proprietà (quaterna di una connessione). Una connessione è identificata in modo univoco dalla quaterna
Esempio. Due studenti, e , aprono la stessa pagina su un server . Le connessioni sono e : stessa porta sorgente e stesse porte di destinazione, ma indirizzi IP diversi, quindi sono connessioni diverse. Se apre una seconda scheda sullo stesso server, il sistema operativo di sceglie un'altra porta effimera, per esempio : . Il server usa una sola porta (la 80) per tutte le connessioni; è la quaterna a distinguerle.
Incapsulamento e decapsulamento
Incapsulamento (lato mittente): quando un processo ha un messaggio da inviare, lo passa al livello di trasporto insieme a una coppia di indirizzi socket e ad altre informazioni; il trasporto aggiunge la sua intestazione (la PCI, protocol control information). I pacchetti del trasporto si chiamano user datagram, segmenti o semplicemente pacchetti, a seconda del protocollo (UDP, TCP).
Decapsulamento (lato ricevente): all'arrivo, il livello di trasporto toglie l'intestazione e consegna il messaggio al processo applicativo.
Il segmento di trasporto diventa a sua volta il carico utile (payload) di un datagramma IP, e il campo Protocol di IP dice a chi consegnarlo ( = TCP, = UDP: Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →).
Multiplexing e demultiplexing
Definizione (multiplexing e demultiplexing). In un host c'è un solo UDP e un solo TCP, ma molti processi vogliono usarli. Il multiplexing (lato mittente) è la raccolta dei messaggi di molti processi in un unico flusso di segmenti, ciascuno con la propria porta sorgente. Il demultiplexing (lato ricevente) è lo smistamento dei segmenti in arrivo verso il processo giusto, guardando le porte.
Come si smista dipende dal protocollo:
- UDP (senza connessione): il socket è individuato dalla coppia (IP destinazione, porta destinazione). Segmenti da sorgenti diverse con la stessa destinazione finiscono nello stesso socket.
- TCP (con connessione): il socket è individuato dall'intera quaterna. Per questo un server su una sola porta può gestire molti client: a ogni connessione corrisponde un socket distinto.
Esempio. Sul server la porta ha tre connessioni aperte: , e . Un segmento TCP arriva con porta sorgente , porta destinazione , IP sorgente : il demultiplexing lo consegna al processo che gestisce la seconda connessione. Anche il NAT con traduzione delle porte usa questo schema: NAT e indirizzi privatiUna rete privata (intranet) usa il protocollo TCP/IP con indirizzi privati ($10.0.0.0/8$, $172.16.0.0/12$, $192.168.0.0/16$), riutilizzabili da intranet diverse ma da non instradare in Internet: i router di bordo scartano i pacchetti con indirizzi privati. Per accedere a Internet servono un proxy applicativo (uno per applicazione) o il NAT (Network Address Translation): un router che traduce indirizzi privati in indirizzi pubblici di un pool, con una tabella NAT e un'associazione dinamica per sessione. Il NAT tradizionale è outbound: Basic NAT traduce solo l'IP (uno a uno, quindi servono tanti indirizzi pubblici quante le sessioni contemporanee), NAPT traduce anche la porta ([IP privato, porta] $\to$ [IP pubblico, porta del NAT]) e permette a molte sessioni di condividere un solo IP pubblico. Il Twice NAT permette sessioni anche dall'esterno, con un DNS interno e associazioni statiche.NAT e indirizzi privati →.
Controllo di flusso, di errore e di congestione
Tre servizi che riguardano parti diverse del sistema, e che è facile confondere:
| servizio | da chi dipende | chi coinvolge |
|---|---|---|
| errore | dalla perdita o corruzione dei pacchetti | solo i livelli di trasporto di mittente e destinatario |
| flusso | dalla capacità del ricevente (e del mittente) | mittente e ricevente |
| congestione | dal canale e dal contesto (la rete) | il mittente, in base alla rete |
Flusso. Quando un'entità produce elementi e un'altra li consuma, ci deve essere equilibrio tra le due velocità. Se il produttore consegna gli elementi solo dopo che il consumatore li ha richiesti (pulling), il consumatore è sempre pronto e non serve controllo di flusso. Se il produttore consegna gli elementi appena li produce (pushing), e li produce più in fretta di quanto vengano consumati, il consumatore può essere sommerso e scartare elementi: serve il controllo di flusso. I buffer alleggeriscono il problema: un buffer è un insieme di locazioni di memoria che può contenere pacchetti sia al mittente sia al ricevente. Se il buffer del trasporto mittente è pieno, avvisa l'applicazione di non passare altri blocchi; se è pieno quello del ricevente, avvisa il trasporto mittente di fermarsi. Il dettaglio in TCP è in TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →.
Errore. Il livello di rete (IP) non è affidabile; se l'applicazione ha bisogno di affidabilità, il trasporto deve aggiungerla: rilevare e scartare i pacchetti corrotti, tener traccia di quelli persi o scartati e rispedirli, riconoscere ed eliminare i duplicati, tenere in memoria i pacchetti fuori ordine finché non arriva quello mancante. Per sapere quale pacchetto rispedire, quale è un duplicato e quale è fuori ordine si aggiunge un campo con il numero di sequenza.
Formula (numeri di sequenza). Con un campo di bit i numeri di sequenza vanno da a .
Esempio. Con i numeri sono (otto valori, ); con i 32 bit di TCP, –. Finiti i numeri si ricomincia da (aritmetica modulo ), per questo la finestra dei protocolli ARQ non può coprire tutti i numeri disponibili. I protocolli del livello di collegamento (Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective RepeatARQ (Automatic Repeat reQuest) rende affidabile un collegamento che sbaglia: il ricevitore conferma (ACK) i frame ricevuti bene, il trasmettitore ritrasmette allo scadere del timeout. Servono timeout (contro il deadlock) e numeri di sequenza (contro i duplicati). Con $t_G=t_F+2\tau_p+t_A$ e probabilità di errore $p$: Stop-and-Wait $\rho=\frac{t_F(1-p)}{t_G}$; Go-Back-N con finestra $N\ge t_G/t_F$ $\rho=\frac{1-p}{1+(N-1)p}$; Selective Repeat $\rho=1-p$. Efficienza $\eta=\rho,I/F$. La finestra ottima è la capacità del tubo in pacchetti. In Selective Repeat esiste anche una lunghezza ottima del frame: con overhead $o$ e probabilità di errore sul bit $P_b$, $x_{ott}\simeq\frac o2+\sqrt{o/P_b}$ (frame più corti se il canale sbaglia di più).Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective Repeat →) sono i "parenti" di quelli di trasporto: TCP usa una modifica o una combinazione di stop-and-wait, Go-Back-N e Selective Repeat.
Congestione. In una rete a commutazione di pacchetto c'è congestione se il carico supera la capacità della rete. I router hanno code di ingresso e di uscita per ogni interfaccia: se non riescono a elaborare i pacchetti alla velocità con cui arrivano, le code si riempiono. La congestione che si osserva nel trasporto è il risultato della congestione che sta nel livello di rete: TCP - controllo di congestioneLa congestione nasce quando collegamenti veloci alimentano un collegamento lento: le code dei router si riempiono, i pacchetti si perdono o ritardano e, nel caso peggiore, la rete collassa (quasi solo ritrasmissioni). TCP controlla la propria finestra di congestione cwnd con il feedback delle perdite (timeout o tre ACK duplicati): slow start (cwnd raddoppia a ogni RTT) fino alla soglia ssthresh, poi congestion avoidance (+1 MSS per RTT); a ogni perdita ssthresh = W/2. Le varianti si distinguono per come reagiscono ai tre dupACK: Tahoe riparte da cwnd = 1 dopo la ritrasmissione rapida; Reno usa il fast recovery (ssthresh = cwnd/2, cwnd = ssthresh + 3, +1 per ogni altro dupACK); NewReno gestisce gli ACK parziali e recupera più perdite nella stessa finestra; SACK riscontra i blocchi ricevuti e ritrasmette solo quello che manca.TCP - controllo di congestione →.
I protocolli di trasporto
Combinando i servizi precedenti si costruiscono protocolli diversi. "Affidabile" non vuol dire sempre "meglio": dipende dai requisiti di qualità del servizio dell'applicazione.
- UDP (User Datagram Protocol): senza connessione e inaffidabile; è usato per la sua semplicità ed efficienza dove il controllo di errore, se serve, lo fa l'applicazione: Protocollo UDPUDP (User Datagram Protocol) è il protocollo di trasporto senza connessione e inaffidabile: rispetto a IP aggiunge soltanto la comunicazione processo-processo (numeri di porta) e un controllo d'errore facoltativo. L'intestazione è di soli 8 byte (porta sorgente, porta destinazione, lunghezza, checksum). Il checksum copre pseudo-intestazione (indirizzi IP, protocollo 17, lunghezza), intestazione e dati, ed è il complemento a uno della somma a 16 bit; se vale 0 significa "non calcolato", e un risultato 0 si trasmette come 0xFFFF. UDP non ha connessione, numeri di sequenza, controllo di flusso, di errore né di congestione: si sceglie per i messaggi brevi (DNS, DHCP, RIP, SNMP) e per le applicazioni in tempo reale, dove conta non aggiungere ritardo.Protocollo UDP →.
- TCP (Transmission Control Protocol): con connessione e affidabile, per qualunque applicazione in cui l'affidabilità conta: TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →.
- SCTP (Stream Control Transmission Protocol): un protocollo più recente che combina caratteristiche di UDP e di TCP.
Tipicamente: HTTP, SMTP, FTP, SSH e BGP usano TCP; DNS, DHCP, RIP, SNMP e le applicazioni interattive in tempo reale usano UDP.
Versione ripasso
Dove sta e che cosa fa
- Definizione. Il livello di trasporto, sopra la rete (Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →) e sotto l'applicazione (Modello ISO-OSI e pila TCP-IPUna comunicazione tra due calcolatori è un problema troppo vario (segnali, errori, accesso al mezzo, instradamento, controllo di flusso, rappresentazione dei dati) per un solo protocollo, quindi si divide in strati (layer). Il modello ISO/OSI ha 7 livelli (fisico, collegamento, rete, trasporto, sessione, presentazione, applicazione); la pila TCP/IP riunisce gli ultimi tre in un solo livello applicazione, quindi ne ha 5. Ogni livello offre un servizio a quello sopra e parla solo con il livello pari dell'altro nodo tramite PDU; scendendo si aggiunge un'intestazione (PCI): incapsulamento. Indirizzi: MAC (collegamento, locale), IP (rete, globale).Modello ISO-OSI e pila TCP-IP →), fornisce comunicazione logica end-to-end tra processi di host diversi: il mittente spezza i messaggi in segmenti, il ricevente li ricompone.
- Rete = consegna al computer (IP, host-to-host, incompleta); trasporto = consegna al processo (porta). I protocolli di trasporto stanno solo negli host finali, non nei router.
- Servizi: processo-processo, indirizzamento (porte), incapsulamento/decapsulamento (PCI), multiplexing/demultiplexing; con protocollo affidabile (TCP) anche controllo di errore, flusso, congestione.
Numeri di porta
- Porta: intero di 16 bit, –. L'IP sceglie l'host, la porta sceglie il processo.
- Il server ha una porta nota (universale); il client sceglie una porta effimera (maggiore di 1023). Eccezione: il client DHCP usa la 68 (Protocollo DHCPDopo che a un'organizzazione è stato assegnato un blocco di indirizzi, configurare a mano IP e netmask di ogni host non è efficiente. BOOTP (obsoleto) associa in modo statico un indirizzo MAC a un indirizzo IP; DHCP (Dynamic Host Configuration Protocol) assegna gli indirizzi in modo dinamico, a prestito (lease) per un tempo limitato, anche a sistema operativo già avviato. Il dialogo client-server è su UDP (porta 67 server, 68 client) e usa quattro messaggi: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK (più DHCPRELEASE a fine uso). Nell'ACK arrivano IP, netmask, default gateway e server DNS.Protocollo DHCP →).
| intervallo ICANN | nome | gestione |
|---|---|---|
| – | note (well-known) | assegnate e controllate dall'ICANN |
| – | registrate | non controllate, registrabili |
| – | dinamiche | uso temporaneo o privato |
Registrate: ; dinamiche: .
Porte note: 7 Echo (UDP, TCP); 20/21 FTP, 22 SSH, 23 Telnet, 25 SMTP, 80 HTTP, 110 POP3, 143 IMAP, 179 BGP, 443 HTTPS (tutte TCP); 53 DNS (UDP, TCP per risposte grandi); 67/68 DHCP, 161 SNMP, 520 RIP (UDP). Applicazioni: Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →, Livello applicazione - HTTPIl livello applicazione è il più alto della pila: offre servizi all'utente con una connessione logica tra le due applicazioni e riceve servizi solo dal trasporto (DNS, HTTP, e-mail, FTP). Il Web (WWW, nato al CERN nel 1989) è un servizio client-server distribuito di pagine collegate da ipertesti; ogni pagina ha un URL protocollo://host:porta/percorso. HTTP: il client manda una richiesta, il server una risposta, su TCP (server sulla porta 80, client su una porta temporanea); senza stato. Messaggi di testo (riga di richiesta o di stato, intestazioni, riga vuota, corpo), metodi GET, POST, HEAD, PUT, DELETE, codici di stato 2xx-5xx. Una pagina con N oggetti incorporati richiede 2(N+1) RTT con connessioni non persistenti e (N+2) RTT con connessione persistente (trascurando la trasmissione). I cookie danno memoria al protocollo: Set-Cookie nella risposta, Cookie nelle richieste, file nel browser e base di dati nel sito. Un proxy (web cache) tiene le copie delle risposte recenti: meno carico sul server, meno traffico, meno ritardo.Livello applicazione - HTTP →, Posta elettronica - SMTP, POP3 e IMAPLa posta elettronica è una transazione a senso unico: non ha senso che il destinatario tenga un server sempre acceso, quindi si usano server intermedi. Servono due User Agent (UA, il programma dell'utente), due programmi client/server di spinta (MTA, protocollo SMTP: mittente-suo server e server-server) e un programma client/server di tiro (MAA, POP3 o IMAP4: server del destinatario-destinatario). SMTP usa TCP porta 25, comandi HELO, MAIL FROM, RCPT TO, DATA, QUIT e risposte a tre cifre (220 pronto, 250 ok, 354 inizia il testo, 221 chiusura, 421 non disponibile) in tre fasi: apertura, trasferimento, chiusura. POP3 (porta 110): utente e password, poi elenca e scarica i messaggi uno a uno; non organizza la posta sul server. IMAP4 aggiunge intestazioni prima del download, ricerca, download parziale, cartelle sul server. MIME permette di spedire dati non ASCII (immagini, video, lettere accentate) traducendoli in ASCII a 7 bit, per esempio in base64 (3 byte diventano 4 caratteri).Posta elettronica - SMTP, POP3 e IMAP →; RIP e BGP: Protocolli di instradamento - RIP, OSPF e BGPIn Internet l'instradamento non si può fare con un solo protocollo, per scalabilità (tabelle troppo grandi) e per autonomia amministrativa: ogni ISP è un sistema autonomo (AS) con il proprio algoritmo. All'interno di un AS si usano i protocolli IGP: RIP (distance vector, numero di salti, massimo 15, aggiornamenti ogni circa 30 s, su UDP porta 520) e OSPF (link state con Dijkstra, aree collegate all'area 0, cinque tipi di LSA, messaggi direttamente in IP). Tra AS si usa BGP4 (path vector, su TCP porta 179, eBGP tra AS e iBGP dentro l'AS, scelta del percorso per politica: preferenza locale, AS-PATH più corto, origine; i cicli si evitano scartando i cammini che contengono già il proprio AS; quattro messaggi: Open, Keepalive, Notification, Update).Protocolli di instradamento - RIP, OSPF e BGP →.
Socket e quaterna
- Socket , per esempio . Servono due socket (client e server): gli IP stanno nell'intestazione di rete, le porte in quella di trasporto.
- Quaterna : identifica in modo univoco una connessione.
- Esempio: e verso , porte e : , connessioni diverse. Il server usa una sola porta (80): la quaterna distingue le connessioni.
Incapsulamento e multiplexing
- Il mittente aggiunge l'intestazione di trasporto; il ricevente la toglie e consegna al processo. Il segmento è il payload di un datagramma IP; il campo Protocol vale (TCP) o (UDP) (Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →).
- Multiplexing (mittente): più processi, un solo UDP/TCP, ogni segmento con la propria porta sorgente. Demultiplexing (ricevente): smista guardando le porte.
- UDP (senza connessione): socket individuato da (IP destinazione, porta destinazione). TCP (con connessione): socket individuato dall'intera quaterna, un socket per connessione.
- Esempio: sul server la porta ha , , ; un segmento con porta sorgente e IP sorgente va alla seconda.
Flusso, errore, congestione
| servizio | dipende da | coinvolge |
|---|---|---|
| errore | perdita o corruzione dei pacchetti | solo i trasporti di mittente e destinatario |
| flusso | capacità del ricevente | mittente e ricevente |
| congestione | canale e contesto (la rete) | il mittente, in base alla rete |
- Flusso: pulling (il consumatore chiede) non richiede controllo; pushing (il produttore consegna subito) sì. I buffer alleviano il problema (TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →).
- Errore: il trasporto scarta i corrotti, rispedisce i persi, elimina i duplicati, tiene i fuori ordine, grazie al numero di sequenza: con bit va da a (es. : –; TCP, 32 bit: –). TCP usa una combinazione di stop-and-wait, Go-Back-N e Selective Repeat (Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective RepeatARQ (Automatic Repeat reQuest) rende affidabile un collegamento che sbaglia: il ricevitore conferma (ACK) i frame ricevuti bene, il trasmettitore ritrasmette allo scadere del timeout. Servono timeout (contro il deadlock) e numeri di sequenza (contro i duplicati). Con $t_G=t_F+2\tau_p+t_A$ e probabilità di errore $p$: Stop-and-Wait $\rho=\frac{t_F(1-p)}{t_G}$; Go-Back-N con finestra $N\ge t_G/t_F$ $\rho=\frac{1-p}{1+(N-1)p}$; Selective Repeat $\rho=1-p$. Efficienza $\eta=\rho,I/F$. La finestra ottima è la capacità del tubo in pacchetti. In Selective Repeat esiste anche una lunghezza ottima del frame: con overhead $o$ e probabilità di errore sul bit $P_b$, $x_{ott}\simeq\frac o2+\sqrt{o/P_b}$ (frame più corti se il canale sbaglia di più).Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective Repeat →).
- Congestione: carico capacità, code dei router piene (TCP - controllo di congestioneLa congestione nasce quando collegamenti veloci alimentano un collegamento lento: le code dei router si riempiono, i pacchetti si perdono o ritardano e, nel caso peggiore, la rete collassa (quasi solo ritrasmissioni). TCP controlla la propria finestra di congestione cwnd con il feedback delle perdite (timeout o tre ACK duplicati): slow start (cwnd raddoppia a ogni RTT) fino alla soglia ssthresh, poi congestion avoidance (+1 MSS per RTT); a ogni perdita ssthresh = W/2. Le varianti si distinguono per come reagiscono ai tre dupACK: Tahoe riparte da cwnd = 1 dopo la ritrasmissione rapida; Reno usa il fast recovery (ssthresh = cwnd/2, cwnd = ssthresh + 3, +1 per ogni altro dupACK); NewReno gestisce gli ACK parziali e recupera più perdite nella stessa finestra; SACK riscontra i blocchi ricevuti e ritrasmette solo quello che manca.TCP - controllo di congestione →).
Protocolli
- UDP: senza connessione, inaffidabile (Protocollo UDPUDP (User Datagram Protocol) è il protocollo di trasporto senza connessione e inaffidabile: rispetto a IP aggiunge soltanto la comunicazione processo-processo (numeri di porta) e un controllo d'errore facoltativo. L'intestazione è di soli 8 byte (porta sorgente, porta destinazione, lunghezza, checksum). Il checksum copre pseudo-intestazione (indirizzi IP, protocollo 17, lunghezza), intestazione e dati, ed è il complemento a uno della somma a 16 bit; se vale 0 significa "non calcolato", e un risultato 0 si trasmette come 0xFFFF. UDP non ha connessione, numeri di sequenza, controllo di flusso, di errore né di congestione: si sceglie per i messaggi brevi (DNS, DHCP, RIP, SNMP) e per le applicazioni in tempo reale, dove conta non aggiungere ritardo.Protocollo UDP →). TCP: con connessione, affidabile. SCTP: combina i due. Affidabile non è sempre meglio.
Errori tipici: dire che i router implementano il trasporto (solo gli host); confondere porta (processo) con IP (host); in UDP il demultiplexing ignora IP e porta sorgente.