Chat_UDP - Giorgi-Enrico-Peano-5ci/Chat-UDP GitHub Wiki

Teoria

Protocollo UDP

Lo User Datagram Protocol (UDP), nelle telecomunicazioni, è uno dei principali protocolli di rete della suite di protocolli Internet. È un protocollo di livello di trasporto a pacchetto, usato di solito in combinazione con il protocollo di livello di rete IP. L'UDP è un protocollo non orientato alla connessione. Viene utilizzato quando i dati inviati non necessitano di conferma oppure perchè la rete è ritenuta sicura. A differenza del TCP, l'UDP è un protocollo di tipo connectionless, inoltre non gestisce il riordinamento dei pacchetti né la ritrasmissione di quelli persi, ed è perciò generalmente considerato di minore affidabilità. In compenso è molto rapido (non c'è latenza per riordino e ritrasmissione) ed efficiente per le applicazioni "leggere" o time-sensitive. Ad esempio, è usato spesso per la trasmissione di informazioni audio-video real-time come nel caso delle trasmissioni Voip. Infatti, visto che le applicazioni in tempo reale richiedono spesso un bit-rate minimo di trasmissione, non vogliono ritardare eccessivamente la trasmissione dei pacchetti e possono tollerare qualche perdita di dati, il modello di servizio TCP può non essere particolarmente adatto alle loro caratteristiche. L'UDP fornisce soltanto i servizi basilari del livello di trasporto, ovvero:

  • multiplazione delle connessioni, ottenuta attraverso il meccanismo di assegnazione delle porte;
  • verifica degli errori (integrità dei dati) mediante una checksum, inserita in un campo dell'intestazione (header) del pacchetto, mentre TCP garantisce anche il trasferimento affidabile dei dati, il controllo di flusso e il controllo della congestione.

Socket

Con tale termine (che letteralmente vuol dire “presa”), in generale, si definisce una rappresentazione a livello software utilizzata per interfacciare i due terminali (endpoint) in gioco in una connessione tra due computer. In altre parole, potremmo considerare i socket come delle prese (una per ogni macchina) che siano interconnesse tra loro attraverso un ipotetico cavo in cui passi il flusso di dati che i computer si scambiano. Esistono diversi tipi di socket, qui sotto ho elencato i due principali usati per questo progetto:

  • Datagram Socket: questa tipologia di socket utilizza una connessione basata sul protocollo UDP. Ciò significa che l’invio dei dati avviene mediante il trasferimento di piccoli datagrammi, senza garantire il corretto ordine d’arrivo e la correttezza dell’informazione. Il client e il server non instaurano una vera a propria connessione, ma il client comunica direttamente con il server, quando vuole.

Cos'è un Client?

In informatica, il client (si pronuncia clàient, letteralmente cliente) indica una determinata componente hardware o software che accede alle risorse o ai servizi erogati da un’altra componente, detta server. Ad esempio, un computer che, tramite una rete informatica, richiede uno o più servizi ad un server mediante uno o più protocolli di rete, è un client hardware. Un programma di posta elettronica, tipo Outlook, Thunderbird o Eudora, che interroga un server di posta elettronica attraverso i protocolli SMTP e POP o SMTP e IMAP, è invece un esempio di client software (più precisamente, è un client di posta elettronica). In poche parole, un client può essere considerato sia un dispositivo hardware, come un computer, uno smartphone o un tablet, sia un classico software, come un browser o un programma di posta elettronica. Esistono comunque anche dei software particolari, come il Web, la stampa in rete o i database, che a loro volta sono divisi in una parte client ed in una parte server: la parte client è residente ed in esecuzione su un comune PC mentre la parte server è invece residente ed in esecuzione direttamente sul server. Esistono inoltre dei casi in cui sia il client che il server si trovano sullo stesso dispositivo.

Cos'è un Server?

In informatica, il server (si pronuncia server, letteralmente serviente o servitore) indica una componente hardware o software che fornisce i dati richiesti da una o più altre componenti, dette client. In altre parole, un server non è altro che un computer e/o un programma in grado di rispondere alle richieste fatte da altri computer e/o da altri programmi. Ad esempio, un server di posta elettronica potrebbe essere visto come una sorta di ufficio postale dove i vari utenti, ossia i client, si recano per svolgere le proprie mansioni. A differenza di un client, un server deve però essere capace di gestire tutti gli accessi, le risorse e i dati che gli vengono chiesti, per cui deve avere sia la potenza necessaria per assolvere a questi compiti, sia essere sempre in funzione, in modo tale da poter soddisfare di volta in volta le varie richieste dei client.