La prima cosa che ci serve per poter comunicare è concordare il modo per farlo:
Un protocollo è un insieme di regole (sia di tipo sintattico che di tipo semantico) che determinano come due o più entità si scambiano informazioni tra loro.Nel nostro contesto utilizziamo dei protocolli per scambiarci informazioni tra programmi in un ambiente di rete. Sono stati definiti tantissimi protocolli per svolgere le operazioni più diverse, ad esempio: per trasferire dei file possiamo usare SFTP, SSH per terminali remoti sicuri, HTTP per trasferire ipertesti, SMTP per inviare la posta e IMAP e POP3 per leggerla.
Nel protocollo oltre alle regole per comunicare viene specificato anche quale (o quali) formati vanno usati per rappresentare le informazioni che vogliamo scambiare. Ci occuperemo dei protocolli più diffusi che si usano in ambito informatico partendo proprio da come si identifica un formato dei dati presenti in un file (che sia un file o un pacchetto di dati inviati in rete non cambia nulla) utilizzando il suo tipo mime.
Un media type conosciuto anche come "Multipurpose Internet Mail Extensions" o "tipo mime" indica la natura e il formato di un file. Nella sua forma più semplice si scrivetipo/sottotipo
.
Degli esempi chiarificano la situazione: i file che contengono pagine
HTML sono di tipo text/html
sarebbe a dire appartengono al gruppo "text"
e in particolare sono "html", le immagini jpeg sono di tipo image/jpeg
.
Torniamo però allo scambio dei dati:
uno dei primi formati usati per lo scambio dei dati
è il formato CSV (text/csv): questo formato è molto comodo perché è un formato di testo e
è adatto a rappresentare i valori presenti in una tabella.
I dati presenti in una singola cella della tabella vengono rappresentati in formato testo,
ogni cella è separata dalla successiva da una virgola e ogni riga termina con
un "a capo". Questo formato è a tutt'oggi molto usato,
possiamo facilmente avere un esempio per una agenda:
Nome,Cognome,Telefono Mario,Rossi,349771188 Luigi,Bianchi,374776749
È anche possibile che un protocollo utilizzi dei file binari
(application/octet-stream
), formati in cui si definisce byte per
byte cosa deve contere un file (o un blocco di byte più genericamente),
erano abbastanza comuni formati come questo:
- ogni informazione occupa 30 byte
- i byte dallo 0 al 9 sono il nome con spazi in fondo se necessario
- i byte dal 10 al 22 sono il cognome cpn spazi in fondo se necessario
- i byte dal 23 al 25 rappresentano il colore del cartellino in rgb
- i byte dal 26 al 29 lo stipendio come numero intero senza segno
Vediamo ad esempio cosa conterrebbe un file in cui si vogliono registrare i dati di due dipendenti: Mario Rossi che hai il badge rosso e guadagna 1500€, Chiara Esposito che ha il badge giallo e guadagna 1792€.
byte 0-15 4d 61 72 69 6f 20 20 20 20 20 52 6f 73 73 69 20 byte 16-31 20 20 20 20 20 20 20 ff 00 00 00 00 05 dc 43 68 byte 32-47 69 61 72 61 20 20 20 20 45 73 70 6f 73 69 74 6f byte 48-59 20 20 20 20 20 ff ff 00 00 00 07 00
Ovviamente un file di questo genere non può essere visualizzato come testo perché alcune informazioni sono in formato binario.
Per essere precisi nella specificadell'esempio sopra mancano delle informazioni: quali?
La codifica del testo potrebbe essere UTF-8 ma va specificato Quanti elementi si possono registrare non necessario, finché c'è spazio si inseriscono La codifica dei numeri ad esempio se con complemento a due o menoGuardando questi due esempi possiamo trovare due punti deboli:
nel text/csv se ho una virgola nel nome o nel cognome sono nei guai...
nel application/octet-stream se ho un cognome più lungo del previsto
non posso scriverlo per intero.
Il primo problema è falso in realtà:
il formato csv è un pochino più complesso e non ha problemi con le virgole
(ma ne ha con i dati strutturati!)
ma il secondo problema purtroppo è un problema reale.