lunedì, Dicembre 5, 2022

Corso WireShark: terza lezione

Salvatore Valerio
E' certificato Cisco CCNA. Appassionato di reti e di Sicurezza. Redattore di NetworkingItalia per il quale ha scritto diversi articoli. Pubblica anche su AreaNetworking e ASSINT per il quale sta realizzando un corso online sulla sicurezza informatica. Al momento lavora presso un istituto professionale di Monza (MI) come Assistente Tecnico ma spera di poter cambiare.

Relazioni tra i livelli del modello OSI

Ogni livello offre servizi al livello immediatamente superiore o inferiore, nascondendo i dettagli relativi all’implementazione di tali servizi. Al tempo stesso, ogni livello agisce come se stesse comunicando direttamente con il livello corrispondente sull’altro computer. Questo consente una comunicazione logica, o virtuale, tra livelli di pari grado (ad eccezione del livello fisico), come mostrato nella figura sotto.

In realtà, la comunicazione vera e propria avviene tra i livelli adiacenti (sopra e sotto), seguendo la pila protocollare dello stesso computer. A ogni livello il software implementa funzioni di rete in base a una serie di protocolli.

In trasmissione prima di essere passati al livello successivo, i dati della comunicazione vengono frammentati, segmentati in pacchetti, blocchi o unità di informazioni, che vengono trasmessi come unità a se stanti tra i dispositivi di rete.

Nella trasmissione, la rete passa i pacchetti da un livello software più alto verso il successivo più basso, seguendo l’ordine dei livelli stessi. Ad ogni livello il software aggiunge alla unità di informazioni (il pacchetto di dati, chiamato anche payload) ulteriori informazioni di formattazione o indirizzamento, necessarie per la corretta trasmissione del pacchetto stesso sulla rete. L’aggiunta di queste informazioni livello per livello viene chiamato imbustamento o incapsulamento. Nell’incapsulamento i dati vengono racchiusi in testa da una serie di informazioni di imbustamento che vengono chiamate Header.

All’estremità ricevente, questa unità di informazioni (il pacchetto) passa attraverso i vari livelli, in ordine inverso dal più basso verso il più alto. A ciascun livello, un’utilità software legge le informazioni allegate al pacchetto (Header), le elimina (operazione questa chiamata di decapsulamento o dis-imbustamento) e passa il pacchetto al livello superiore. Alla fine di questa operazione l’unità di informazioni giunge ricomposta al livello Applicazione: le informazioni relative alla formattazione o all’indirizzamento sono state eliminate e i dati sono tornati nella loro forma originale, leggibile dal ricevente.

Ad eccezione del livello inferiore (Fisico) del modello OSI, nessun livello è in grado di passare informazioni direttamente al proprio livello corrispondente su un altro computer. Le informazioni sul computer mittente devono essere passate in senso discendente via via a ogni livello successivo, finchè non raggiungono il livello Fisico. Vengono quindi trasferite, attraverso il mezzo fisico, al computer ricevente su cui dovranno risalire tutti i livelli di rete fino ad arrivare al livello corrispondente a quello di partenza (Applicativo).

Descrizione dei 7 livelli OSI

Adesso descriveremo la funzione di ognuno dei sette livelli del modello OSI e verranno identificati i servizi che ciascuno offre ai livelli adiacenti. I sette livelli dall’alto in basso sono: Applicazione, Presentazione, Sessione, Trasporto, Rete, Collegamento Dati, Fisico.

Livello Applicazione

Il livello 7, il livello superiore del modello OSI, si chiama Applicazione. Questo livello interfaccia direttamente l’utente alla macchina. Questo livello è relativo ai servizi che supportano direttamente le applicazioni dell’utente (il software applicativo), quali il software per il trasferimento dei file, per l’accesso ai database e per la posta elettronica. In altre parole, funge da finestra attraverso la quale i processi delle applicazioni possono accedere ai servizi di rete. Un messaggio che deve essere inviato lungo la rete entra a questo livello del modello OSI ed esce al livello Applicazione del computer ricevente.

La famiglia dei protocolli del livello Applicazione è quella più ampia in assoluto e possono essere programmi veri e propri, come il protocollo FTP (File Transfer Protocol), oppure possono essere protocolli che forniscono supporto ad altri programmi, come il protocollo SMTP (Simple Mail Transfer Protocol), usato dalla maggior parte dei programmi di posta elettronica per il reindirizzamento di dati alla rete. Altri esempi di protocolli di livello applicativo sono: DHCP, POP, IMAP, HTTP, HTTPS, TELNET, TFTP, NNTP, NTP, SMB, DNS, Finger, SNMP, PANA, LDAP, RADIUS, RLogin, Rsync, SSH, IRC, Gnutella, BitTorrent. I livelli inferiori forniscono il supporto ai task eseguiti al livello Applicazione. Questi task includono accesso generale alla rete, controllo del flusso e ripristino in caso di errori.

Livello Presentazione

Il livello 6, detto Presentazione, definisce il formato standardizzato per lo scambio di dati tra computer eterogenei collegati in rete. Può essere paragonato a un traduttore di rete. Quando i computer di sistemi eterogenei, devono comunicare tra di loro, è indispensabile una certa quantità di traduzione e riordinamento dei byte. Sul computer mittente il livello Presentazione converte i dati dal formato inviato dal livello Applicazione verso un altro formato intermedio, riconosciuto da entrambi. Sul computer ricevente questo livello traduce il formato intermedio in un formato riconoscibile dal livello Applicazione. Il livello Presentazione è responsabile della conversione dei protocolli, della traduzione e della crittografia dei dati (cifratura e decifratura), della modifica e conversione dei set di caratteri e dell’espansione dei comandi grafici. Questo livello gestisce inoltre la compressione dei dati al fine di ridurre il numero dei bit che devono essere trasmessi sulla rete. Alcuni esempi di protocolli di livello presentazione sono: ASCII, MPEG, JPEG, MIDI.

Livello Sessione

Il livello 5, detto Sessione, permette a due applicazioni in esecuzione su computer diversi di aprire, usare e chiudere una connessione virtuale. Questa connessione virtuale (stabilita, mantenuta e terminata) è la comunicazione tra applicazioni cooperanti, tra due processi e viene definita Sessione. Una applicazione può avere molti processi simultaneamente. Una Sessione rappresenta un momento di dialogo altamente strutturato tra due Workstation. Il livello Sessione è responsabile della gestione di questo dialogo, realizzando la sincronizzazione tra mittente e ricevente. A questo livello vengono eseguiti il riconoscimento dei nomi e altre funzioni, per esempio di protezione, necessarie per la comunicazione in rete tra le due applicazioni.

Il livello Sessione garantisce la sincronizzazione tra i task degli utenti inserendo checkpoint (punti di controllo) nel flusso di dati, allo scopo di suddividere i dati in gruppi di dimensioni contenute. Questo modo di sincronizzare la trasmissione permette, se la rete si blocca, oppure in caso di errore, di ritrasmettere solo i dati successivi all’ultimo punto di controllo andato a buon fine. Questo livello implementa inoltre il controllo del dialogo tra due processi in comunicazione, determinando per esempio quale deve trasmettere, in che momento e per quanto tempo, controllare se la comunicazione è half-duplex o full-duplex .

Livello Trasporto

Il livello 4, detto Trasporto, fornisce un ulteriore livello di connessione al di sotto del livello Sessione. Il livello Trasporto assicura che i pacchetti vengano recapitati correttamente, in modo trasparente, nella giusta sequenza e senza perdite o duplicazioni tra due host, gestendo il controllo del flusso, la rilevazione degli errori e rimediando agli errori.

Sul computer mittente questo livello riceve i dati dal livello superiore e si occupa di frammentarli in unità atte alla trasmissione chiamate “segmenti”, applicando ad essi un intestazione (header), li passa al livello inferiore (Rete) per trasmetterli in modo efficiente ed affidabile.

Alla ricezione questo livello, ottenuti i dati dal livello inferiore (Rete), toglie l’intestazione (header) relativa a questo livello e riorganizza nuovamente i “segmenti” in un flusso di dati coerente e, in genere, invia/offre un riconoscimento della ricezione del messaggio, il controllo del flusso. Se giunge un pacchetto doppio, questo livello è in grado di riconoscerlo e di scartarlo. Questo processo garantisce che i pacchetti vengano trasmessi in modo efficiente sulla rete.

Il livello Trasporto offre le funzioni di controllo del flusso e gestione degli errori e coopera alla risoluzione dei problemi relativi alla trasmissione e ricezione di pacchetti, preoccupandosi di ottimizzare l’uso delle risorse di rete e di prevenire la congestione.

I protocolli di livello Trasporto mettono in piedi un contatto tra specifiche porte su diversi computer host e mettono su un circuito virtuale tra origine e destinazione. I protocolli di trasporto su ogni computer host verificano che le applicazioni che spediscono i dati siano autorizzate ad accedere alla rete e che entrambe le parti terminali siano pronte ad iniziare il trasferimento dei dati. Quando questa sincronizzazione è completa, i dati vengono spediti. Appena i dati sono stati trasmessi, il protocollo di trasporto su ogni host esamina la circolazione dei dati e li controlla per gli errori di trasporto. Se sono scoperti errori a livello Trasporto, il protocollo di trasporto offre il servizio di recupero da errore.

Le funzioni eseguite dal livello Trasporto sono molto importanti per le comunicazioni di rete. Nel momento in cui lo strato di Collegamento dati fornisce un basso livello di affidabilità alle connessioni connection-oriented o connectionless, lo strato Trasporto esegue gli stessi controlli, ma ad un livello più alto.

Nel modello usato nella realtà, la suite di protocolli TCP/IP, i due protocolli più comunemente associati a questo livello sono:

  • TCP (Transmission Control Protocol), un protocollo orientato alla connessione (connection-oriented) che ha il compito di creare un collegamento tra due computer prima di spedire i dati e quindi di stabilire una sessione di lavoro affidabile tra due host controllando la sincronizzazione, poi di verificare che i dati siano giunti a destinazione usando i riconoscimenti (ACK) (ad esempio dei messaggi inviati indietro dal ricevente al mittente che accusano il ricevimento);
  • UDP (User Datagram Protocol), un protocollo non orientato alla connessione (connectionless) cioè si occupa solo di inviare i dati senza effettuare verifiche con la fiducia che giungeranno correttamente a destinazione ma senza averne la certezza. La certezza che i dati sono arrivati a destinazione sono un servizio che spetta in questo caso all’applicativo (e quindi ad un livello superiore) che si occuperà della ritrasmissione e della verifica dei dati.

Le Porte del livello Trasporto

Il livello Trasporto gestisce l’indirizzamento logico delle porte. Una porta è un’estensione di un indirizzo IP, esattamente come quando si spedisce una lettera e si aggiunge il numero dell’appartamento del destinatario all’indirizzo dell’edificio, cosa questa che definisce precisamente dove i dati dovrebbero arrivare.

Un computer può avere molti applicativi di rete che funzionano allo stesso momento ad esempio, un browser Web che spedisce una richiesta ad un Server Web per ottenere una o più pagine Web, un client e-mail che spedisce e riceve una e-mail, un programma di trasferimento file che invia o scarica da un Server FTP. Il computer ha un unico ed univoco indirizzo IP. Quindi come possono funzionare contemporaneamente su un computer applicativi di rete differenti? Quale è il meccanismo che discrimina, indirizza e associa i pacchetti al rispettivo applicativo?

Il meccanismo, la funzione che viene espletata a livello trasporto dai numeri di porta è quello di associare, indicare quali pacchetti di dati, fra tutti quelli entranti, appartengono a quale specifico software di livello applicativo. Senza l’indicazione della porta associata non vi è modo di determinare quale applicazione dovrebbe agire sul pacchetto. Con l’indicazione, oltre del numero di indirizzo IP, anche del numero di porta (chiamato questo socket address e viene indicato dal numero IP separato da due punti come nel seguente esempio: 202.108.124.203:80) non è possibile che le informazioni ricevute possano essere indirizzate ad un applicativo che non le aspetta.

La famiglia di protocolli utilizzati dal livello Trasporto dalla suite TCP/IP comprende diversi protocolli tra i quali, come abbiamo già accennato in precedenza, i più comunemente utilizzati sono: TCP(Transmission Control Protocol) RFC 793, UDP(User Datagram Protocol) RFC 768, che vediamo graficamente rappresentati sotto; mentre altri relativamente meno utilizzati sono: SCTP(Stream Control Trasmission Protocol) RFC 2960 e 3286, DCCP(Datagram Congestion Control Protocol) RFC 4340, RTP(Real-time Transport Protocol) RFC 3550, RSVP(Resource ReSerVation Protocol) RFC 2205, IGMP(Internet Group Management Protocol) RFC 2236.

Come possiamo notare dalle rappresentazioni grafiche degli header di questi protocolli di livello trasporto che incapsulano segmenti di dati di livello applicativo presenti a questo livello, i primi 32 bit di questi protocolli sono costituiti da due campi da 16 bit ciascuno. Il campo da 0 a 15 bit chiamato Source Port, identifica il numero di porta sull’host mittente associato alla connessione e da 16 a 31 bit, chiamato Destination Port, identifica il numero di porta sull’host destinatario associato alla connessione.
Questo significa che avendo a disposizione campi di 16 bit per identificare le porte è possibile avere facendo 216 al massimo 65.536 porte, numerate a partire da 0 fino a 65.535. Per mantenere una standardizzazione tra le porte più comunemente usate, lo IANA (Internet Assigned Number Autority) ha stabilito che la porta 0 è riservata, ma che è possibile utilizzarla come porta sorgente se il processo mittente non si aspetta un messaggio in risposta; le porte numerate da 1 a 1023, nominate “well-known ports”, sono usate per servizi comuni e quindi vengano assegnate d’ufficio ad alcuni particolari protocolli per servizi comuni. Ad esempio, la porta 21 è assegnata ad FTP, mentre la 22 è assegnata ad SSH: Le porte da 1024 fino a 49.151 sono “registered ports”. Le porte rimanenti dalla 49.152 fino alla 65.535 vengono utilizzate per allocazioni dinamiche o servizi particolari, ad esempio come porte temporanee, usate principalmente dai Client quando comunicano con i Server.

Infine, il livello Trasporto tratta anche la risoluzione del nome. La maggior parte degli utenti preferisce identificare i computer con un nome anche lungo ma più facilmente memorizzabile, invece che con gli indirizzi IP, mentre comunque i computer interpretano e comprendono solamente i numeri, perciò ci deve essere un modo di accoppiare i nomi con gli indirizzi numerici. I metodi di risoluzione dei nomi come il DNS (Domain Name System) RFC 1034e 1035, risolvono questo problema.

Continua a leggere, clicca sotto sulle pagine seguenti.

Articoli correlati

Il Digital Divide è ancora attualità

Cosa si intende per Digital Divide? È letteralmente una “separazione digitale”, quindi una condizione che si verifica tra chi ha accesso alle tecnologie digitali e...

Digital Transformation


 

Noleggia una Tesla per il tuo evento ICT!

Categorie