fbpx

ISO OSI Il Livello di Trasporto


10 Dic 2019 - Reti


ISO OSI Il Livello di Trasporto
ISO OSI Il Livello di Trasporto che stabilisce e mantiene la connessione. Vediamo cos’è nello specifico.


Siamo al Livello 4, o Layer 4, dello stack protocollare ISO/OSI.
Lo scopo di questo livello è fornire un canale logico di comunicazione end-to-end.


Indice

I protocolli più utilizzati


I protocolli più utilizzati in questo Livello sono il TCP e l’UDP.

Il TCP è il più complesso tra i due. Infatti esso fonisce un servizio end-to-end orientato alla connessione e al byte, vedremo più avanti nello specifico.
Il suo acronimo significa Transport Control Protocol.
L’UDP, User Datagram Protocol, fornisce un servizio a datagrammi, senza connessione. E’ più snello.


TCP


Partiamo col TCP che è un pò più complicato!

Possiamo dire che il protocollo TCP è colui che garantisce un controllo della trasmissione affidabile.
E’ un protocollo presente solo sugli host di trasmissione e ricezione e non sugli altri nodi della rete.
Sostanzialmente i primi tre livelli dell’OSI fonriscono un canale di comunicazione ma nessuno di essi è in grado di garantire efficacemente il corretto trasferimento di dati. Non sanno gestire il flusso, i ritardi, la congestione.
Per questo è nato questo protocollo. Nel 1970 per essere precisi.
Frutto degli studi di alcuni esperti del Dipartimento di Difesa statunitense.


Nello specifico



  • Siccome il Layer 3 non stabilisce una connessione permanente verso l’host, questo ottempera a questa funzione finchè essa non è chiusa.
  • Poichè i pacchetti possono seguire una strada diversa nella rete niente, a parte questo protocollo, può garantire il corretto ordine di ricezione dei pacchetti così come sono stati inviati. Questo protocollo si preoccupa di mettere nella giusta sequenza i pacchetti inviati.
  • Garantisce che tutti i pacchetti inviati vengano ricevuti.
  • Controlla il flusso! Se il mittente invia dati troppo velocemente inondando di dati un destinatario “più lento“, questi può chiedere all’host mittente di abbassare la velocità di trasmissione.
  • Riconosce uno stato di congestione della rete abbassando il traffico dati.


Connessione TCP


ISO OSI Il Livello di Trasporto tcp_icon

Questo protocollo prima ancora di trasferire i dati sul canale di comunicazione, si preoccupa di instaurare la connessione tra i due estremi.
In particolare tra le applicazioni dei due estremi. Lo fa attraverso ciò che è definito socket e cioè l’accoppiata di Indirizzo IP e Porta.


Approfondiamo un attimo questo concetto


Ogni comunicazione ha un Server, un computer che eroga servizi, e un Client, un computer che richiede un servizio.
Come fa il Client a richiedere un determinato tipo di servizio al Server?
Attraverso le Porte!
Immaginate appunto di avere l’indirizzo esatto di un edificio…mettiamo caso sia un ospedale!
Mettiamo caso che è nato un vostro nipotino! Dovete andare a trovarlo in ospedale!
L’indirizzo IP è l’indirizzo fisico dell’ospedale! Via Tal dei Tali… arrivati però all’ospedale, che fa da Server, perchè effettivamente eroga servizi, dovete accedere ad un particolare reparto!
Ecco! La porta è il reparto dell’ospedale!


Porte


Le porte sono numeri! Sono a 16 bit per un totale di 216= 65 536 porte possibili che vanno da 0 – 65 535!!!
Esiste una porta di destinazione che indentifica univocamente un dato processo e servizi, la porta sorgente che invece è assegnata casualmente.
Questo serve perchè se allo stesso server arrivano richieste sulla stessa porta da due host differenti, esso capisce dove inviare i giusti pacchetti nella giusta direzione.
Nello stesso reparto neonatale dell’ospedale mica quel giorno c’è solo vostro nipote!!!


ISO OSI Il Livello di Trasporto Socket Esempio

Tipi di porte


Esistono tre gruppi ben distinti di porte:



  • Le porte conosciute. Dette porte ben note : “Well-known-ports”. Sono assegnate dallo IANA e sono quelle inferiori a 1024 e sono utilizzate a livello di Sistema Operativo e Processi di Sistema. L’FTP che è un protocollo per trasferire i dati ad esempio utilizza la porta 21. L’SSH che è un protocollo utilizzato per aprire un Terminale su una macchina utilizza la porta 22.
    Queste porte sono standard e sono state assegnate dallo IANA!
    Vi lascio li link delle well-known-ports : https://it.wikipedia.org/wiki/Lista_di_porte_standard
  • Le porte registrate. Sostanzialmente sono porte utilizzate coem riferimento tra applicazioni.
  • Infine le porte dinamiche , liberamente utilizzabili da tutte le applicazioni utente, salvo l’occupazione contemporanea da parte di qualche altro processo.


Apertura di una Connessione TCP


Dunque come abbiamo detto grazie all’accoppiata IP:Porta il protocollo si assicura di instaurare una connessione, prima ancora di inviare i dati.
C’è da sottolineare che la comunicazione avviene in Full-Duplex cioè entrambi i terminali possono trasmettere e ricevere contemporaneamente.
Come una telefonata in cui entrambi gli utenti possono parlare e ascoltare.
In Half-Duplex o si trasmette o si riceve… come in una comunicazione Radio!
Come fa perà il protocollo TCP ad instaurare e mantenere in maniera affidabile la connessione senza perdita di dati, intasamento e tutte le cose che ci siamo detti prima?


Three-way-handshake


Ma col Three-way-handshake naturalmente!
Tradotto letteralmente, “stretta di mano in tre passaggi (sono molto cerimoniose le connessioni di rete!!!) è esattamente il metodo utilizzato da questo protocollo per assicurarsi una connessione affidabile.

Prendiamo ad esempio che un’host A intenda aprire una connessione TCP con un host B; i passi dunque da seguire quindi sono i seguenti:




  • Il Client invia un Flag SYN (Synchronize) al Server.
    Principalmente il Client chiede al Server di comunicare ed imposta ad 1 l‘Initial Sequence Number.
  • Il Server se tutto va bene riceve il SYN lo legge e notifica con un Flag SYN-ACK ( Synchronize-Acknowledgement – Sincronizzazione-Riconoscimento).
  • A questo punto il client aspetta il SYN-ACK e in quindi invia al server un pacchetto ACK (Acknowledge).
    Questo serve per confermare che la connessione è stata instaurata con successo.
    Può cominciare lo scambio di dati.


Trasmissione dati monodirezionale

Una volta finiti i convenevoli e le formalità delle strette di mano e delle presentazioni si passa allo scambio dei dati.
Infatti essa avviene attraverso una serie di pacchetti ACK. Ogni pacchetto contiene due numeri fondamentali:



  • Sequence Number (numero di sequenza): usato dal Client per indicare la posizione del primo byte ripetto al totale dei dati.
    Per esempio se devi inviare 1000byte a gruppi di 100 ognuno il primo segmento sarà inviato con un Sequence Number impostato a 0; il secondo impostato a 100 e così via.
  • Acknowledgment Number (numero di riscontro) : il Server usa questo numero per segnarsi quali pacchetti ha ricevuto. Sostanzialmente se ha appena ricevuto il pacchetto contenente i byte da 100 a 199 invia un Acknowledgment Number impostato a 200 al Client.
    E’ come se dicesse :”Mr Client mi hai mandato un pacchetto che inizia a 100 e finisce a 199 adesso mandami da 200 a 299“.


ISO OSI Il Livello di Trasporto Threeway Handshake

Facciamo un esempio pratico!
Si invia una trasmissione che contiene il messaggio “HELLO WORLD”.
Vengono inviati 3 byte alla volta!
Nella figura la lettera “H” è il 101esimo byte inviato! Significa che ci sono altri 100 byte prima di essa.
Il trasmettitore aggiunge a questo byte, il 101, un numero di riconoscimento (ACK no nello schema): 12.
E’ un numero di riscontro e conferma la ricezione di una parte del flusso di dati.
Il ricevitore risponde con un segmento Seq number 104! In sostanza scambiandosi 3 byte alla volta dice al trasmettitore che ha ricevuto correttamente i byte da 101 a 103 e adesso si aspetta che gli arrivi il 104.
E così procede fino al completamento dell’intero pacchetto!


Gestione degli errori


E qui veniamo al punto cruciale! Cioè il perchè abbiamo detto che il TCP è un protocollo affidabile.
Siccome ci sono questi numeri sequenziali il protocollo si aspetta un determinato segmento di byte alla ricezione successiva e nel caso in cui non riceve un ACK di conferma entro un limite di tempo richiederà nuovamente il segmento che si aspettavagli arrivasse.
Il ricevitore dell’esempio di prima si aspettava il 104…se non gli arriva lo richiederà!


Chiusura della connessione


La connessione TCP non è considerata una connessione bidirezionale, piuttosto è l’insieme di due connessioni monodirezionali.
Ergo, ognuna delle parti deve terminare la sua connessione, e possono esistere anche connessioni aperte a metà, in cui solo uno dei due terminali ha chiuso la connessione e non può più trasmettere, ma può (e deve) ricevere i dati dall’altro terminale.
Di conseguenza, la chiusura della connessione si può effettuare in due modi:



  • con un handshake a tre vie, in cui le due parti chiudono contemporaneamente le rispettive connessioni;
  • con un handshake a quattro vie, o meglio due handshake separati.


L’handshake a tre vie è uguale a quello usato per l’apertura della connessione, con la differenza che il flag utilizzato è il FIN invece del SYN. L’altro risponde con un FIN+ACK, il primo risponde con un ACK e la trasmissione si chiude.
Il doppio handshake a 2 vie invece viene utilizzato quando la disconnessione non è contemporanea tra i due host. In questo caso uno dei due host invia la richiesta di FIN, e attende l’ACK di risposta; l’altro terminale farà poi altrettanto, generando quindi un totale di 4 segmenti.


Connessione UDP


ISO OSI Il Livello di Trasporto UDP

A differenza del TCP questo protocollo è di tipo connectionless.
Insomma non fa tutta la manfrina di inviare e ricevere ACK. Non gestisce l’ordinamento di pacchetti e la ritrasmissione di quelli persi ed è considerato per ovvie ragioni di minore affidabilità.
Tuttavia l’affidabilità è sostituita dalla velocità di tramissione.
E’ usato infatti per le comunicazioni VoIP o per lo streaming real-time.
Immaginate di dover scaricare da un server FTP un file di testo come ad esempio l’ “HELLO WORLD” di prima… se vi arrivasse un file con scritto “HLWRD” perchè qualcosa è andato perso è praticamente inutile come file!
E’ ovvio che tutti i segmenti del pacchetto devono arrivare a destinazione dal primo all’ultimo!
In una trasmissione televisiva in streaming questo comporterebbe un notevole rallentamento.


GiustinoRomano.IT – I do IT with my Hearth

Tag: , , , , , ,


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Translate Me



Contatti


         

About Me








Sono Giustino Romano, un "IT specialist" e "Web Developer" con una forte passione per il mondo digitale. Sviluppo siti web ed offro ai miei partner servizi di assistenza informatica. Li accompagno nel mondo digitale e li supporto dai semplici problemi quotidiani di connessione fino ad articolate infrastrutture informatiche dando loro visibilità sul web e risalto alla loro identità digitale.
Clicca sul link e scopri di più




Annunci




Leggi anche...