Concetti Chiave
- L'architettura TCP/IP è composta da quattro livelli, con il Network Access Layer che combina gli ultimi tre livelli dell'OSI, utilizzando protocolli come ARP e RARP per risolvere gli indirizzi di rete.
- Il livello Internet gestisce l'indirizzamento e l'integrità dei pacchetti attraverso il checksum, con router che determinano il percorso ottimale per la trasmissione.
- Il routing dinamico consente ai router di aggiornare automaticamente le tabelle di routing utilizzando protocolli come OSPF e RIP, adattandosi ai cambiamenti di rete.
- Il livello di trasporto assicura la comunicazione tra processi applicativi, offrendo servizi affidabili (TCP) o non affidabili (UDP) con meccanismi come il Three-Way Handshake.
- Il livello applicativo include protocolli come FTP, DNS, SMTP e Telnet, ciascuno dei quali offre servizi specifici come il trasferimento di file e la risoluzione dei nomi di dominio.
Indice
- Architettura TCP/IP
- Il livello Internet
- Routing
- Determinare le porte di un router
- Tabella di routing
- Routing Dinamico
- Protocolli di routing dinamico
- RIP (Routing Information Protocol)
- OSPF (Open Shortest Path First)
- Protocolli dell’architettura TCP/IP
- Protocollo ICMP
- Livello di trasporto
- Tipologie di Servizi di Trasporto
- Apertura della connessione: il Three-Way Handshake
- Sistema di ACK e gestione degli errori
- Controllo di coerenza (checksum)
- Chiusura della connessione (Four-Way Handshake)
- Livello applicativo
- Protocolli del livello applicativo
- DNS
Architettura TCP/IP
L’architettura TCP-IP è un insieme di protocolli per la comunicazione in rete. Come il modello ISO/OSI, anche l'Architettura TCP/IP prevede una struttura stratificata, ma a diffrerenza del modello ISO/OSI, prevede una struttura a 4 livell. Gli ultimi 3 livelli del modello OSI sono accorpati in un unico livello del TCP/IP chiamato Network Access Layer.
Il primo livello è il livello di rete, e incorpora i primi due livelli del modello ISO/OSI. Questo livello rappresenta lo standard IEEE 802.x.
Il secondo livello è il livello Internet. Esso ha lo scopo di selezionare il miglior percorso all'interno della rete per la trasmissione del pacchetto al destinatario. Questo è svolto dal router.
Esso deve:
- conoscere la topologia della rete
- scegliere il percorso migliore
Ciascun dispositivo connesso alla rete ha due indirizzi: un indirizzo fisico (MAC address) univoco per ciascun dispositivo, e un indirizzo logico (IPv4 o IPv6). Il router per risolvere uno dei due indirizzi partendo da un altro, usa due protocolli: ARP (Address Resolution Protocol), che restituisce l’indirizzo MAC partendo dall’indirizzo IP, e il RARP, che restituisce l’indirizzo IP partendo dal MAC Address. Questo protocollo ormai è deprecato ed è stato praticamente sostituito da protocolli moderni come DHCP.
Il protocollo analizza un indirizzo logico per capire a quale dispositivo dovrà inviare il pacchetto. Questo compito è svolto dal router.
Il livello Internet
Affinché il pacchetto arrivi a destinazione, il router dovrà avere due indirizzi IP: un source IP address e un destination IP Address. C’è poi un Type of service che serve per classificare il tipo di dato.
Il TTL (Time To Live) è il numero di salti che il pacchetto può fare prima di essere scartato.
Il Service Access Point è un identificativo per il tipo di applicazione (HTTP, SMTP, FTP…). Il checksum è un codice di controllo calcolato sia in partenza che a destinazione, per verificare che il pacchetto inviato sia integro e che non sia stato corrotto durante la trasmissione.
Lo scopo del livello internet è quello di indirizzare i vari pacchetti verso il destinatario facendogli percorrere la strada più breve, in modo che arrivi nel minor tempo possibile, ma anche rimanendo integro. A questo scopo interviene il router. Chi configura il router, sa già con quali reti dovrà comunicare. Il router prenderà uno degli indirizzi IP disponibili per gli host appartenenti ad ogni rete con la quale deve comunicare.
Routing
Determinare le porte di un router
Per prima cosa bisogna trovare il numero di host per ciascuna rete. Per convenzione, tra gli host disponibili si assegna alla porta del router il primo indirizzo disponibile. Questo vale anche se sono presenti più router che dialogano con la stessa rete: i router prendono i primi indirizzi disponibili (anche se possono essere configurati diversamente).
Tabella di routing
Lo scopo principale di una tabella di routing è quello di aiutare i router a prendere decisioni di routing efficaci. Ogni volta che un pacchetto viene inviato attraverso un router per essere inoltrato a un host su un'altra rete, il router consulta la tabella di routing per trovare l'indirizzo IP del dispositivo di destinazione e il percorso migliore per raggiungerlo. La tabella di routing si compone di 4 elementi (ognuna su una colonna):
-
Interfaccia: il tipo di rotta che il pacchetto deve intraprendere per raggiungere la rete indicata nel secondo campo della tabella. Si distinguono tre tipologie di rotte:
- Rotte dirette (C – Connected): sono reti direttamente collegate al router.
- Rotte statiche (S – Static): configurate manualmente dall’amministratore di rete e non connesse direttamente al router.
- Rotte dinamiche (D, O, RIP, ecc.): apprese automaticamente attraverso protocolli di routing dinamico come RIP, OSPF, EIGRP.
- Indirizzo di rete: Contiene gli indirizzi delle reti collegate al router.
-
Next Hop: rappresenta il "casello" successivo lungo il percorso del pacchetto.
- Se la rete di destinazione è direttamente connessa al router, in genere non è necessario indicare un Next Hop: il pacchetto viene consegnato direttamente all'host tramite l’interfaccia appropriata del router. Altrimenti si può indicare l’indirizzo IP relativo alla porta del router su quella rete.
- Se invece la rete di destinazione non è direttamente connessa, il campo Next Hop contiene l'indirizzo IP del router successivo (il “salto successivo”) verso cui inoltrare il pacchetto per proseguire il viaggio, sulla base del "Shortest Path Principle” (Principio del cammino minimo).
- Costo: un valore numerico che rappresenta la "distanza" o il costo del percorso, inteso come il numero di router che il pacchetto deve attraversare (come il casello autostradale). Quel numero serve per stabilire qual’è il percorso migliore per il pacchetto.
Routing Dinamico
Il routing dinamico è una tecnica in cui i router apprendono automaticamente le informazioni sulle reti e aggiornano le proprie tabelle di routing senza intervento manuale. Per fare ciò, i router si scambiano informazioni tra loro attraverso protocolli di routing dinamico, che gli permettono di:
- Scoprire nuove reti
- Determinare i percorsi migliori
- Adattarsi automaticamente ai cambiamenti nella configurazione della rete (es. un router che si guasta o una nuova rete che viene aggiunta)
Nella tabella di routing, la tipologia di rotta è indicata con una lettera che rappresenta il protocollo utilizzato (es. "O" per OSPF, "R" per RIP, ecc.).
Protocolli di routing dinamico
I protocolli dinamici si dividono in due grandi categorie:
-
Distance Vector (vettore di distanza)
- I router inviano periodicamente l’intera tabella di routing ai router vicini
- Ogni router conosce la distanza (numero di salti) verso una destinazione
Esempi: RIP (Routing Information Protocol), IGRP (Interior Gateway Routing Protocol – obsoleto).
-
Link State (stato dei collegamenti)
- Ogni router invia lo stato dei propri collegamenti (non l’intera tabella) a tutti i router dell’area.
- Ogni router costruisce una mappa completa della rete (grafo).
- Calcola il percorso più breve usando l'algoritmo di Dijkstra.
- Più complesso, ma anche più efficiente e veloce nel rilevare cambiamenti.
Esempi: OSPF (Open Shortest Path First) – molto usato; IS-IS (Intermediate System to Intermediate System) – usato in reti grandi e carrier.
Immaginando tre router A, B e C: se il collegamento tra A e C cade, i router B e A se ne accorgono automaticamente (grazie al protocollo) e ricalcolano una nuova rotta per raggiungere C, se possibile.
RIP (Routing Information Protocol)
RIP è uno dei protocolli di routing più semplici e storici, basato sul concetto di "distanza" tra router. In pratica, ogni router invia periodicamente (ogni 30 secondi) l’intera tabella di routing ai suoi router vicini. Ogni voce nella tabella dice quante "fermate" (hop) servono per raggiungere una certa rete. Se un router riceve un’informazione che dice “per arrivare alla rete X bastano 2 salti”, lui aggiorna la sua tabella dicendo “posso arrivare a X in 3 salti (2 + 1)”.
Questo protocollo è basato sull’algoritmo di Bellman-Ford.
Il meccanismo è semplice, ma ha dei limiti: il numero massimo di salti è 15 (oltre il quale una rete è considerata irraggiungibile) e l’aggiornamento periodico lo rende lento a reagire ai cambiamenti, come guasti o modifiche alla rete. Questo significa che RIP funziona bene solo in reti molto piccole, dove la topologia non cambia spesso.
OSPF (Open Shortest Path First)
OSPF è un protocollo più moderno e sofisticato, pensato per reti di medie o grandi dimensioni. A differenza di RIP, non si basa sulla distanza in salti, ma sulla larghezza di banda dei collegamenti. Più un collegamento è veloce, minore sarà il “costo” del percorso che lo include.
La logica è questa:
- ogni router si guarda attorno e scopre chi ha vicino (con messaggi chiamati Hello);
- crea una “scheda informativa” chiamata LSA (Link State Advertisement), che descrive lo stato delle sue connessioni;
- queste informazioni vengono distribuite a tutti gli altri router nell’area OSPF;
- ogni router riceve lo stesso quadro generale della rete e costruisce una mappa completa;
- su questa mappa viene eseguito l’algoritmo di Dijkstra, che calcola il percorso più breve per raggiungere ogni rete.
OSPF è molto veloce a reagire ai cambiamenti: se un router va giù, tutti i router aggiornano subito la loro mappa e ricalcolano i percorsi. Inoltre, supporta la divisione della rete in aree per migliorare l’efficienza e la scalabilità.
Protocolli dell’architettura TCP/IP
Protocollo ICMP
Questo protocollo testa il funzionamento della rete. Tutte le volte che noi apriamo la nostra shell e facciamo un ping ad un sito:
Questo protocollo invia un pacchetto che serve a sondare il passaggio del pacchetto della rete. Attraverso le risposte ricevute, se di questi 32 byte ne ritornano 16, il sistema restituisce un errore. Segnala errori di funzionamento e aiuta nella sicurezza di rete (i firewall usano questo protocollo per testare la sicurezza della rete).
Livello di trasporto
Il livello di trasporto è responsabile della comunicazione tra processi applicativi su dispositivi diversi, gestendo il trasferimento dei dati in modo affidabile o non affidabile, a seconda del protocollo utilizzato. Questo livello garantisce la segmentazione, il controllo di flusso, la gestione degli errori e, in alcuni casi, la ritrasmissione dei pacchetti persi.
Tipologie di Servizi di Trasporto
Tutti i pacchetti o datagrammi si distinguono in:
-
Reliable Services (Servizi Affidabili)
- Sono servizi orientati alla connessione.
- Garantiscono che nessun pacchetto venga perso, segnalando eventuali errori e gestendo la ritrasmissione dei dati.
- Offrono controllo di congestione e controllo di flusso.
- Introducono maggiore latenza a causa delle conferme di ricezione e delle eventuali ritrasmissioni.
- Esempio: TCP (Transmission Control Protocol).
-
Unreliable Services (Servizi Non Affidabili)
- Sono servizi senza connessione; i dati vengono inviati senza stabilire una connessione preventiva.
- I pacchetti (datagrammi) possono arrivare in ordine diverso o non arrivare affatto.
- Non esiste un meccanismo di ritrasmissione automatico.
- Offrono latenza molto bassa; ideali per streaming, VoIP, giochi online, DNS.
- Esempio: UDP (User Datagram Protocol).
Apertura della connessione: il Three-Way Handshake
- SYN (Synchronize) – Il client invia un pacchetto SYN al server per iniziare la connessione.
- SYN-ACK (Synchronize-Acknowledge) – Il server risponde con un pacchetto SYN-ACK, confermando la richiesta del client.
- ACK (Acknowledgment) – Il client invia un ACK di conferma, completando la connessione.
Dopo questo scambio, la comunicazione può iniziare.
Sistema di ACK e gestione degli errori
- Numero di sequenza (Sequence Number): ogni pacchetto è numerato per mantenere l’ordine corretto.
- ACK cumulativi: il destinatario può inviare un ACK per più pacchetti ricevuti consecutivamente.
- Ritrasmissione: in caso di pacchetti persi o danneggiati, il mittente li ritrasmette.
Controllo di coerenza (checksum)
Per ogni pacchetto viene calcolato il checksum, trasmesso e ricalcolato a destinazione. Se i due checksum coincidono, allora il pacchetto è integro; altrimenti è corrotto e viene scartato.
Chiusura della connessione (Four-Way Handshake)
- Il client invia un pacchetto FIN per richiedere la chiusura della sua direzione di trasmissione.
- Il server risponde con un ACK confermando la ricezione del FIN.
- Il server invia a sua volta un pacchetto FIN per chiudere la sua direzione di trasmissione.
- Il client risponde con un ACK, completando la chiusura della connessione.
Dopo lo scambio, le parti possono rimanere nello stato TIME_WAIT per un breve intervallo, garantendo che eventuali pacchetti ritardati vengano eliminati prima di liberare le risorse.
Livello applicativo
L’ultimo livello (che corrisponde ai livelli 5, 6 e 7 del modello ISO/OSI) dell’architettura TCP/IP è il livello relativo all’applicazione.
Protocolli del livello applicativo
A livello applicativo abbiamo diversi protocolli principali:
- FTP (File Transfer Protocol): serve a trasferire file nella rete (anche pagine web), sia in upload che in download.
- DNS (Domain Name System): servizio che associa un nome di dominio a un indirizzo IP.
- SMTP (Simple Mail Transfer Protocol): serve per trasferire mail a livello di rete.
- POP (Post Office Protocol): gestisce l’accesso agli account di posta elettronica.
- Telnet: terminal emulator per accedere a macchine remote (oggi spesso rimpiazzato da SSH).
DNS
Quando digitiamo un indirizzo web nella barra degli indirizzi, ad esempio www.example.com, viene inviata una richiesta al DNS Resolver. A questo punto possono accadere due cose:
- Se è la prima volta che si cerca di visitare un sito:
- viene inviata una richiesta al DNS root name server, che indica il Top Domain Level (.com, .it …);
- il DNS root name server risponde al DNS Resolver;
- il DNS Resolver invia una richiesta al name server relativo al top domain del sito;
- si passa al dominio di secondo livello, es. example in www.example.com;
- il name server del dominio di secondo livello restituisce il name server relativo al sito specifico;
- l’end user invia una richiesta al name server del sito che si intende visitare, che restituisce l’indirizzo IP.
- Se l’utente visita frequentemente il sito e il DNS Resolver ha in cache l’indirizzo IP associato all’URL, viene restituito subito l’indirizzo IP.