Protocollo TCP/IP e architettura Client/Server

Contenuti:

1.Il modello ISO/OSI

Nascita dello standard e funzione dei livelli 

Negli anni '70 la ISO (International Standard Organization) con lo scopo di uniformare la comunicazione anche tra reti progettate da case diverse, sviluppò un modello standardizzato, chiamato modello di riferimento OSI (Open System Interconnection), composto da 7 strati o livelli che rappresentano le varie fasi del processo di una trasmissione.

Tra i livelli adiacenti esistono delle interfacce che definiscono le operazioni primitive e i servizi offerti (un servizio è un'insieme di primitive, o operazioni) dal livello inferiore a quello superiore. Tra i livelli paritari del ricevitore e del trasmettitore esistono dei protocolli che sono l'insieme di regole che permettono di aprire, mantenere e chiudere la comunicazione e definiscono la struttura delle informazioni trasmesse in modo da permettere al ricevente di poterle interpretare correttamente.

  • Il livello fisico (physical layer) gestisce l'interazione tra il computer e il mezzo trasmissivo e si occupa della conversione tra bit e segnali.
  • Il livello di collegamento dati (data link layer) provvede ad organizzare i dati in blocchi di lunghezza predefinita chiamati frame e effettua i primi controlli sulla validità dei dati con appositi protocolli di verifica quali ad esempio il checksum e il bit di parità. Inoltre in questo strato sono definite le tecniche di sincronizzazione per il trasferimento dei frame di dati, cioè le modalità per evitare che un trasmettitore invii dei dati ad una velocità incompatibile alla capacità di acquisizione del ricevente oppure che in una trasmissione bidirezionale i due nodi trasmettano contemporaneamente. I protocolli che sono coinvolti nelle funzioni svolte da questo livello sono: Ethernet che si basa sullo standard CSMA/CD e si occupa del controllo di accesso al mezzo, Token Ring è necessario nelle reti a configurazioni ad anello per svolgere la stassa funzione dell'Ethernet.
  • Il livello di rete (network layer) gestisce i colloqui all'interno di una rete suddividendo i dati in pacchetti che verranno poi instradati in un determinato percorso stabilito tramite degli algoritmi che analizzano le condizioni di traffico della rete. I protocolli che sono coinvolti nelle funzioni svolte da questo livello sono: IP (che si preoccupa dell'instradamento dei dati), ICMP (si occupa della gestione degli errori ed il controllo dei messaggi).
  • Il livello di trasporto (transport layer) assicura la corretta trasmissione dei dati segmentando il flusso proveniente dal livello superiore in porzioni di dimensione prevista dal supporto utilizzato dalla rete. Inoltre fornisce un riscontro delle trasmissioni e nel caso in cui si verifichino errori provvede a richiedere una nuova trasmissione. I protocolli caratteristici sono TCP e UDP.
  • Il livello di sessione (session layer) definisce le regole per aprire e chiudere una connessione logica e per il trasferimento dei dati tramite dei protocolli di connessione e di comunicazione. Durante la fase di colloquio questo strato provvede a fissare dei punti di sincronizzazione intermedi in modo che se viene riscontrato un errore la trasmissione deve essere ripetuta solo parzialmente.
  • Il livello di presentazione (presentation layer) gestisce le conversioni tra i formati di dati, cioè definisce una codifica indipendente dalla macchina utilizzata allo scopo di creare un “linguaggio“ standard comprensibile da tutti. In questo strato avviene anche la funzione di compressione e crittografia se necessario.
  • Il livello di applicazione (application layer) è il livello più vicino all'utente e contiene i servizi di rete (ad esempio il traferimento di file o la posta elettronica) di che supportano direttamente le applicazioni. I protocolli che fanno parte di questo strato sono: SMTP (Simple Mail Transfer Protocol) si occupa del trasferimento dei messaggi di posta elettronica, HTTP si occupa dell'interconnessione con i siti web, TELNET svolge le operazioni necessarie a creare una sessione con un host remoto, FTP permette il traferimento dei dati attraverso la rete tra due host, POP permette all'host di scaricare la posta, IMAP controlla la presenza della posta; NNTP (Network News Transfer Protocol) è un protocollo utilizzato per mettere in comunicazione i News Server con i News Reader.

2.Il modello TCP/IP

Il modello TCP/IP (che prende il nome da i due protocolli principali di Internet, progettati nel 1974 da Robert E. Kahn e Vinton G. Cerf a Berkeley) è suddiviso in 4 livelli che descrivono il processo di trasmissione riassumendo i 7 del modello ISO/OSI.

  • Il livello host-rete svolge le funzioni dei livelli fisico e datalink (in pratica la scheda di rete e i suoi driver vengono considerati una cosa sola)
  • Il livello internet si occupa delle stesse funzioni del livello di rete del modello OSI.
  • Il livello di trasporto è analogo a quello del modello OSI.
  • Il livello di applicazione svolge le funzioni degli ultimi 3 livelli del modello OSI.

La struttura del modello TCP/IP prevede una rete formata da sottoreti (anche diverse) che comunicano tramite gateway, ogni macchina ha un indirizzo univoco a 32 bit rappresentato da una quaterna di numeri da 0 a 255 (ad esempio 10.0.0.32). Ogni sottorete è definita da una quaterna di numeri da 0 a 255, in cui lo 0 specifica quale parte dell'indirizzo è dinamica (ad esempio una rete definita 255.255.255.0 può avere 255 indirizzi diversi).

3.Il protocollo IP

Funzione e descrizione del datagramma 

Il protocollo IP nasce negli anni '70 grazie a una serie di ricerche fatte dalle università americane su richiesta del ministro della difesa, allo scopo di realizzare una rete in grado di trasportare diversi tipi di informazioni.

Il protocollo IP definisce una tecnica di trasmissione dei dati non orientata alla connessione e senza riscontro. Esso prevede che i dati vengano strutturati in unità chiamate datagrammi IP (di lunghezza massima 65 535 byte) che suddividono i dati in due aree: il campo dati che contiene il messaggio da inviare e l'intestazione che contiene le informazioni necessarie per instradare il pacchetto.

L'intestazione è suddivisa a sua volta in:

  • un campo di 4 bit che descrive la versione del protocollo, informazione necessaria ai gateway per effettuare se necessario delle conversioni da una sottorete all'altra;
  • un campo di 4 bit che definisce la lunghezza dell'intestazione;
  • un campo di 16 bit che definisce la lunghezza totale;
  • un campo di 8 bit che definisce le caratteristiche del servizio;
  • tre campi (identificazione, flag e offset del frammento) che permettono di suddividere il pacchetto in unità più piccole quando esso deve passare attraverso una rete che prevede frame di dimensioni minori, e di essere ricostruito all'uscita dalla rete;
  • un campo che definisce il tempo di vita del pacchetto, cioè il tempo massimo di trasferimento;
  • un campo che definisce il protocollo ad alto livello utilizzato per creare il messaggio contenuto nel campo dati;
  • un checksum per il controllo della correttezza della trasmissione sull'area intestazione;
  • un campo contenente l'indirizzo IP del trasmettitore;
  • un campo contenente l'indirizzo IP del destinatario;
  • un campo opzionale che contiene informazioni sulle operazioni che devono essere effettuate durante il percorso;
  • un campo di riempimento utilizzato per far raggiungere all'area d'intestazione una dimensione multiplo di 32 bit.

4.Il protocollo TCP

Funzioni, descrizioni della struttura dati e spiegazione della connessione 

Il protocollo TCP (che si trova all'interno del livello di trasporto) ha il compito di fornire alle applicazioni un servizio affidabile per il trasferimento dei dati attraverso la rete. Infatti questo protocollo offre un servizio orientato alla connessione, cioè tra gli applicativi dei due interlocutori viene simulato un colloquio diretto attraverso un canale che consente lo scambio interattivo delle informazioni (full-duplex).

I dati vengono presentati e ricevuti dal TCP ai protocolli superiori come un'unica sequanza di dati (byte-stream), in questo modo è il TCP ad occuparsi di segmentare i dati lasciando ai protocolli superiori solo il compito di prepararli. Anche il TCP quando crea un segmento lo suddivide in due parti: in una sono contenuti i dati passati dai protocolli superiori, nell'altra è contenuta l'intestazione.

L'intestazione è formata dai seguenti campi:

  • due campi di 16 bit contenenti il numero dell porta del trasmettitore e e il numero della porta del ricevitore;
  • un campo di 32 bit che indica la posizione del segmento all'interno dello stream tramite il numero del byte da cui inizia il segmento;
  • un campo di riscontro che contiene la posizione del segmento che il trasmettitore si aspetta di ricevere dall'interlocutore, cioè esprime il numero di segmenti ricevuti fino a quel momento correttamente;
  • un campo che definisce la lunghezza in parole a 32 bit del segmento;
  • un campo che contiene 6 flag che servono per interpretare correttamente i campi: URG se è attivo indica che il campo Urgent Pointer deve essere letto; ACK se attivo indica che il campo Acknowledgement Number deve essere letto; PSH se attivo significa che il segmento deve essere inviato immediatamente, altrimenti i dati vengono accumulati in buffer interno e vengono spediti solo quando il buffer è pieno; RST viene utilizzato per indicare che la connessione deve essere reinizializzata; SYN viene usato quando viene stabilita una sessione e indica che il ricevente dovrà leggere il campo Sequence number e sincronizzare il proprio con esso; FIN indica che il trasmettitore ha esaurito lo stream da trasmettere e rimarrà comunque connesso in stato di ricezione;
  • un campo contiene la dimensione del buffer d'ingresso ;
  • un campo contenente il grado di priorità del segmento;
  • un campo contenente le opzioni per la comunicazione;
  • un campo di 16 bit di checksum che stabilisce la correttezza delle informazioni;
  • un campo di riempimento utilizzato per far raggiungere all'area d'intestazione una dimensione multiplo di 32 bit.

La connessione in questo sistema si svolge secondo i seguenti passaggi:

  • il client e il server inizialmente sono in stato di closed;
  • il server crea un socket e entra in stato di listen tramite una procedura chiamata apertura passiva;
  • il client segue invece una procedura chiamata apertura attiva creando anch'esso un socket, e poi invia un segmento TCP con il flag SYN settato e il numero di sequenza a 0; entra in stato di SYN Sent;
  • il server risponde settando il flag SYN_ACK (cioè lo informa di aver ricevuto la richiesta), il numero di sequenza a 100, la dimensione della finestra uguale a alla dimensione del buffer in ingresso, l'ACK_NUM a 1 (cioè si aspetta che il prossimo segmento abbia in numero di sequenza a 1) ed entra in stato SYN Received;
  • il client riceve il segmento dal server e per completare la procedura di apertura della connessione (three way handshake) spedisce un segmento con il flag ACK settato, viene impostata la dimensione del buffer d'ingresso, il riscontro del numero di sequenza viene impostato a 101; il client entra in stato di connessione;
  • il server riceve il segmento ed entra anch'esso in stato di connessione, ora inizia la fase di trasferimento dati;
  • poniamo che il client debba trasmettere uno stream di 1024 bytes; questa connessione TCP limita la lunghezza dei segmenti a 512 bytes quindi lo stream verra separato in due segmenti entrambi di dimensione di 512 bytes; il primo segmento avrà numero di sequenza uguale a 1 mentre il secondo avrà numero di sequenza uguale a 513; il client quindi invia entrambi i segmenti;
  • il server riceve entrambi i pacchetti e dopo averli assemblati vengono passati alle applacazioni; risponde con un segmento contenente ACK (quindi notificando l'arrivi di due segmenti) impostando il campo di riscontro a 1025 e con un altro segmento contenete dati per il client;
  • entrambi i segmenti vengono ricevuti dal client che passa alle applicazioni i dati inviatigli dal server e grazie all'ACK si accerta dell'avvenuta consegna dei suoi 2 segmenti; risponde con un ACK per notificare l'arrivo dei dati;
  • per rilasciare la connessione il client invia un segmento contenente il flag FIN settato ed entra in stato di FIN Wait 1;
  • il server lo riceve e invia un ACK entrando in close wait;
  • il client ricevuto l'ACK entra in FIN Wait 2, che è caratterizzato dalla chiusura della connessione dal client al server;
  • il server chiude la connessione inviando un FIN e mettendosi in stato di Last ACK;
  • il client riceve il FIN e invia un ACK attivando un timer al termine del quale potrà terminare la comunicazione; questo tempo di attesa è neccesario per aspettare che, in caso l'ultimo ACK vada perso, il server rispedisca FIN;
  • quando il server riceve ACK chiude la comunicazione.

5.L'architettura Client/Server

Secondo Vaughn, l’architettura C/S è un approccio concettuale che consiste nella scomposizione del sistema operativo in un certo numero di funzioni di servizio eseguite su una o più piattaforme hardware che svolgono un compito ben definito in collegamento con i servizi in comune forniti dalle funzioni del server.

Più semplicemente si tratta di un sistema costituito da due o più computer, uno dei quali assume il ruolo di server e può di supervisionare le operazioni degli altri computer, chiamati client.

Un programma sviluppato per un'architettura di questo tipo è diviso in due parti, in modo da poter essere ottimizzato per le diverse funzioni che devono svolgere il server e il client. E' logico quindi che anche le caratteristiche hardware devono essere adatte ai compiti che devono svolgere le diverse postazioni.

Poniamo il caso che in una rete ci sia un server contenente il database in cui i client devono prelevare e inserire informazioni. Il server quindi avrà bisogno di molto spazio di memoria e sarà ottimizzato in modo da poter accedere velocemente ai dati richiesti, il client invece sarà ottimizzato per quanto riguarda l'elaborazione e la grafica.

Bisogna anche considerare che ogni client può avere un diverso tipo applicazione (una grafica diversa, una lingua diversa, etc..) senza però che il server se ne accorga perchè essi comunicano tramite dei protocolli.

6.Ringraziamenti

Un ringraziamento particolare a http://openskills.info per averci fornito questo articolo.



Ultimo aggiorn.:
15 Luglio 2003
Sommario:  Breve introduzione al modello ISO/OSI, al protocollo TCP/IP e all'architettura Client/Server.
- 2002 Gentoo.it - Domande, commenti e/o correzioni? Email gentoo-dev@gentoo.it.