Un mezzo trasmissivo è il supporto fisico attraverso cui viaggiano i segnali tra due o più nodi di rete. La scelta del mezzo determina la banda disponibile, la distanza massima coperta, l'attenuazione del segnale, la latenza, l'immunità ai disturbi elettromagnetici e il costo di installazione. I mezzi si dividono in guidati (il segnale è confinato in un supporto fisico: doppino, cavo coassiale, fibra ottica) e non guidati (onde radio, infrarossi, microonde).
È il mezzo più diffuso nelle LAN. Ogni cavo contiene coppie di conduttori in rame intrecciati tra loro per ridurre le interferenze elettromagnetiche (crosstalk e EMI). L'intreccio crea campi magnetici opposti che si cancellano reciprocamente. Esistono due varianti principali:
- UTP (Unshielded Twisted Pair): senza schermatura, economico, facile da installare. Usato nella maggior parte delle installazioni LAN.
- STP/FTP (Shielded/Foiled): con schermatura metallica per ambienti ad alta interferenza industriale.
Le categorie definiscono la banda massima: Cat 5e → fino a 1 Gbps su 100 m; Cat 6 → fino a 10 Gbps su 55 m; Cat 6A → 10 Gbps su 100 m; Cat 8 → 40 Gbps su 30 m. Il connettore standard è l'RJ-45. La distanza massima per un segmento Ethernet su Cat 5e/6 è 100 metri prima che l'attenuazione richieda un repeater o uno switch.
Ethernet opera al livello 2 (Data Link) del modello OSI. Utilizza il meccanismo CSMA/CD (Carrier Sense Multiple Access with Collision Detection) sulle reti half-duplex: prima di trasmettere, il nodo ascolta il canale (Carrier Sense); se rileva una collisione durante la trasmissione, interrompe, attende un tempo casuale (backoff esponenziale) e ritrasmette. Nelle reti full-duplex (switch moderni) il CSMA/CD non è necessario perché ogni porta ha un dominio di collisione separato.
Un frame Ethernet (IEEE 802.3) ha la struttura: Preambolo (7B) | SFD (1B) | MAC dst (6B) | MAC src (6B) | Ethertype/Length (2B) | Payload (46–1500B) | FCS (4B). Il campo Ethertype identifica il protocollo di rete incapsulato (0x0800 = IPv4, 0x86DD = IPv6, 0x0806 = ARP). La dimensione massima del payload è 1500 byte (MTU standard Ethernet).
La fibra ottica trasmette dati sotto forma di impulsi luminosi (fotoni) attraverso un sottile filamento di vetro o silice. Il funzionamento si basa sul principio fisico della riflessione totale interna: quando un raggio di luce viaggia da un mezzo più denso (core) a uno meno denso (cladding), e l'angolo di incidenza supera il angolo critico θc, la luce viene completamente riflessa verso l'interno e non fuoriesce.
La legge di Snell governa il fenomeno: n₁ · sin(θ₁) = n₂ · sin(θ₂). Quando θ₁ ≥ θ_c = arcsin(n₂/n₁) si ha riflessione totale. Il core ha un indice di rifrazione n₁ leggermente superiore al cladding (n₂), tipicamente n₁ ≈ 1.48 e n₂ ≈ 1.46. Intorno al cladding è presente una jacket protettiva in polimero. La luce rimane intrappolata nel core e si propaga per rimbalzo lungo tutta la lunghezza della fibra senza dispersione laterale, con attenuazione estremamente bassa (0.2 dB/km nella finestra a 1550 nm).
- Diametro del core: 8–10 µm
- Un solo modo di propagazione della luce
- Sorgente luminosa: laser (LED non sufficiente)
- Lunghezze d'onda operative: 1310 nm, 1550 nm
- Distanza massima: decine–centinaia di km
- Banda: praticamente illimitata (Tbps con WDM)
- Dispersion cromatica trascurabile
- Usata in backbone, WAN, reti metropolitane, intercontinentale
- Diametro del core: 50–62.5 µm
- Più modi di propagazione simultanei
- Sorgente luminosa: LED o VCSEL
- Lunghezze d'onda operative: 850 nm, 1300 nm
- Distanza massima: 300–550 m (a 10 Gbps)
- Problema: dispersione modale → i modi arrivano in tempi diversi
- Profilo indice step-index o graded-index (riduce la dispersione)
- Usata in LAN, data center, campus
- Banda: ordini di grandezza superiori al rame. Con il WDM (Wavelength Division Multiplexing) si trasmettono contemporaneamente decine/centinaia di lunghezze d'onda sullo stesso core, moltiplicando la capacità.
- Attenuazione bassissima: 0.2 dB/km vs ~10 dB/km del rame → distanze enormi senza amplificazione.
- Immunità EMI: il segnale è luminoso, non elettrico → nessun disturbo da campi elettromagnetici, nessun crosstalk.
- Sicurezza: non irradia segnale, difficilissimo da intercettare senza interrompere la comunicazione.
- Leggerezza e dimensioni: un singolo cavo può contenere centinaia di fibre.
Un'architettura di rete definisce la struttura organizzativa dei nodi di comunicazione, i ruoli che essi assumono e le modalità con cui interagiscono. Le due architetture fondamentali sono il modello client-server e il modello peer-to-peer (P2P). In client-server un nodo (server) eroga servizi e un altro (client) li consuma, con ruoli asimmetrici e fissi; in P2P ogni nodo può assumere entrambi i ruoli indifferentemente. Parallelamente, il concetto di protocollo definisce l'insieme formale di regole sintattiche e semantiche che governano lo scambio di messaggi tra entità comunicanti.
Prima di trasferire dati viene stabilita una connessione logica tra mittente e destinatario mediante una procedura di handshake. Questa fase negozia i parametri della sessione (numeri di sequenza, dimensione delle finestre, ecc.) e alloca le risorse necessarie. I dati vengono trasmessi lungo il canale stabilito e la connessione viene esplicitamente chiusa al termine.
- Garantisce ordinamento, affidabilità, controllo di flusso
- Overhead maggiore per l'instaurazione e il teardown
- Stato mantenuto nei nodi per tutta la durata della sessione
- Esempio paradigmatico: TCP (three-way handshake SYN/SYN-ACK/ACK)
- Usato per trasferimento file, navigazione web, SSH, SMTP
Non esiste fase di instaurazione della connessione. Ogni unità dati (datagramma) è trasmessa in modo indipendente, contiene tutte le informazioni di indirizzamento necessarie e può percorrere percorsi diversi nella rete. Non c'è garanzia di consegna, di ordinamento, né di assenza di duplicati.
- Overhead minimo: nessuna negoziazione, nessuna teardown
- Latenza bassa, adatto a traffico burst
- Nessuno stato mantenuto per la sessione
- Esempio paradigmatico: UDP, IP, ICMP
- Usato per DNS, streaming real-time, gaming, SNMP, VoIP
Un protocollo (o servizio) è stateful quando il server mantiene informazioni sullo stato della sessione tra una richiesta e la successiva. Il server ricorda il contesto della comunicazione: dati già scambiati, autenticazione avvenuta, parametri negoziati.
- Il server tiene in memoria il session state per ogni client attivo
- Consente operazioni dipendenti dal contesto precedente
- Scalabilità più complessa (stato distribuito)
- Esempi: TCP (mantiene stato di connessione), FTP (mantiene il canale di controllo), firewall stateful (traccia connessioni aperte)
Un protocollo è stateless quando ogni richiesta è completamente autonoma e indipendente: il server non mantiene alcuna informazione sulle richieste precedenti dello stesso client. Ogni messaggio deve contenere tutte le informazioni necessarie all'elaborazione.
- Scalabilità orizzontale semplice: qualsiasi server può gestire qualsiasi richiesta
- Fault tolerance maggiore: nessuno stato da ripristinare dopo un crash
- Ogni richiesta è autocontenuta
- Esempi: HTTP/1.x (nativamente stateless; i cookie simulano lo stato), UDP, IP, DNS (ogni query è indipendente)
La stratificazione (layering) è il principio architetturale fondamentale delle reti moderne. Decompone il problema complesso della comunicazione in strati indipendenti, ciascuno con responsabilità ben definite. Ogni strato offre servizi allo strato superiore tramite un'interfaccia e utilizza i servizi dello strato inferiore. Due entità sullo stesso strato in host diversi comunicano tramite un protocollo orizzontale. I vantaggi sono: modularità, interoperabilità, possibilità di sostituire l'implementazione di un layer senza toccare gli altri.
Interfaccia con le applicazioni utente. Fornisce servizi di rete direttamente alle applicazioni (HTTP, FTP, SMTP, DNS, SNMP). Gestisce la semantica dei dati scambiati.
Traduzione, codifica, compressione e cifratura dei dati. Garantisce che i dati prodotti da un'applicazione siano leggibili da un'altra (es. conversione ASCII↔EBCDIC, TLS/SSL).
Gestione delle sessioni di comunicazione: instaurazione, mantenimento, sincronizzazione e terminazione. Gestisce i checkpoint per recovery dei dati (es. RPC, NetBIOS).
Comunicazione end-to-end tra processi. Multiplexing tramite porte. Affidabilità (TCP), controllo di flusso, controllo di congestione, o servizio best-effort (UDP). La PDU è il segmento (TCP) o datagramma (UDP).
Instradamento (routing) dei pacchetti attraverso reti eterogenee. Indirizzamento logico (IPv4, IPv6). Frammentazione/reassembling. La PDU è il pacchetto. Dispositivo chiave: il router.
Trasmissione affidabile su singolo link fisico. Indirizzamento fisico (MAC address 48 bit). Framing, rilevazione errori (CRC/FCS), controllo di accesso al mezzo (CSMA/CD). La PDU è il frame. Dispositivo: switch.
Trasmissione di bit grezzi sul mezzo fisico. Definisce tensioni, frequenze, codifiche del segnale (NRZ, Manchester), connettori, cablaggi. La PDU è il bit.
Il modello TCP/IP (detto anche DoD o Internet Model) è il riferimento pratico su cui è costruita Internet. Ha 4 layer che collassano i 7 livelli OSI in un'architettura più pragmatica:
Incorpora i layer OSI 5, 6, 7. I protocolli applicativi gestiscono direttamente sessione, presentazione e applicazione senza distinzione formale. Esempi: HTTP/HTTPS, DNS, DHCP, FTP, SMTP, SSH, SNMP, Telnet.
Corrisponde al layer 4 OSI. I due protocolli fondamentali sono TCP (connection-oriented, affidabile) e UDP (connectionless, best-effort). Fornisce multiplexing via numeri di porta.
Corrisponde al layer 3 OSI. Protocollo principale: IP (IPv4/IPv6). Responsabile dell'indirizzamento logico e del routing inter-rete. Protocolli ausiliari: ICMP (controllo ed errori), ARP (risoluzione IP→MAC), OSPF, BGP (routing dinamico).
Incorpora i layer OSI 1 e 2. Gestisce la trasmissione fisica e il framing sul singolo link. Dipende dalla tecnologia: Ethernet, Wi-Fi (IEEE 802.11), PPP, DSL, ecc.
Quando un'applicazione invia dati, ogni layer aggiunge la propria intestazione (header) al payload ricevuto dal layer superiore. Questo processo è detto incapsulamento. In ricezione avviene il processo inverso (decapsulamento). La PDU (Protocol Data Unit) cambia nome a ogni livello:
- Livello Applicazione → Message/Data
- Livello Trasporto (TCP) → Segmento (aggiunge header TCP)
- Livello Internet (IP) → Pacchetto/Datagramma IP (aggiunge header IP)
- Livello Data Link → Frame (aggiunge header MAC + FCS)
- Livello Fisico → Bit
Due host sullo stesso link fisico comunicano scambiando frame; due host su reti diverse comunicano scambiando pacchetti IP, ognuno dei quali viene incapsulato in frame diversi a ogni hop intermedio.
Il protocollo IP opera al livello 3 (Network/Internet) ed è il protocollo di instradamento universale di Internet. È un protocollo connectionless e best-effort: non offre garanzie di consegna, di ordinamento, né di assenza di duplicati. Ogni pacchetto è instradato indipendentemente dagli altri. L'affidabilità è delegata ai livelli superiori (TCP). IP fornisce due servizi fondamentali: indirizzamento logico (indirizzi IP) e instradamento (routing) dei datagrammi attraverso reti eterogenee.
| bit 0–7 | bit 8–15 | bit 16–23 | bit 24–31 | |||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Byte 0 | Version (4 bit) | IHL (4 bit) | DSCP / ToS (8 bit) | Total Length (16 bit) | ||||||||||||||||||||||||||||
| Byte 4 | Identification (16 bit) | Flags (3 bit) | Fragment Offset (13 bit) | |||||||||||||||||||||||||||||
| Byte 8 | TTL (8 bit) | Protocol (8 bit) | Header Checksum (16 bit) | |||||||||||||||||||||||||||||
| Byte 12 | Source IP Address (32 bit) | |||||||||||||||||||||||||||||||
| Byte 16 | Destination IP Address (32 bit) | |||||||||||||||||||||||||||||||
Indica la versione del protocollo IP. Per IPv4 il valore è 0100 (decimale 4); per IPv6 è 0110 (decimale 6). Il router usa questo campo per determinare come interpretare il resto dell'header.
Specifica la lunghezza dell'header IP in word da 32 bit. Il valore minimo è 5 (5 × 32 bit = 20 byte, header senza opzioni). Il valore massimo è 15 (15 × 32 bit = 60 byte). È necessario perché il campo Options ha lunghezza variabile. Sapere dove finisce l'header è indispensabile per trovare l'inizio del payload (segmento TCP/UDP).
Originariamente definito come ToS (Type of Service), ridefinito come DSCP (Differentiated Services Code Point). I 6 bit DSCP più significativi definiscono la classe di traffico per la QoS (Quality of Service): priorità del pacchetto, gestione in caso di congestione (Expedited Forwarding, Assured Forwarding). I 2 bit ECN (Explicit Congestion Notification) segnalano la congestione in rete senza dover scartare pacchetti.
Indica la dimensione totale del datagramma IP in byte, inclusi header e payload. Valore minimo: 20 byte (solo header). Valore massimo teorico: 65.535 byte. Nella pratica il limite è imposto dalla MTU del link (1500 byte per Ethernet). Quando un datagramma supera la MTU, il router effettua la frammentazione.
Numero identificativo assegnato dal mittente al datagramma. Tutti i frammenti prodotti dalla frammentazione di un singolo datagramma originale condividono lo stesso valore di Identification. Il destinatario usa questo campo per raggruppare i frammenti appartenenti allo stesso datagramma originale durante il reassembling.
- Bit 0 (Reserved): sempre 0.
- Bit 1 — DF (Don't Fragment): se impostato a 1, il router non deve frammentare il pacchetto. Se il pacchetto supera la MTU del link successivo, viene scartato e il mittente riceve un messaggio ICMP "Fragmentation Needed". Usato dal meccanismo Path MTU Discovery.
- Bit 2 — MF (More Fragments): se impostato a 1, indica che esistono altri frammenti successivi. L'ultimo frammento ha MF = 0. Il destinatario sa che il datagramma è completo quando riceve un frammento con MF = 0.
Indica la posizione dei dati del frammento rispetto all'inizio del payload del datagramma originale, espressa in unità di 8 byte. Il primo frammento ha offset = 0. Il destinatario usa Identification + Fragment Offset per riassemblare correttamente tutti i frammenti nell'ordine giusto, indipendentemente dall'ordine di arrivo.
Il TTL è decrementato di 1 da ogni router che elabora il pacchetto. Quando raggiunge 0, il router scarta il pacchetto e invia un messaggio ICMP Time Exceeded al mittente. Funzione: prevenire che pacchetti con destinazione irraggiungibile circolino indefinitamente nella rete a causa di loop di routing. Valori tipici: 64 (Linux), 128 (Windows), 255 (router Cisco). Lo strumento traceroute sfrutta il TTL inviando datagrammi con TTL incrementale per mappare il percorso.
Identifica il protocollo di livello 4 incapsulato nel payload IP, permettendo al livello IP in ricezione di passare il datagramma al processo corretto (demultiplexing). Valori standardizzati da IANA: 6 = TCP, 17 = UDP, 1 = ICMP, 89 = OSPF, 41 = IPv6 encapsulato, 50 = ESP (IPsec).
Checksum calcolato solo sull'header IP (non sul payload). Viene ricalcolato da ogni router perché il TTL cambia a ogni hop. Algoritmo: complemento a 1 della somma dei complementi a 1 delle word da 16 bit dell'header. Se il checksum non corrisponde, il datagramma viene scartato silenziosamente. In IPv6 questo campo è stato eliminato per efficienza (la verifica dell'integrità è delegata ai livelli superiori).
Indirizzi IPv4 a 32 bit in notazione puntata (dotted-decimal). L'indirizzo sorgente identifica il mittente del datagramma; l'indirizzo destinazione identifica il ricevente. Sono i campi su cui si basa tutto il processo di routing. Attenzione: in presenza di NAT (Network Address Translation) l'indirizzo sorgente viene modificato dai router di bordo.
In una rete eterogenea composta da tecnologie diverse (Ethernet, Wi-Fi, ATM, PPP...) gli indirizzi fisici (MAC) sono specifici per ogni tecnologia e non sono gerarchici: non è possibile fare routing su di essi. L'indirizzamento IP introduce un piano di indirizzamento logico, gerarchico e uniforme, indipendente dalla tecnologia del link fisico sottostante. La gerarchia (rete + host) permette ai router di aggregare le rotte e costruire tabelle di routing scalabili.
Un indirizzo IPv4 è composto da 32 bit divisi in due parti logiche: il network prefix (identifica la rete) e il host portion (identifica l'host all'interno di quella rete). La suddivisione è determinata dalla subnet mask. In notazione CIDR si scrive 192.168.1.0/24 dove /24 indica che i primi 24 bit sono il network prefix.
- Network Address: tutti i bit host a 0. Es.
192.168.1.0/24. Identifica la rete, non è assegnabile a un host. - Broadcast Address: tutti i bit host a 1. Es.
192.168.1.255/24. Un pacchetto inviato all'indirizzo broadcast è consegnato a tutti gli host della sottorete. - Indirizzi host: tutti gli indirizzi tra network e broadcast. In una /24: 256 - 2 = 254 host utilizzabili.
Prima del CIDR esisteva il classful addressing: Classe A (/8), Classe B (/16), Classe C (/24). Questo schema era estremamente rigido e causava un enorme spreco di indirizzi (es. un'organizzazione con 300 host doveva ottenere una Classe B con 65.534 indirizzi). Il CIDR ha abolito le classi fisse permettendo prefix di qualsiasi lunghezza (Variable Length Subnet Masking, VLSM). Oggi si assegnano blocchi della dimensione strettamente necessaria.
La subnet mask in CIDR: /24 = 255.255.255.0; /25 = 255.255.255.128; /30 = 255.255.255.252 (solo 2 host: usata per link punto-punto tra router).
Lo spazio di indirizzamento IPv4 a 32 bit teoricamente permette circa 4,3 miliardi di indirizzi. L'esaurimento degli indirizzi pubblici ha portato a riservare blocchi di indirizzi privati (non instradabili su Internet):
10.0.0.0/8— Classe A privata (16.777.214 host)172.16.0.0/12— Classe B privata (1.048.574 host)192.168.0.0/16— Classe C privata (65.534 host)
Il meccanismo NAT (Network Address Translation) permette a host con indirizzi privati di accedere a Internet traducendo gli indirizzi privati in uno o pochi indirizzi pubblici. Il router NAT mantiene una NAT table che mappa coppie (IP privato : porta sorgente) ↔ (IP pubblico : porta NAT).
0.0.0.0/0— Default route127.0.0.0/8— Loopback169.254.0.0/16— APIPA (link-local)224.0.0.0/4— Multicast255.255.255.255— Broadcast limitato
- IP:
192.168.10.130/26 - Mask:
255.255.255.192 - Network: AND bit a bit IP&Mask
- →
192.168.10.128/26 - Broadcast:
192.168.10.191 - Host range: .129 – .190 (62 host)
- Ogni bit sottratto all'host raddoppia il numero di reti
- n bit host → 2n - 2 host
- /30 → 4 indirizzi, 2 host
- /29 → 8 indirizzi, 6 host
- /28 → 16 indirizzi, 14 host
- /27 → 32 indirizzi, 30 host
Un router è un dispositivo di livello 3 (Network) che interconnette reti diverse e instrada i pacchetti IP tra di esse. A differenza degli switch (che operano a L2 e instradano frame in base agli indirizzi MAC all'interno di una stessa rete), il router prende decisioni di forwarding basate sugli indirizzi IP di destinazione dei pacchetti, permettendo la comunicazione tra reti logicamente distinte. Ogni interfaccia del router appartiene a una rete IP diversa e ha un proprio indirizzo IP.
Il router svolge tre funzioni principali: Addressing (assegna e gestisce gli indirizzi IP sulle proprie interfacce), Routing (decide il percorso migliore per ogni pacchetto consultando la routing table) e Fragmentation (se un pacchetto è troppo grande per il link di uscita, lo suddivide in frammenti più piccoli compatibili con la MTU di quel link).
È il "cervello" del router. Esegue il sistema operativo del router (es. Cisco IOS, JunOS) e i protocolli di routing dinamico (OSPF, BGP, RIP, EIGRP). La CPU gestisce anche la configurazione del dispositivo, le sessioni di management (SSH, SNMP), il calcolo delle tabelle di routing e la risposta ai messaggi di controllo come ICMP. Nei router moderni, la CPU non si occupa del forwarding normale dei pacchetti (che avviene in hardware dedicato) ma solo dei pacchetti speciali o delle eccezioni.
È la memoria volatile principale del router. Contiene tutto ciò che il router usa durante il funzionamento: la routing table (tabella delle rotte attive, detta anche RIB — Routing Information Base), la ARP table (mappatura IP↔MAC), i buffer dei pacchetti in transito (code di ingresso e uscita), la configurazione in esecuzione (running-config) e lo stato dei protocolli di routing attivi. Se il router viene spento, tutto il contenuto della RAM viene perso. Più RAM significa routing table più grande e buffer più profondi.
Il router usa due tipi di memoria permanente. La NVRAM (Non-Volatile RAM) contiene la configurazione di avvio (startup-config): le impostazioni salvate che il router carica all'accensione. La memoria Flash (simile a una chiavetta USB interna) contiene l'immagine del sistema operativo del router (il firmware). Queste memorie non perdono i dati in assenza di alimentazione. Quando si salva la configurazione con il comando write memory, la running-config dalla RAM viene copiata nella NVRAM.
Per evitare che la CPU debba consultare la routing table completa per ogni singolo pacchetto (operazione lenta), i router moderni mantengono una FIB (Forwarding Information Base): una versione ottimizzata e precompilata della routing table, caricata direttamente nelle ASIC (chip hardware dedicati al forwarding). Questa cache hardware consente il forwarding a velocità di linea — cioè alla massima velocità del link — senza coinvolgere la CPU. La FIB viene aggiornata ogni volta che la routing table cambia.
Terminano il link fisico in ingresso. Eseguono le funzioni del livello fisico (ricezione segnale), del livello data-link (decapsulamento del frame) e del livello network (lookup nella FIB per determinare la porta di uscita). Le implementazioni moderne eseguono il lookup a velocità di linea per evitare colli di bottiglia.
Il "cuore" del router: trasferisce i pacchetti dalla porta di ingresso a quella di uscita. Tre architetture principali: via memoria (tradizionale, collo di bottiglia sul bus), via bus condiviso (veloce ma un pacchetto alla volta sul bus), via rete di interconnessione (crossbar switch, parallela, alta performance; usata nei router enterprise).
Accodano i pacchetti da trasmettere (output queue/buffer), eseguono lo scheduling (quale pacchetto trasmettere per primo in caso di congestione: FIFO, WFQ, Priority Queuing) e il framing per il layer data-link del link di uscita. Il buffer è necessario perché i pacchetti possono arrivare più velocemente di quanto possano essere trasmessi.
Esegue i protocolli di routing (OSPF, BGP, RIP, EIGRP), mantiene e aggiorna la Routing Information Base (RIB), e calcola la Forwarding Information Base (FIB) installata sulle porte di input per il forwarding a velocità di linea. Gestisce anche SNMP, SSH di management, e le configurazioni.
Ogni interfaccia fisica del router deve avere un indirizzo IP appartenente alla rete a cui è connessa. Questo indirizzo funge da default gateway per gli host di quella rete: quando un host deve inviare un pacchetto a una rete diversa dalla propria, lo indirizza al router come primo hop. Il router gestisce anche la propria ARP table, associando gli indirizzi IP dei vicini diretti ai loro indirizzi MAC, necessari per costruire i frame di livello 2 sui singoli link.
Instradamento Diretto: mittente e destinatario si trovano nella stessa rete IP (stesso network prefix). Il mittente esegue un AND bit a bit tra l'IP di destinazione e la propria subnet mask: se il risultato coincide con il proprio network address, la destinazione è nella stessa rete. Il pacchetto viene consegnato direttamente tramite ARP, senza coinvolgere il router.
Instradamento Indiretto: mittente e destinatario si trovano in reti IP diverse. Il mittente invia il pacchetto al default gateway. Il router riceve il pacchetto, esamina l'IP di destinazione, consulta la propria routing table / FIB e applica il principio del Longest Prefix Match (LPM): tra tutte le voci che matchano l'IP di destinazione, viene selezionata quella con il prefix più lungo (più specifico). Ad ogni hop il router decrementa il TTL di 1, ricalcola il checksum IP e sostituisce l'indirizzo MAC di destinazione del frame con quello del prossimo hop.
Le rotte possono essere statiche (configurate manualmente, nessun overhead di protocollo, usate per reti piccole) oppure dinamiche (apprese tramite protocolli come OSPF, BGP, RIP, EIGRP — si adattano automaticamente ai guasti di rete).
Ogni link di rete ha una MTU (Maximum Transmission Unit): la dimensione massima di un frame che può essere trasmesso su quel link (Ethernet standard: 1500 byte). Quando un pacchetto IP che deve attraversare un link ha una dimensione superiore alla MTU di quel link, il router esegue la frammentazione: suddivide il datagramma originale in più frammenti più piccoli, ciascuno con il proprio header IP.
Ogni frammento porta lo stesso valore di Identification del datagramma originale (così il destinatario sa che appartengono allo stesso messaggio), un Fragment Offset che indica la posizione dei suoi dati nel flusso originale, e il flag MF (More Fragments) impostato a 1 (tranne l'ultimo frammento). Il riassemblaggio avviene esclusivamente alla destinazione finale, non nei router intermedi. Se il bit DF (Don't Fragment) è impostato nell'header e il pacchetto supera la MTU, il router scarta il pacchetto e invia un messaggio ICMP al mittente.
Il DNS è il sistema distribuito e gerarchico che risolve i nomi di dominio (es. www.example.com) nei corrispondenti indirizzi IP e viceversa. È un'infrastruttura critica di Internet: senza DNS ogni utente dovrebbe memorizzare gli indirizzi IP numerici. Il DNS è progettato come un database distribuito con gerarchia ad albero, non esiste un singolo server centrale. Opera prevalentemente su UDP porta 53 (per query standard) e su TCP porta 53 per trasferimenti di zona e query con risposta superiore a 512 byte.
La radice dell'albero DNS è il root domain, rappresentato da un punto finale implicito (.). Esistono 13 indirizzi IP logici di root server (lettere da A a M: es. a.root-servers.net), gestiti da diverse organizzazioni mondiali (ICANN, VeriSign, ecc.), replicati tramite anycast in centinaia di nodi fisici distribuiti globalmente. Conoscono soltanto i name server autoritativi dei TLD.
Il primo livello sotto la radice. Si distinguono:
- gTLD (generic):
.com,.org,.net,.edu,.gov,.int, e i nuovi gTLD (.tech,.io,.ai, ecc.) - ccTLD (country-code):
.it,.uk,.de,.fr,.us— assegnati per ISO 3166. - Infrastructure TLD:
.arpa(usato per DNS inverso, reverse DNS).
I TLD server conoscono i name server autoritativi per i second-level domain registrati sotto di essi.
La gerarchia si estende verso il basso: il second-level domain è la parte controllata dall'organizzazione (example in example.com). I sottodomini sono ulteriori suddivisioni (mail.example.com, api.example.com). Il nome completo da sinistra alla radice è il FQDN (Fully Qualified Domain Name).
Una zona DNS è una porzione contigua dell'albero dei nomi gestita in modo unitario da un insieme di name server. Una zona può corrispondere a un dominio o essere suddivisa in zone più piccole tramite delega (creando una zona figlia con propri name server). La zona è descritta in un file di testo strutturato: il zone file.
Detiene i record DNS ufficiali per una zona. Risponde con autorità alle query su nomi di quella zona (flag AA=1 nella risposta). Ha due ruoli: Primary (legge i record dal zone file locale, unica fonte di verità) e Secondary (copia periodicamente i record dal primary via Zone Transfer — AXFR/IXFR — per ridondanza e bilanciamento).
Riceve le query dei client, esegue la risoluzione ricorsiva per conto loro e memorizza le risposte nella cache. È il server DNS configurato nei client (spesso fornito dall'ISP o servizi pubblici come 8.8.8.8 Google, 1.1.1.1 Cloudflare). Non ha autorità sui dati che restituisce: è un intermediario.
Il client invia una query al proprio resolver ricorsivo (configurato nel sistema operativo). Il resolver si occupa di tutta la catena di interrogazioni e restituisce al client solo la risposta finale. Il client delega completamente la risoluzione al resolver. Questo è il comportamento standard per i client finali (browser, sistema operativo).
- Vantaggio: il client è semplice, non conosce l'architettura DNS.
- Svantaggio: il resolver è sotto pressione — deve gestire migliaia di richieste concorrenti.
Nella risoluzione iterativa, il resolver ricorsivo interroga i server uno per volta. Ogni server risponde con il migliore riferimento disponibile (referral) verso il server successivo, invece di risolvere completamente. Il resolver deve interrogare autonomamente ogni livello:
- Resolver interroga un root server → risposta: "non so, ma ecco i NS per
.com" - Resolver interroga il TLD server per
.com→ risposta: "non so, ma ecco i NS perexample.com" - Resolver interroga l'authoritative NS per
example.com→ risposta: "l'IP diwww.example.comè 93.184.216.34" - Resolver restituisce la risposta al client e la mette in cache.
Questo è il meccanismo con cui lavorano effettivamente i resolver ricorsivi verso i server autoritativi.
Ogni risposta DNS include un valore TTL (Time To Live) specificato dall'amministratore della zona nel record. Il resolver e i sistemi operativi memorizzano nella cache le risposte per la durata del TTL. Durante questo intervallo, le query successive per lo stesso nome vengono risolte localmente senza interrogare i server autoritativi. Benefici: riduzione drastica del traffico DNS globale e diminuzione della latenza percepita dall'utente.
A: mappa un hostname a un indirizzo IPv4 (32 bit). AAAA: mappa un hostname a un indirizzo IPv6 (128 bit). Sono i record più fondamentali del DNS.
Indica quali sono i name server autoritativi per la zona. Ogni zona deve avere almeno 2 record NS (primario + secondario) per ridondanza.
Indica il server di posta elettronica responsabile per un dominio. Ha un campo di priorità: il server con valore più basso ha la precedenza. Consente di avere più server di posta con priorità diverse.
Alias: mappa un nome a un altro nome (nome canonico). Es. www.example.com → example.com. Il resolver segue la catena fino a trovare un record A. Un CNAME non può coesistere con altri record sullo stesso nodo.
Usato per il DNS inverso (reverse DNS): mappa un indirizzo IP a un hostname. I record PTR sono nella zona speciale in-addr.arpa (IPv4) o ip6.arpa (IPv6). Usati da sistemi anti-spam e logging.
Record obbligatorio per ogni zona. Contiene: nome del primary NS, email dell'amministratore, serial number (versione del zone file), refresh/retry/expire per i secondari, e TTL minimo.
Testo arbitrario. Usato per SPF (Sender Policy Framework), DKIM, DMARC (autenticazione email), verifica del dominio per certificati SSL, e altro.
Specifica la posizione di servizi specifici. Formato: _service._proto.name TTL class SRV priority weight port target. Usato da SIP, XMPP, Microsoft AD, ecc.
Query e response DNS condividono lo stesso formato di messaggio a 5 sezioni:
- Header (12 byte fissi): Transaction ID (16 bit, correlazione query/response), Flags (QR, Opcode, AA, TC, RD, RA, Z, RCODE), contatori delle sezioni (QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT).
- Question Section: QNAME (nome richiesto in formato label), QTYPE (tipo di record: A=1, NS=2, CNAME=5, MX=15, AAAA=28...), QCLASS (IN=1 per Internet).
- Answer Section: RR (Resource Record) che rispondono alla query.
- Authority Section: RR NS che indicano i name server autoritativi.
- Additional Section: RR ausiliari, spesso gli A record dei name server citati nella Authority Section (glue records).
Il campo TC (Truncation) nell'header è impostato a 1 se la risposta è stata troncata perché supera i 512 byte consentiti su UDP. In quel caso il client deve ripetere la query su TCP porta 53. Con EDNS0 (Extension Mechanisms for DNS) è possibile negoziare payload UDP fino a 4096 byte, riducendo il ricorso a TCP.
Il DHCP è un protocollo applicativo che automatizza la configurazione IP dei dispositivi su una rete. Senza DHCP, ogni host richiederebbe configurazione manuale di tutti i parametri di rete, con rischio di conflitti e errori. DHCP è un'estensione di BOOTP (Bootstrap Protocol), opera sul modello client-server e si basa su messaggi broadcast: il client, non avendo ancora un indirizzo IP, non può effettuare comunicazioni unicast verso il server.
- Indirizzo IP dell'host (dal pool configurato)
- Subnet mask della rete
- Default gateway (indirizzo del router di accesso)
- DNS server (indirizzi dei resolver DNS da usare)
- Lease time (durata del prestito dell'indirizzo IP)
- Opzionalmente: WINS server, NTP server, domain name, proxy, ecc.
DHCP opera al livello applicativo (L7) utilizzando il protocollo di trasporto UDP perché è un protocollo broadcast e non richiede la garanzia di consegna di TCP. Le porte standard sono:
- UDP porta 67: utilizzata dal server DHCP per ricevere le richieste dai client.
- UDP porta 68: utilizzata dal client DHCP per ricevere le risposte dal server.
Poiché DHCP è basato su broadcast, i messaggi non attraversano i router per default. In reti con più sottoreti, si configura un DHCP Relay Agent (solitamente il router di accesso) che intercetta le richieste DHCP broadcast locali e le inoltra in unicast al server DHCP centralizzato, reinserendo nell'opzione giaddr l'indirizzo dell'interfaccia del relay.
Il client, privo di indirizzo IP, invia un messaggio DHCPDISCOVER come broadcast a livello IP (255.255.255.255) e MAC (FF:FF:FF:FF:FF:FF), con indirizzo sorgente IP 0.0.0.0. Il messaggio contiene il MAC address del client come identificatore e la porta sorgente UDP 68. Tutti i server DHCP sulla rete ricevono questo messaggio. L'obiettivo è scoprire quali server DHCP sono disponibili.
Ogni server DHCP che riceve il DISCOVER risponde con un messaggio DHCPOFFER in broadcast (o unicast se il client lo supporta), contenente: l'indirizzo IP offerto (scelto dal pool disponibile e temporaneamente riservato), la subnet mask, il gateway predefinito, i DNS server, la durata del lease proposta, e l'indirizzo IP del server DHCP offerente (campo Server Identifier). Il campo MAC del client consente al client di riconoscere la propria offer.
Il client può ricevere più DHCPOFFER da più server. Seleziona la prima offerta ricevuta (tipicamente) e invia un messaggio DHCPREQUEST in broadcast (ancora, perché non ha ancora un IP confermato) che contiene il Server Identifier del server scelto. Questo messaggio ha due funzioni: conferma al server scelto che accetta la sua offerta, e informa tutti gli altri server che le loro offerte sono rifiutate (permettendo loro di liberare gli indirizzi temporaneamente riservati e riportarli nel pool). Il DHCPREQUEST viene anche usato per il rinnovo del lease.
Il server selezionato invia un messaggio DHCPACK al client contenente la configurazione definitiva: indirizzo IP assegnato, subnet mask, gateway, DNS, e la durata del lease. Con la ricezione dell'ACK il client esegue un controllo ARP (Gratuitous ARP) per verificare che nessun altro host nella rete stia già usando quell'indirizzo IP (conflitto). Se nessuno risponde, il client applica la configurazione e l'interfaccia di rete diventa operativa.
Quando è trascorso il 50% del lease time, il client invia un messaggio DHCPREQUEST in unicast direttamente al server DHCP originale (di cui conosce l'IP). Se il server risponde con DHCPACK, il lease viene rinnovato (T riparte da zero).
Se il primo tentativo è fallito e il client si riavvia nel periodo tra il 50% e l'87.5% del lease time, all'avvio tenta nuovamente di rinnovare inviando un DHCPREQUEST unicast allo stesso server.
All'87.5% del lease time, il client invia un DHCPREQUEST broadcast a qualsiasi server DHCP disponibile sulla rete. Se almeno un server risponde con DHCPACK, il lease viene rinnovato.
Allo scadere del lease time senza rinnovo riuscito, il client rilascia l'indirizzo IP (opzionalmente invia un DHCPRELEASE al server) e l'interfaccia di rete torna non configurata. Il client riavvia il processo DORA completo inviando un nuovo DHCPDISCOVER in broadcast.
Il livello di trasporto si occupa della comunicazione diretta tra i processi applicativi in esecuzione sugli host di una rete. Mentre il livello IP garantisce solo il trasporto del pacchetto da un host all'altro (senza garanzie), il livello di trasporto offre servizi aggiuntivi ai processi: multiplexing tramite porte, controllo degli errori, ordinamento dei dati. I due protocolli fondamentali sono TCP (affidabile, orientato alla connessione) e UDP (veloce, senza connessione).
TCP è il protocollo di trasporto connection-oriented, full-duplex, affidabile e orientato al flusso di byte. Offre: garanzia di consegna di tutti i byte, ordinamento (i byte arrivano nell'ordine in cui sono stati inviati), controllo di flusso (non sovraccaricare il ricevitore), controllo di congestione (non sovraccaricare la rete), rilevazione e correzione degli errori. Opera tra coppie di socket (IP:porta) e mantiene stato per tutta la durata della connessione (stateful). TCP segmenta il flusso di byte in segmenti TCP che vengono incapsulati in datagrammi IP.
Prima di qualsiasi scambio di dati, TCP deve instaurare la connessione tramite una procedura a tre passi (3-way handshake) che sincronizza i numeri di sequenza iniziali (ISN) di entrambi i lati:
- Step 1 — SYN: il client invia un segmento con il flag SYN=1 e un numero di sequenza casuale ISN_C. Il client entra nello stato
SYN_SENT. - Step 2 — SYN-ACK: il server riceve il SYN, entra nello stato
SYN_RECEIVED, e risponde con i flag SYN=1 e ACK=1. Il campo Acknowledgment Number èISN_C + 1. Il server include il proprio ISN_S. - Step 3 — ACK: il client risponde con ACK=1. Il campo Acknowledgment Number è
ISN_S + 1. La connessione è oraESTABLISHEDsu entrambi i lati.
La randomizzazione degli ISN è fondamentale per la sicurezza: previene attacchi TCP Session Hijacking e IP Spoofing. La chiusura della connessione avviene con uno scambio FIN/ACK a 4 passi (four-way teardown), o con un RST per chiusura immediata abortiva.
| bit 0–7 | bit 8–15 | bit 16–23 | bit 24–31 | |||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Byte 0 | Source Port (16 bit) | Destination Port (16 bit) | ||||||||||||||||||||||||||||||
| Byte 4 | Sequence Number (32 bit) | |||||||||||||||||||||||||||||||
| Byte 8 | Acknowledgment Number (32 bit) | |||||||||||||||||||||||||||||||
| Byte 12 | Data Offset (4) | Res (3) | Flags: NS CWR ECE URG ACK PSH RST SYN FIN (9) | Window Size (16 bit) | ||||||||||||||||||||||||||||
| Byte 16 | Checksum (16 bit) | Urgent Pointer (16 bit) | ||||||||||||||||||||||||||||||
| Byte 20+ | Options (variabile, padding a multiplo di 32 bit) | |||||||||||||||||||||||||||||||
Identificano il processo mittente e destinatario tramite il numero di porta (0–65535). La coppia (IP sorgente, porta sorgente, IP destinazione, porta destinazione) forma una connessione TCP univoca (socket pair). Le porte 0–1023 sono well-known (HTTP=80, HTTPS=443, SSH=22, FTP=21). Le porte 1024–49151 sono registered. Le porte 49152–65535 sono porte effimere assegnate dinamicamente ai client.
Numero che identifica la posizione nel flusso di byte del primo byte di payload contenuto in questo segmento. Permette al ricevitore di riordinare i segmenti arrivati fuori sequenza e di rilevare i duplicati. Nel segmento SYN, il Sequence Number contiene l'ISN (Initial Sequence Number) scelto casualmente. Con 32 bit il numero wrappa a 0 dopo 4 GB di dati trasmessi.
Valido solo se il flag ACK è impostato. Contiene il numero di sequenza del prossimo byte che il ricevitore si aspetta di ricevere. Implementa un ACK cumulativo: un valore ACK=N conferma la ricezione di tutti i byte fino a N-1. Questo campo è il meccanismo base della conferma di ricezione e del controllo degli errori in TCP.
Indica la lunghezza dell'header TCP in word da 32 bit (analogamente all'IHL in IP). Valore minimo: 5 (20 byte, senza opzioni). Valore massimo: 15 (60 byte). Necessario per determinare dove inizia il payload dato che il campo Options ha lunghezza variabile.
- SYN: sincronizzazione — usato nell'apertura della connessione (handshake).
- ACK: acknowledgment — il campo Acknowledgment Number è valido.
- FIN: fine — il mittente ha terminato l'invio di dati (chiusura ordinata).
- RST: reset — chiusura immediata e abortiva della connessione.
- PSH: push — il ricevitore deve consegnare immediatamente i dati all'applicazione senza attendere il riempimento del buffer.
- URG: urgent — il campo Urgent Pointer è valido; i dati urgenti devono essere processati con priorità.
- ECE / CWR: usati con ECN (Explicit Congestion Notification) per segnalare la congestione senza perdita di pacchetti.
- NS: nonce sum — sperimentale, protezione contro alterazioni accidentali dei bit ECN.
Indica il numero di byte che il ricevitore è in grado di accettare nel proprio buffer di ricezione. Il mittente non deve trasmettere più byte non ancora confermati di quanti indicato dalla Window Size del ricevitore. Valore massimo nominale: 65.535 byte. Con l'opzione Window Scale la finestra può essere moltiplicata per un fattore fino a 214, raggiungendo fino a ~1 GB di finestra. Se Window Size = 0, il mittente deve fermarsi (zero-window probing).
Verifica l'integrità dell'header TCP e del payload applicativo. A differenza del checksum IP (solo header), il checksum TCP copre anche i dati. Il calcolo include uno pseudo-header contenente IP sorgente, IP destinazione, protocollo (6) e lunghezza TCP. In TCP il checksum è obbligatorio.
Valido solo se il flag URG è impostato. Indica un offset positivo dal numero di sequenza corrente che punta all'ultimo byte urgente nel segmento. I dati urgenti (out-of-band) vengono consegnati all'applicazione con priorità rispetto al flusso normale. Poco usato nella pratica moderna.
UDP è il protocollo di trasporto connectionless, senza stato (stateless), inaffidabile e best-effort. Non offre garanzie di consegna, né di ordinamento, né di rilevazione di duplicati. Non prevede handshake, controllo di flusso, né controllo di congestione. Ogni datagramma UDP è completamente indipendente dagli altri e può percorrere percorsi diversi nella rete. L'header UDP è fisso a 8 byte, contro i 20+ byte di TCP.
| bit 0–7 | bit 8–15 | bit 16–23 | bit 24–31 | |||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Byte 0 | Source Port (16 bit) | Destination Port (16 bit) | ||||||||||||||||||||||||||||||
| Byte 4 | Length (16 bit) | Checksum (16 bit) | ||||||||||||||||||||||||||||||
| Byte 8+ | Data (payload — variabile) | |||||||||||||||||||||||||||||||
Numero di porta del processo mittente. Consente al destinatario di inviare risposte. In alcuni protocolli (es. DNS query da client) può essere una porta effimera casuale assegnata dal SO.
Numero di porta del processo destinatario. Porte well-known rilevanti per UDP: DNS (53), DHCP server (67), DHCP client (68), TFTP (69), SNMP (161), NTP (123), RIP (520), QUIC (443).
Lunghezza totale del datagramma UDP in byte, inclusi header (8 byte fissi) e payload. Valore minimo: 8 (datagramma senza payload). Dimensione massima del payload: 65.535 - 8 = 65.527 byte.
Verifica dell'integrità di header e payload. In IPv4 il checksum UDP è opzionale (un valore di 0 indica che non è stato calcolato); in IPv6 è obbligatorio. Come in TCP, il calcolo include uno pseudo-header con IP sorgente, IP destinazione, protocollo (17=UDP) e lunghezza.
- Latenza ultra-bassa: il round-trip dell'handshake TCP è inaccettabile. UDP trasmette immediatamente. Usato in: DNS, DHCP, NTP, giochi online, VoIP, videoconferenze (WebRTC).
- Perdita tollerabile: in streaming audio/video real-time, un pacchetto perso causa al massimo un breve glitch; la ritrasmissione arriverebbe troppo tardi per essere utile.
- Multicast/Broadcast: TCP è point-to-point. UDP supporta nativamente multicast e broadcast. Usato da: DHCP, RIP, mDNS, SSDP.
- Applicazioni con affidabilità personalizzata: QUIC (HTTP/3) usa UDP ma implementa multiplexing di stream, controllo di congestione e crittografia a livello applicativo.
- Transazioni semplici richiesta-risposta: DNS, SNMP, TFTP — un singolo scambio di messaggi dove l'overhead del TCP non vale la pena.
Senza la sliding window, TCP userebbe un approccio detto stop-and-wait: il mittente invia un segmento, poi si ferma e aspetta che il destinatario risponda con un ACK prima di poter inviare il segmento successivo. Su una connessione con latenza alta (es. un link intercontinentale con RTT di 150 ms) si potrebbero inviare solo pochi segmenti al secondo, sprecando la quasi totalità della banda disponibile.
La sliding window risolve il problema permettendo al mittente di inviare più segmenti consecutivi senza aspettare l'ACK di ognuno. Questi segmenti si trovano "in volo" sulla rete contemporaneamente. La finestra definisce il numero massimo di byte che possono essere in volo in ogni momento. Finché la finestra non è piena, il mittente può continuare a inviare.
- Zona 1 — Inviati e confermati: il destinatario ha già ricevuto e confermato questi dati con un ACK. Possono essere eliminati dal buffer.
- Zona 2 — Inviati ma non ancora confermati (in-flight): il mittente li mantiene in memoria perché, se scade il timer di ritrasmissione, dovrà rispedirli. Occupano spazio nella finestra corrente.
- Zona 3 — Non inviati ma dentro la finestra (usable window): dati pronti per essere trasmessi immediatamente, senza aspettare ulteriori ACK.
- Zona 4 — Oltre la finestra: dati che il mittente non può ancora inviare perché la finestra è piena o perché il ricevitore non ha ancora dichiarato di avere abbastanza spazio nel buffer.
- rwnd (Receive Window): è comunicata dal ricevitore al mittente tramite il campo Window Size dell'header TCP. Indica quanti byte il ricevitore riesce ad accettare nel suo buffer in quel momento. Questo meccanismo si chiama controllo di flusso.
- cwnd (Congestion Window): è gestita dal mittente in modo autonomo e stima quanti dati la rete riesce a gestire senza andare in congestione. Questo meccanismo si chiama controllo di congestione.
La finestra effettiva è sempre il minimo tra rwnd e cwnd.
- Slow Start: all'inizio ogni connessione TCP parte con una cwnd piccola e la aumenta in modo esponenziale ad ogni RTT finché tutto va bene.
- Congestion Avoidance: quando cwnd supera la soglia ssthresh, la crescita diventa lineare: la finestra cresce di un segmento per ogni RTT completo.
- Rilevamento della congestione: se un ACK non arriva entro il timeout, TCP riduce drasticamente cwnd e riparte con Slow Start. Con 3 ACK duplicati la reazione è meno drastica: cwnd viene ridotta a metà (Fast Retransmit e Fast Recovery).
Quando un segmento si perde, il mittente lo scopre o per scadenza del timer RTO o per ricezione di tre ACK duplicati. Il meccanismo SACK (Selective Acknowledgment) permette al ricevitore di segnalare esattamente quali blocchi di byte ha ricevuto fuori ordine: il mittente può ritrasmettere solo i segmenti effettivamente mancanti, senza rispedire tutto ciò che viene dopo il punto di perdita.
Connection-oriented (3-way handshake)
Garantita (ACK, ritrasmissione, ordinamento)
Sì (sliding window, rwnd)
Sì (AIMD, Slow Start, cwnd)
20–60 byte
Più alta (handshake + controllo)
Non supportato
HTTP/S, SSH, FTP, SMTP, database
Connectionless (nessun handshake)
Best-effort (nessuna garanzia)
No
No (l'app deve gestirlo)
8 byte (fisso)
Minima (trasmissione immediata)
Supportato nativamente
DNS, DHCP, streaming, VoIP, QUIC
Il sistema di posta elettronica di Internet è composto da un insieme di agenti software e protocolli standardizzati che collaborano per trasportare un messaggio dal mittente al destinatario attraverso reti eterogenee. L'architettura è di tipo store-and-forward: ogni messaggio viene ricevuto, memorizzato e poi inoltrato al nodo successivo, garantendo la consegna anche in presenza di temporanee indisponibilità del destinatario. I tre protocolli fondamentali sono:
- SMTP (Simple Mail Transfer Protocol): protocollo di trasmissione — invia i messaggi dal client al server e tra server.
- POP3 (Post Office Protocol v3): protocollo di accesso — scarica i messaggi dal server al client (modello offline).
- IMAP (Internet Mail Access Protocol): protocollo di accesso — accede ai messaggi sul server mantenendoli centralizzati (modello online).
Il programma con cui l'utente compone, invia, riceve e legge le email. Esempi: Outlook, Thunderbird, Apple Mail, Gmail (WebUI). Il MUA comunica con il proprio mail server usando SMTP per l'invio e POP3/IMAP per la ricezione. È l'interfaccia tra l'utente umano e il sistema di posta.
Riceve i messaggi dal MUA (o da un altro MTA) e li instrada verso la destinazione. Usa il DNS per risolvere il record MX del dominio destinatario, trovare l'IP del server di posta destinatario e stabilire una connessione SMTP. Esempi: Postfix, Sendmail, Microsoft Exchange, Exim. Ogni hop SMTP è un MTA.
Riceve il messaggio dal MUA per conto del server. Si occupa di autenticare il mittente, verificare la conformità del messaggio e aggiungere l'header Received: iniziale. Accetta il messaggio sulla porta 587 (submission) o 465 (SMTPS).
Riceve il messaggio dall'MTA del dominio destinatario e lo consegna nella mailbox dell'utente sul server. Esempi: Procmail, Dovecot LDA, Maildrop. La mailbox può essere in formato mbox (un singolo file) o Maildir (una cartella con un file per messaggio). Il MDA non contatta altri server: è l'ultimo hop della catena SMTP.
Quando un MTA deve consegnare un messaggio a utente@example.com, consulta il DNS per trovare il record MX (Mail Exchanger) del dominio. Il record MX associa un dominio a uno o più mail server, ognuno con un valore di priorità numerico. Il server con il valore più basso ha la precedenza. Solo se non è raggiungibile si prova il successivo.
Il processo: MTA mittente → query DNS MX per example.com → riceve i record MX, ordina per priorità → tenta connessione SMTP sulla porta 25 a mail1.example.com.
SMTP è il protocollo standard per la trasmissione delle email. Opera al livello applicativo e usa TCP come trasporto. È un protocollo testuale, stateful e connection-oriented: la sessione mantiene uno stato e i comandi sono stringhe ASCII leggibili. SMTP è un protocollo push: il mittente stabilisce attivamente la connessione verso il server destinatario per consegnare il messaggio.
Porta storica per il trasferimento tra server MTA su Internet. I client non la usano direttamente: gli ISP la bloccano in uscita per prevenire lo spam.
Porta standard per la sottomissione dei messaggi dai client. Richiede autenticazione AUTH obbligatoria. Supporta STARTTLS. Definita in RFC 6409.
La connessione è cifrata dall'inizio senza negoziazione STARTTLS. Ancora ampiamente usata nonostante tecnicamente deprecata a favore della 587.
| COMANDO | DESCRIZIONE |
|---|---|
| HELO dominio | Saluto iniziale SMTP classico. Identifica il client con il proprio hostname/dominio. |
| EHLO dominio | Extended HELO (ESMTP). Il server risponde elencando le estensioni supportate: AUTH, STARTTLS, SIZE, 8BITMIME, PIPELINING ecc. |
| STARTTLS | Aggiorna la connessione da plaintext a TLS cifrata (opportunistic TLS). Dopo il successo il client riemette EHLO sul canale cifrato. |
| AUTH meccanismo | Autentica il client. Meccanismi: PLAIN, LOGIN, CRAM-MD5, SCRAM-SHA-256. Obbligatorio sulla porta 587. Usare solo su TLS. |
| MAIL FROM:<addr> | Dichiara l'indirizzo envelope sender. Usato per i bounce. Può differire dall'header From: visibile nel messaggio. |
| RCPT TO:<addr> | Dichiara un destinatario. Può essere ripetuto per più destinatari. Il server verifica se accetta email per quell'indirizzo. |
| DATA | Inizia il trasferimento del corpo del messaggio (header + body). Il messaggio termina con una riga contenente solo un punto: <CR><LF>.<CR><LF> |
| RSET | Resetta la transazione (annulla MAIL FROM e RCPT TO) senza chiudere la connessione. Utile per inviare più messaggi nella stessa sessione TCP. |
| VRFY utente | Verifica se un indirizzo è valido sul server. Spesso disabilitato per privacy (prevenire enumerazione degli utenti). |
| QUIT | Termina la sessione SMTP. Il server chiude la connessione TCP. Risponde 221. |
Ogni risposta ha un codice numerico a 3 cifre: 2xx Successo, 3xx Azione intermedia (continua), 4xx Errore temporaneo (riprova), 5xx Errore permanente.
| CODICE | SIGNIFICATO |
|---|---|
| 220 | Service ready — banner iniziale del server |
| 221 | Service closing — risposta al QUIT |
| 235 | Authentication successful |
| 250 | OK — azione completata con successo (MAIL FROM, RCPT TO, fine DATA) |
| 354 | Start mail input — server pronto a ricevere il corpo del messaggio dopo DATA |
| 421 | Service not available — server in manutenzione o sovraccarico; errore temporaneo |
| 450 | Mailbox unavailable — temporaneamente occupata o bloccata; riprova |
| 500 | Syntax error — comando non riconosciuto |
| 550 | Mailbox not found / Policy rejection — destinatario inesistente o spam bloccato |
| 553 | Mailbox name not allowed — indirizzo mittente non valido o relay negato |
Esistono due livelli di indirizzamento distinti e indipendenti:
- Envelope (busta SMTP): i comandi
MAIL FROM:eRCPT TO:della sessione SMTP. Determinano il routing del messaggio e non sono visibili all'utente finale.MAIL FROMè l'indirizzo a cui vengono inviati i bounce. - Message Header: le righe
From:,To:,Subject:,Date:dentro il DATA. Sono visibili all'utente. Possono differire dall'envelope (liste di distribuzione, alias, forwarding).
Ogni MTA aggiunge un header Received: in cima creando una traccia del percorso hop-by-hop. L'header più recente è il primo della lista. Analizzare i Received: permette di ricostruire il percorso completo di un'email.
POP3 è il protocollo per il recupero dei messaggi dal server. Filosofia: modello offline — i messaggi vengono scaricati sul client e, per default, eliminati dal server. L'utente legge offline. Usa TCP porta 110 (plain) o TCP porta 995 (POP3S con SSL/TLS). Protocollo semplice con soli tre stati e un insieme limitato di comandi.
Stato iniziale. Il client si autentica con USER + PASS (o APOP). Il server blocca la mailbox in modo esclusivo (lock). Se l'autenticazione fallisce, la connessione viene chiusa.
Autenticazione riuscita. Il client può elencare, scaricare e marcare messaggi per la cancellazione. I messaggi marcati con DELE non vengono eliminati immediatamente.
Raggiunto con QUIT. Il server elimina definitivamente i messaggi con DELE, rilascia il lock sulla mailbox e chiude la connessione TCP.
| COMANDO | RISPOSTA | DESCRIZIONE |
|---|---|---|
| USER username | +OK / -ERR | Specifica il nome utente. Il server risponde +OK anche se l'utente non esiste per non rivelare informazioni sugli account. |
| PASS password | +OK / -ERR | Specifica la password. Se la coppia USER/PASS è corretta, transizione a TRANSACTION e lock esclusivo sulla mailbox. |
| APOP name digest | +OK / -ERR | Autenticazione MD5 challenge-response. Il server fornisce un challenge nel banner iniziale; il client risponde con MD5(challenge+password). Evita la trasmissione della password in chiaro. Opzionale. |
| QUIT | +OK | Chiude la connessione senza entrare in TRANSACTION. Nessun messaggio viene eliminato. |
| COMANDO | RISPOSTA | DESCRIZIONE |
|---|---|---|
| STAT | +OK n m | Statistiche mailbox: n = numero messaggi, m = dimensione totale in byte (esclusi i marcati DELE). |
| LIST [n] | +OK multiline | Elenca messaggi con numero sequenziale e dimensione in byte. Con argomento n restituisce solo il messaggio n-esimo. Termina con riga "." |
| RETR n | +OK size | Scarica il messaggio n completo (header + body). Termina con "." su riga singola. Non elimina il messaggio dal server. |
| DELE n | +OK | Marca il messaggio n per la cancellazione. Effettiva solo al QUIT (stato UPDATE). Il messaggio marcato non compare in STAT/LIST. |
| NOOP | +OK | Nessuna operazione. Keep-alive per evitare timeout della connessione. |
| RSET | +OK | Annulla tutte le marcature DELE della sessione corrente. I messaggi tornano visibili. Utile se si cambia idea sulla cancellazione. |
| TOP n k | +OK multiline | Scarica header del messaggio n più le prime k righe del body. Preview rapida senza scaricare l'intero messaggio. Comando opzionale ma universalmente implementato. |
| UIDL [n] | +OK multiline | Unique IDentifier Listing: ID univoco e persistente per ogni messaggio. Il client lo usa per ricordare quali messaggi ha già scaricato tra sessioni diverse senza duplicati. Opzionale ma essenziale nella pratica. |
| QUIT | +OK | Transizione UPDATE: elimina i messaggi DELE, rilascia il lock e chiude la connessione TCP. |
IMAP è progettato per il modello online e multi-dispositivo. I messaggi restano sul server; il client vi accede e li manipola direttamente. Lo stato (letto, risposto, contrassegnato), le cartelle e le ricerche sono tutte operazioni server-side, sincronizzate tra tutti i dispositivi. Usa TCP porta 143 (STARTTLS) o TCP porta 993 (IMAPS).
IMAP è stateful e a tag: ogni comando è preceduto da un tag univoco (es. A001) che permette di correlare le risposte. Il server può inviare risposte non sollecitate (unilaterali) per aggiornare il client su nuovi messaggi arrivati durante la sessione attiva.
Stato iniziale. Solo CAPABILITY, NOOP, LOGOUT, AUTHENTICATE e LOGIN disponibili. Il server invia greeting * OK o * PREAUTH.
Autenticazione riuscita. Accesso all'elenco cartelle (LIST, LSUB), creazione/rinomina/cancellazione cartelle. Non ancora accesso ai messaggi senza selezionare una cartella.
Una cartella è selezionata con SELECT o EXAMINE. Accesso completo ai messaggi: fetch, store flag, search, copy, move, expunge. Con EXAMINE la cartella è in sola lettura.
Sessione in chiusura dopo LOGOUT. Il server invia * BYE e chiude la connessione TCP. I messaggi con flag \Deleted vengono eliminati se è stato eseguito CLOSE/EXPUNGE prima del logout.
| COMANDO | STATO | DESCRIZIONE |
|---|---|---|
| CAPABILITY | Qualsiasi | Elenca le estensioni supportate: IMAP4rev2, STARTTLS, AUTH=PLAIN, IDLE, UIDPLUS, MOVE, NAMESPACE ecc. |
| NOOP | Qualsiasi | Nessuna operazione. Il server può inviare aggiornamenti spontanei (nuovi messaggi, flag cambiati). Usato per polling passivo. |
| LOGIN u p | Not Auth | Autenticazione plaintext. Solo su TLS. Transizione ad Authenticated. |
| AUTHENTICATE | Not Auth | Autenticazione SASL (PLAIN, CRAM-MD5, SCRAM-SHA-1). Preferibile a LOGIN per sicurezza. |
| SELECT mailbox | Auth | Seleziona cartella in lettura/scrittura. Il server risponde con: EXISTS (n messaggi), RECENT, UNSEEN, UIDVALIDITY, UIDNEXT. Transizione a Selected. |
| EXAMINE mailbox | Auth | Come SELECT ma sola lettura. Nessuna modifica ai flag o cancellazioni permessa. |
| LIST ref pattern | Auth | Elenca cartelle che corrispondono al pattern (wildcard * e %). Es: LIST "" "*" elenca tutte le cartelle. |
| CREATE / DELETE / RENAME | Auth | Crea, elimina, rinomina cartelle. Il separatore gerarchico permette sottocartelle: CREATE Lavoro/Clienti. |
| STATUS mailbox | Auth | Statistiche su una cartella senza selezionarla: messaggi totali, UNSEEN, RECENT, UIDNEXT, dimensione. |
| FETCH seq parts | Selected | Recupera parti di messaggi: ENVELOPE, BODY[HEADER], BODY[TEXT], BODY[] (tutto), FLAGS, UID, RFC822.SIZE. Es: FETCH 1:3 (FLAGS BODY[HEADER]) |
| STORE seq flags | Selected | Modifica flag: \Seen (letto), \Answered, \Flagged, \Deleted, \Draft. Operazioni: FLAGS (imposta), +FLAGS (aggiunge), -FLAGS (rimuove). |
| SEARCH criteria | Selected | Cerca messaggi per criteri: FROM, TO, SUBJECT, BODY, BEFORE/SINCE date, UNSEEN, FLAGGED, LARGER/SMALLER n. Operatori: NOT, OR. |
| COPY / MOVE | Selected | Copia o sposta messaggi in un'altra cartella sul server, senza trasferire dati al client. MOVE è atomico (RFC 6851). |
| EXPUNGE | Selected | Elimina definitivamente i messaggi con flag \Deleted. Il server risponde * N EXPUNGE per ogni messaggio rimosso. I numeri di sequenza vengono rinumerati. |
| IDLE | Selected/Auth | Estensione RFC 2177. Push server: invia notifiche al client senza polling (nuovi messaggi, flag cambiati). Il client esce con DONE. |
| APPEND mailbox | Auth | Aggiunge un messaggio direttamente a una cartella sul server (es. salva la posta inviata nella cartella Sent). |
| LOGOUT | Qualsiasi | Il server invia * BYE e chiude la connessione TCP. |
SMTP originariamente supportava solo testo ASCII a 7 bit: impossibile trasmettere allegati, caratteri accentati, HTML o dati binari. MIME estende il formato dei messaggi senza modificare SMTP, aggiungendo nuovi header e meccanismi di codifica. Quasi tutte le email moderne usano MIME.
- MIME-Version: 1.0 — obbligatorio, segnala che il messaggio usa MIME.
- Content-Type: tipo/sottotipo; parametri — tipo di contenuto. Il parametro
boundaryper messaggi multipart delimita le parti. Il parametrocharsetper testo specifica la codifica. - Content-Transfer-Encoding — come sono codificati i dati per il trasporto ASCII.
- Content-Disposition — come il client presenta la parte:
inlineoattachment; filename="doc.pdf". - Content-ID — ID per parti referenziate da altri contenuti (immagini inline nell'HTML).
| TIPO/SOTTOTIPO | UTILIZZO |
|---|---|
| text/plain | Testo semplice. Parametro charset specifica la codifica (es. charset=UTF-8). |
| text/html | Corpo HTML con formattazione, colori, link, immagini incorporate. |
| multipart/mixed | Messaggi con allegati: una parte per il corpo, una per ogni file allegato. Il parametro boundary delimita le parti. |
| multipart/alternative | Versioni alternative dello stesso contenuto (text/plain + text/html). Il client mostra la versione più ricca che sa gestire. |
| multipart/related | HTML con risorse incorporate (immagini inline referenziate con Content-ID cid:...). |
| application/octet-stream | Dati binari generici. Allegati di tipo sconosciuto o eseguibili. |
| message/rfc822 | Messaggio email incluso come allegato (forwarding di un'email). |
- 7bit: testo ASCII puro. Nessuna codifica aggiuntiva. Solo caratteri ASCII 0–127.
- 8bit: permette byte con bit alto (caratteri accentati). Richiede estensione SMTP 8BITMIME.
- quoted-printable: per testo con pochi caratteri non-ASCII. I caratteri speciali codificati come =XX (valore esadecimale). Il testo resta leggibile senza decodifica. Overhead basso per testo europeo.
- base64: converte dati binari in testo ASCII usando 64 caratteri stampabili. Ogni 3 byte diventano 4 caratteri ASCII. Overhead del 33%. Usato per allegati binari (immagini, PDF, ZIP). Il destinatario deve decodificare il base64.
- binary: nessuna codifica. Richiede estensione SMTP BINARYMIME. Non universalmente supportato.
Scarica e rimuovi — modello offline
110 (plain) / 995 (SSL)
RFC 1939
Cancellati dopo il download (default)
No — solo INBOX
No — ogni device scarica copia diversa
No — nessun flag lato server
No — il client cerca in locale
Semplice — pochi comandi
Un solo device, accesso offline, connessione lenta
Accesso centralizzato — modello online
143 (STARTTLS) / 993 (SSL)
RFC 3501 / RFC 9051
Rimangono fino all'EXPUNGE esplicito
Sì — gerarchia completa di cartelle
Sì — stato identico su tutti i device
Sì — flag persistenti lato server
Sì — comando SEARCH sul server
Complesso — stateful, tag, molti comandi
Multi-device, posta aziendale, web mail
Il sistema email è stato progettato senza autenticazione del mittente: chiunque può dichiarare qualsiasi indirizzo nel campo From: e nel comando MAIL FROM:. Questo espone a spoofing, spam, phishing e intercettazione. Le tecnologie moderne di autenticazione cercano di mitigare questi rischi.
Il proprietario del dominio pubblica nel DNS un record TXT con gli IP autorizzati a inviare email per quel dominio. Il server ricevente verifica se l'IP del server mittente è nell'elenco SPF. Protegge l'envelope sender (MAIL FROM), non il From: degli header visibili all'utente.
Il server mittente firma crittograficamente parti del messaggio con una chiave privata, aggiungendo l'header DKIM-Signature. La chiave pubblica è nel DNS del dominio. Il server destinatario verifica la firma: garantisce integrità del messaggio e autenticità del dominio mittente.
Estende SPF e DKIM con una policy DNS: cosa fare con i messaggi che falliscono la verifica. Valori: none (solo monitoraggio), quarantine (metti in spam), reject (blocca). Prevede anche report aggregati sulle email inviate a nome del dominio.
Cifratura e firma digitale end-to-end del contenuto. Anche se il server è compromesso, il corpo resta cifrato. S/MIME usa PKI con certificati X.509; PGP usa web of trust. Richiedono gestione delle chiavi da parte degli utenti.
La PEC (DPR 68/2005, Codice dell'Amministrazione Digitale) è un sistema italiano che fornisce a un messaggio email lo stesso valore legale di una raccomandata con ricevuta di ritorno. La PEC non cifra il contenuto ma garantisce con certezza e certificazione digitale: identità del mittente, consegna al destinatario, integrità del messaggio, data/ora di invio e ricezione.
- Il mittente invia al proprio Gestore PEC mittente (provider accreditato AGID).
- Il Gestore verifica l'autenticità del mittente, avvolge il messaggio in una busta di trasporto firmata digitalmente. Invia al mittente la ricevuta di accettazione (prova dell'invio con timestamp).
- La busta di trasporto viene trasmessa al Gestore PEC destinatario via SMTP cifrato.
- Il Gestore destinatario verifica la firma, consegna nella mailbox del destinatario e invia una ricevuta di presa in carico.
- Il Gestore mittente invia al mittente la ricevuta di consegna: certifica data/ora di consegna nella mailbox del destinatario.
La firma digitale del gestore su ogni ricevuta (certificati X.509 da CA accreditate) garantisce non repudiabilità. Nota: la comunicazione PEC verso indirizzi non-PEC perde il valore legale della ricevuta di consegna.
- S/MIME garantisce integrità e identità del firmatario ma non la consegna.
- PEC garantisce l'intero ciclo: invio + trasporto + consegna, con valore legale riconosciuto.
- La PEC non cifra il contenuto: per confidenzialità occorre combinare PEC con S/MIME o PGP.