Salta al contenuto
Note per Studenti Posta elettronica - SMTP, POP3 e IMAP

Posta elettronica - SMTP, POP3 e IMAP

In questa pagina 7

Il problema e l'architettura

La posta elettronica (e-mail) permette agli utenti di scambiarsi messaggi. È diversa da HTTP (Livello applicazione - HTTPIl livello applicazione è il più alto della pila: offre servizi all'utente con una connessione logica tra le due applicazioni e riceve servizi solo dal trasporto (DNS, HTTP, e-mail, FTP). Il Web (WWW, nato al CERN nel 1989) è un servizio client-server distribuito di pagine collegate da ipertesti; ogni pagina ha un URL protocollo://host:porta/percorso. HTTP: il client manda una richiesta, il server una risposta, su TCP (server sulla porta 80, client su una porta temporanea); senza stato. Messaggi di testo (riga di richiesta o di stato, intestazioni, riga vuota, corpo), metodi GET, POST, HEAD, PUT, DELETE, codici di stato 2xx-5xx. Una pagina con N oggetti incorporati richiede 2(N+1) RTT con connessioni non persistenti e (N+2) RTT con connessione persistente (trascurando la trasmissione). I cookie danno memoria al protocollo: Set-Cookie nella risposta, Cookie nelle richieste, file nel browser e base di dati nel sito. Un proxy (web cache) tiene le copie delle risposte recenti: meno carico sul server, meno traffico, meno ritardo.Livello applicazione - HTTP →): in HTTP il server è sempre attivo e aspetta le richieste di un client; quando ne arriva una, offre il servizio. Nella posta la situazione è diversa:

  • l'e-mail è una transazione a senso unico: quando A scrive a B può aspettarsi una risposta, ma non è un obbligo; se B risponde, è un'altra transazione a senso unico;
  • non è né possibile né logico che B faccia girare un programma server in attesa che qualcuno gli scriva.

L'idea client/server va quindi realizzata in un altro modo, con dei computer intermedi (server): gli utenti fanno partire i programmi client quando serve, e i server intermedi applicano il paradigma client/server.

Definizione (scenario tipico). Servono due UA (User Agent) sugli host locali; due programmi client/server di spinta (push), gli MTA (Message Transfer Agent); un programma client/server di tiro (pull), il MAA (Message Access Agent).

 UA di Mario                                                                  UA di Luisa
    |  SMTP    server del mittente  ---------SMTP-------->  server del         |
    |-------->  (es. Gmail)            (MTA - MTA)           destinatario  <----|
    |  (MTA)                                                 (es. Yahoo)  POP3 o IMAP4
                                                                              (MAA)

Tre usi del paradigma client/server, con tre protocolli:

  1. dal mittente al suo server: MTA, protocollo SMTP;
  2. dal server del mittente al server del destinatario: ancora MTA, SMTP;
  3. dal server del destinatario al destinatario: MAA, POP3 oppure IMAP4 (oppure HTTP, nel caso del webmail).

Il motivo del punto 3: SMTP è un protocollo di spinta, chi ha un messaggio lo manda a un server che lo accetta. Il destinatario invece deve tirare (scaricare) quando si collega. Il trasporto è TCP (TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →); il server di destinazione si trova con il DNS (record MX, Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →).

User Agent. Lo UA è il programma che rende più facile spedire e ricevere: scrive, legge, risponde, inoltra i messaggi e gestisce le caselle locali sul computer dell'utente. Ce ne sono di due tipi: a comandi (dei primi tempi della posta: mail, pine, elm) e grafici, con icone, barre dei menu e finestre (Eudora, Outlook).

Il messaggio

Un messaggio è testo ASCII: un'intestazione (righe Nome: valore: From, To, Date, Subject), una riga vuota e il corpo.

From: Behrouz Forouzan
To: William Shane
Date: 1/10/2011
Subject: Network

Dear Mr. Shane,
We want to inform you that ...

Definizione (busta e contenuto). Le righe From: e To: dentro il messaggio sono il contenuto, quello che l'utente vede. Gli indirizzi che i server usano per consegnare sono quelli del dialogo SMTP, MAIL FROM e RCPT TO (la busta, envelope): possono essere diversi.

Esempio. Con la copia nascosta (Bcc) il server riceve un RCPT TO in più, ma l'indirizzo non compare nel contenuto: gli altri destinatari non lo vedono.

SMTP

SMTP (Simple Mail Transfer Protocol) definisce come comandi e risposte si scambiano tra un MTA client e un MTA server. Ogni comando o risposta termina con un marcatore di fine riga di due caratteri: ritorno a capo e nuova riga (CR LF).

  • Comandi (client →\to server): HELO (il client si presenta con il suo nome di dominio), MAIL FROM (mittente del messaggio), RCPT TO (destinatario), DATA (corpo del messaggio), QUIT.
  • Risposte (server →\to client): un codice a tre cifre, eventualmente seguito da testo. I principali: 220 servizio pronto, 221 servizio in chiusura, 250 comando completato, 354 inizia l'immissione della posta, 421 servizio non disponibile.

Proprietà (le tre fasi del trasferimento). Un messaggio si trasferisce in tre fasi: apertura della connessione, trasferimento della posta, chiusura della connessione.

1. Apertura. Dopo che il client ha aperto una connessione TCP verso la porta 25 (porta nota) del server:

  1. il server manda il codice 220 (servizio pronto) per dire che può ricevere posta; se non è pronto, manda 421 (servizio non disponibile);
  2. il client manda HELO, presentandosi con il suo nome di dominio: serve al server per sapere il dominio del client;
  3. il server risponde 250 (comando completato) o un altro codice a seconda del caso.

2. Trasferimento. Stabilita la connessione, si può scambiare un messaggio tra un mittente e uno o più destinatari:

  1. il client manda MAIL FROM, con l'indirizzo del mittente (casella e dominio): serve al server per avere l'indirizzo a cui restituire errori e rapporti;
  2. il server risponde 250 (o altro codice appropriato);
  3. il client manda RCPT TO, con l'indirizzo del destinatario;
  4. il server risponde 250 o altro;
  5. il client manda DATA per iniziare il trasferimento del messaggio;
  6. il server risponde 354 (inizia l'immissione della posta) o altro;
  7. il client manda il contenuto del messaggio, riga per riga, ognuna terminata da CR LF; il messaggio finisce con una riga che contiene solo un punto;
  8. il server risponde 250 (OK) o altro.

3. Chiusura. Trasferito il messaggio, il client chiude la connessione in due passi: manda QUIT, il server risponde 221 (o altro).

Esempio (la sequenza delle slide). S: server, C: client; il nome some.com è quello dell'host del client.

S: 220 service ready
C: HELO some.com
S: 250 OK
C: MAIL FROM: forouzan@some.com
S: 250 OK
C: RCPT TO: william@aNetwork.com
S: 250 OK
C: DATA
S: 354 start mail input
C: From: Behrouz Forouzan
C: To: William Shane
C: Date: 1/10/2011
C: Subject: Network
C:
C: Dear Mr. Shane,
C: We want to inform you that ...
C: .
S: 250 OK
C: QUIT
S: 221 service closed

Nella figura delle slide lo scambio è diviso così: 220, HELO, 250 sono l'apertura; MAIL FROM e RCPT TO con le loro risposte sono la busta (envelope); dopo DATA e 354 vengono l'intestazione (From, To, Date, Subject), la riga vuota e il corpo, chiuso dal punto; QUIT e 221 sono la chiusura. Le coppie comando-risposta sono 6 (HELO, MAIL FROM, RCPT TO, DATA, il testo con il ., QUIT), più il 220 iniziale che il server manda da solo.

Quanto dura la sessione? Ogni coppia comando-risposta costa un RTT (Analisi delle prestazioni di reteLe prestazioni di una rete si misurano con tre famiglie di metriche: traffico (bitrate $R_0$ massimo del collegamento, throughput $S\le R_0$ dati consegnati con successo, goodput al livello applicazione), ritardo (end-to-end $d_{tot}=d_{proc}+d_{queue}+d_{trans}+d_{prop}$ con $d_{trans}=L/R$ e $d_{prop}=d/v$; jitter; RTT) e capacità del tubo (BDP $=R\cdot$ ritardo, bit che riempiono il collegamento), più l'affidabilità (PER, PDR, PLR). Il throughput di un percorso è quello del collegamento collo di bottiglia, $\min$ dei bitrate, ricordando che i collegamenti condivisi dividono la capacità.Analisi delle prestazioni di rete →), perché SMTP aspetta la risposta prima di mandare il comando successivo. Contando dall'inizio: il client riceve il SYN+ACK dopo 11 RTT e manda l'ACK; il server lo riceve dopo 12\tfrac12 RTT e manda il 220, che arriva dopo altri 12\tfrac12 RTT: in totale 22 RTT fino al saluto; poi 66 coppie. Trascurando i tempi di trasmissione (messaggi di poche decine di byte) servono circa 2+6=82+6=8 RTT: con RTT=50\text{RTT}=50 ms sono 8⋅50=4008\cdot50=400 ms per un messaggio. È uno dei motivi per cui i server tengono la connessione aperta e spediscono più messaggi di seguito (altre MAIL FROM/RCPT TO/DATA senza ripetere l'apertura).

POP3

POP3 (Post Office Protocol, version 3) è semplice ma limitato. L'accesso alla posta parte dal client, quando deve scaricare la sua posta dalla casella sul server di posta.

  1. Il client apre una connessione verso il server sulla porta TCP 110.
  2. Manda nome utente e password per accedere alla casella.
  3. Può poi elencare (LIST) e scaricare (RETR) i messaggi uno per uno.

Comandi usati nel dialogo: USER, PASS, STAT (numero e dimensione totale), LIST, RETR n, DELE n, QUIT; il server risponde +OK oppure -ERR.

S: +OK POP3 server ready
C: USER luisa
S: +OK
C: PASS ********
S: +OK maildrop has 2 messages (320 octets)
C: LIST
S: +OK 2 messages
S: 1 120
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S: (qui il messaggio 1)
S: .
C: QUIT
S: +OK POP3 server signing off

(STAT e LIST dicono che ci sono 2 messaggi di 120+200=320120+200=320 byte.) La modalità tradizionale è scarica e cancella: i messaggi passano sul computer dell'utente e spariscono dal server.

IMAP4

POP3 ha parecchi limiti:

  • non permette all'utente di organizzare la posta sul server;
  • l'utente non può avere cartelle diverse sul server;
  • non permette di controllare in parte il contenuto di un messaggio prima di scaricarlo.

IMAP4 (Internet Mail Access Protocol, version 4) aggiunge queste funzioni:

  • controllare l'intestazione di un messaggio prima di scaricarlo;
  • cercare una stringa di caratteri nel contenuto dei messaggi prima di scaricarli;
  • scaricare un messaggio solo in parte;
  • creare, cancellare e rinominare caselle sul server;
  • creare una gerarchia di caselle (cartelle) per archiviare la posta.

Proprietà (POP3 contro IMAP4).

POP3 IMAP4
dove stanno i messaggi sul computer dell'utente, dopo lo scaricamento sul server
cartelle sul server no sì, con gerarchia
controllo prima del download no intestazione, ricerca, download parziale
porta TCP 110 143

Esempio. Con una casella letta da PC e da telefono, IMAP4 mostra su entrambi gli stessi messaggi e le stesse cartelle; con POP3 e scarica-e-cancella ciascun dispositivo avrebbe solo i messaggi che ha scaricato.

MIME

La posta elettronica, così com'è, può spedire solo messaggi in formato ASCII a 7 bit (NVT):

  • si può usare solo per lingue con alfabeto latino;
  • non si possono spedire file binari come immagini e video.

MIME (Multipurpose Internet Mail Extensions) è un protocollo supplementare che permette di spedire per posta dati non ASCII: fa da traduttore verso il formato ASCII. Testo, simboli, immagini, video e audio diventano spedibili. Aggiunge intestazioni come MIME-Version: 1.0, Content-Type (per esempio image/png) e Content-Transfer-Encoding (come i byte sono scritti nel messaggio).

Definizione (base64). Prende i dati 3 byte alla volta (24 bit), li divide in 4 gruppi da 6 bit e scrive ciascun gruppo (valore da 0 a 63) con un carattere dell'alfabeto A-Z a-z 0-9 + /.

Perché 6 bit e perché 3 byte: con 6 bit si hanno 26=642^6=64 valori, e l'alfabeto ha 26+26+10+2=6426+26+10+2=64 caratteri stampabili in ASCII a 7 bit, che passano senza problemi nella posta; 33 byte sono 3⋅8=243\cdot8=24 bit e 44 gruppi da 6 sono 4⋅6=244\cdot6=24 bit: 2424 è il più piccolo numero di bit multiplo sia di 88 sia di 66 (Sistemi di numerazione posizionaliNotazione posizionale in base b; conversioni tra base 10, 2, 8 e 16 per interi (divisioni successive) e per parti frazionarie (moltiplicazioni successive); numeri periodici in binario.Sistemi di numerazione posizionali →). Quindi ogni 33 byte diventano esattamente 44 caratteri e il corpo cresce di 43\frac43 (+33%+33\%). Per leggere i gruppi: ogni lettera è un valore 00-6363 (A=0,…,Z=25, a=26,…,z=51, 0=52,…,9=61, +=62, /=63\texttt{A}=0,\dots,\texttt{Z}=25,\ \texttt{a}=26,\dots,\texttt{z}=51,\ \texttt{0}=52,\dots,\texttt{9}=61,\ +=62,\ /=63). Se il numero di byte non è multiplo di 3 si completa con uno o due caratteri =. In MIME le righe sono lunghe al più 76 caratteri. L'uscita è lunga 4⌈n/3⌉4\lceil n/3\rceil caratteri per nn byte, circa 43\frac43 dell'originale.

Esempio. Man = byte 01001101 01100001 01101110 (i codici ASCII di M, a, n sono 77,97,11077,97,110, Codici binari - BCD, ASCII, Unicode, parità e GrayUn codice binario a $n$ bit distingue $2^n$ elementi. BCD: una cifra decimale ogni 4 bit (1010–1111 non usati; 10 richiede 8 bit, non è il binario del numero). ASCII: 7 bit per 128 caratteri, la cifra ASCII è 011 seguito dal BCD. Unicode/UTF-8: da 1 a 4 byte, compatibile con ASCII. Bit di parità: rileva errori su un numero dispari di bit. Distanza di Hamming = numero di bit diversi. Codice Gray: numeri consecutivi differiscono di un solo bit (sensori di posizione); si costruisce per riflessione o con $g_i=b_i\oplus b_{i+1}$.Codici binari - BCD, ASCII, Unicode, parità e Gray →) →\to si riscrivono i 24 bit di fila, 010011010110000101101110, e si tagliano ogni 6: 010011 010110 000101 101110 =19,22,5,46=19,22,5,46 (0100112=16+2+1=19010011_2=16+2+1=19) →\to lettere T,W,F,u\texttt{T},\texttt{W},\texttt{F},\texttt{u} == TWFu. Ma (2 byte) →\to TWE=, M →\to TQ==, Ciao →\to Q2lhbw==. Passaggi del riempimento: Ma sono 1616 bit, che si dividono in 22 gruppi da 6 (1212 bit) più 44 bit restanti, completati con due zeri per fare un terzo gruppo da 6 (010011 010110 0001 + 00 =19,22,4→TWE=19,22,4\to\texttt{TWE}); mancando un byte su tre si aggiunge un =. M sono 88 bit: un gruppo da 6 e uno da 2 bit completato con quattro zeri (010011 010000 =19,16→TQ=19,16\to\texttt{TQ}), mancano due byte su tre, quindi ==. Ciao sono 44 byte: Cia →\to Q2lh, e il byte o solo →\to bw==. Un allegato di 3⋅10242=3 145 7283\cdot1024^2=3\,145\,728 byte diventa 4⋅3 145 728/3=4 194 3044\cdot3\,145\,728/3=4\,194\,304 caratteri (ogni 33 byte →4\to4 caratteri); poi si va a capo ogni 7676 caratteri: ⌈4 194 304/76⌉=⌈55 188,2⌉=55 189\lceil4\,194\,304/76\rceil=\lceil55\,188{,}2\rceil=55\,189 righe, ciascuna con un CRLF di 22 byte, quindi 4 194 304+2⋅55 189=4 304 6824\,194\,304+2\cdot55\,189=4\,304\,682 byte, e 4 304 682/3 145 728≈4\,304\,682/3\,145\,728\approx ×1,37\times1{,}37 (il 33%33\% di base64 più il 2,6%2{,}6\% degli a capo).

Un'altra codifica è la quoted-printable, adatta a un testo quasi tutto ASCII: i caratteri non ASCII sono scritti come = seguito dai due caratteri esadecimali del byte (in UTF-8 è sono i byte C3 A8, quindi =C3=A8).

Errori comuni

Versione ripasso

POP3 IMAP4
dove stanno i messaggi sul computer dell'utente, dopo lo scaricamento sul server
cartelle sul server no sì, con gerarchia
controllo prima del download no intestazione, ricerca, download parziale
porta TCP 110 143

Lezioni in cui compare

Teoria collegata