Curs 3 - Posta electronica si World Wide Web
Posta electronica
Posta electronica este o aplicatie in retea destinata livrarii de mesaje. In
principal, mesajele sunt generate si destinate utilizatorilor umani;
ocazional expeditorul sau destinatarul este un sistem automat.
Expeditorul si destinatarul sunt identificati prin adresa
electronica, numita si casuta postala (mailbox address).
Scenariul de folosire a postei electronice este urmatorul:
- Expeditorul scrie si trimite mesajul, folosind un program numit
generic mail user agent (MUA)
- MUA contacteaza un server numit generic mail
transfer agent(MTA). Pe majoritatea sistemelor de tip Unix, MTA-ul
ruleaza pe masina locala (deci pe fiecare sistem Unix).
- MTA-ul initial contacteaza eventual alt MTA, si
mesajul se transmite din aproape in aproape pana la calculatorul pe care
este stocata efectiv "casuta postala" a destinatarului
- aici este invocat un asa-numit local delivery agent (tot un
MTA) care scrie efectiv in "casuta postala"
- Destinatarul isi consulta casuta postala folosind tot un program de
tip MUA. Aceasta consultare se face fie direct, ca fisier (daca
user agent-ul ruleaza pe aceeasi masina cu cea care stocheaza casuta
postala), fie prin retea prin intermediul unui protocol de citire a postei
electronice.
Structura mesajelor
Vezi RFC-822
Un mesaj este format dintr-un antet si un continut. Antetul cuprinde campuri
de forma nume:valoare, aflate pe linii distincte. Antetul este
separat de corpul mesajului printr-o linie goala. Campurile din antet ofera,
intr-un format standard, informatii pentru transmiterea mesajelor.
Intreg mesajul trebuie sa fie text ASCII (prin urmare nu pot fi trimisi
octeti care reprezinta coduri de control).
Antetul cuprinde mai multe campuri, din care cele mai importante sunt
urmatoarele:
- Destinatarul mesajului:
- To destinatarul sau destinatarii primari ai mesajului
- Cc destinatari secundari ai mesajului. Aici sunt trecute
persoanele care trebuie sa fie informate de trimiterea si continutul
mesajului, fara a fi efectiv destinatari ai mesajului. Spre exemplu, daca
lucrati la o firma si trimiteti un mesaj unui partener de afaceri, veti pune
adresa partenerului in campul To, si adresa sefului sau colaboratorilor
in campul Cc.
- Bcc persoane care trebuie sa primeasca o copie a mesajului,
fara ca adresele lor sa fie divulgate destinatarilor primari si secundari
- Sursa mesajului:
- From indica adresa expeditorului mesajului
- Sender indica adresa persoanei sau sistemului automat care a
trimis efectiv mesajul. In mod normal este omisa, fiind identica cu cea
specificata in campul From.
- Reply-to indica adresa la care trebuie trimise raspunsurile
la mesaj. Un exemplu clasic de folosire este o lista de discutii. Campul
From contine adresa expeditorului mesajului; campul Reply-to
va contine atunci adresa listei, pentru ca raspunsurile sa fie trimise din
nou la intreaga lista.
- Resent-From, Resent-Sender, Resent-Reply-to
sunt echivalentele campurilor From, Sender si Reply-to
daca un mesaj este forwardat.
- Identificarea mesajului
- Message-ID este un identificator unic pentru mesaj. Nu e
permis ca doua mesaje cu continut diferit sa aiba identificator identic.
- Resent-Message-ID identifica unic retransmiterea
- In-Reply-to identifica mesajul la care se raspunde
- Date, Resent-Date contin data trimiterii, respectiv
retrimiterii, mesajului
- Subject contine un scurt rezumat al mesajului. Este text
neformatat, aflat integral la dispozitia expeditorului. Utilizatorii ar
trebui sa puna aici un text suficient de descriptiv. De exemplu, daca
scrieti administratorului un
subject cum ar fi Help sau Intrebare
este complet inutil; ceva de genul Help: configurare sendmail este
mult mai util.
- Stampilele de livrare: Pentru a identifica probleme legate de livrarea
mesajului, fiecare MTA plaseaza un camp Received in
fata mesajului (astfel incat campurile Received se gasesc intotdeauna
in ordine inver cronologica). Acest camp contine identificarea agentului
receptor, agentului expeditor, data, destinatarul solicitat, si alte
informatii. In plus, MTA-ul final adauga un camp Return-path care
contine adresa la care ar fi returnat mesajul in caz de probleme. Valoarea
acestui camp este un rezumat al campurilor Received
Extensiile MIME
MIME vine de la Multipurpose Internet Mail Extension si este un standard
pentru extinderea mesajelor electronice in modul urmator:
- transmiterea mesajelor codate altfel decat ASCII curat
- atasarea de fisiere text sau binare
- mesaje formate din mai multe parti
- campuri antet cu caractere altele decat ASCII curat
Mecanismele de baza:
- Mesajul cuprinde in antet un camp Mime-version
- Mesajul cuprinde in antet un camp Content-type care
descrie tipul continutului. De exemplu, pentru text curat, valoarea va fi
text/plain. Tipul poate fi multipart, caz in care e vorba de
mai multe componente; subtipul poate fi:
- mixed, folosit pentru atasarea unui fisier; prima parte este
mesajul propriu-zis, urmatoarele sunt atasamentele
- alternative, folosit pentru a trimite doua forme echivalente
ca si continut dar cu prezentari diferite, ale aceluiasi
mesaj (de exemplu text curat si html). MUA va afisa doar una dintre ele, in
functie de capabilitatile sale
- digest, daca mesajul este compus din mai multe mesaje
individuale
In toate cazurile de mesaj compus, valoarea campului contine si un "sir de
delimitare" care va delimita in corpul mesajului partile
Partile sunt structurate ca si mesajul complet, un antet plus o linie vida
plus un continut. Antetul contine campuri MIME. In particular, e posibil ca
o parte sa fie tot de tip multipart, divizandu-se recursiv
- Mesajul, si fiecare parte a unui multipart, contine un camp
Content-Transfer-Encoding care arata cum a fost codificat
continutul pentru a putea fi transferat - adica pentru ca in urma
codificarii sa constea doar din caractere ASCII imprimabile. Codarile
posibile sunt:
- 7bit (implicit), nu e facuta nici o codificare suplimentara
- quoted-printable: caracterele ASCII imprimabile pot fi
transmise direct, iar celelalte se codeaza sub forma =XX,
unde XX reprezinta valoarea caracterului, scrisa in baza 16. Se
foloseste pentru texte ce cuprind cateva caractere speciale (indeosebi texte
folosind caractere cu diacritice, de exemplu in ISO-8859-1)
- base64: fiecare grup de trei octeti consecutivi din intrare
sunt grupati intr-un sir de 24 de biti, primul bit fiind bitul cel mai
semnificativ din primul octet. Apoi, sirul este impartit in 4 grupe de cate
6 biti, iar fiecare grup este codat printr-un caracter din multimea formata
din: literele mari, literele mici, cifrele, '+', '/' (considerate in ordinea
enumerata). Astfel, de exemplu, sirul initial (scris aici in hexa)
3A 4D 55 se transforma in sirul de biti:00111010-01001101-01010101
care se regrupeaza 001110-100100-110101-010101 si se codeaza in final
Ok1V. Daca numarul de octeti initiali nu e multiplu de 3, ultimul
sir de biti se completeaza la 24 de biti adaugand zerouri la final, dupa
care caracterele 'A' rezultate din codarea exclusiv a zerourilor astfel
adaugate se inlocuiesc cu '='.
Livrarea mesajelor in Internet
Vezi RFC-821
Pentru transferul mesajelor intre MTA-uri, precum si intre MUA-ul initial si
primul MTA, se foloseste protocolul SMTP (Simple Mail Transfer Protocol).
Acest protocol a fost creat pentru a putea functiona peste infrastructuri
variate, nu neaparat conexiuni TCP/IP: de exemplu, prin linie telefonica
obisnuita. Singurul lucru cerut este un canal bidirectional pe care sa se
poata transmite caractere de 7 biti (aceasta din urma cerinta face ca
mesajele RFC-822 sa fie restrictionate la texte ASCII).
Protocolul este de tip cerere-raspuns, unul din parteneri actionand ca si
client si emitand cereri, celalalt actionand ca server. Cererile sunt
cuvinte, case-insensitive, cate o cerere pe rand. Raspunsurile sunt tot de
exact un rand, incep cu un cod numeric si continua cu un text explicativ.
Codul este suficient pentru client pentru a determina rezultatul cererii;
explicatia textuala va fi inclusa in eventuale mesaje de diagnostic.
Pentru controlul sesiunii exista urmatoarele comenzi:
- HELO: are ca argument numele masinii client; este un fel de
"prezentare". Comanda este obligatoriu prima comanda data de client.
Masina server se "prezinta" inainte de aceasta comanda, imadiat dupa
deschiderea conexiunii.
- QUIT: cere inchiderea conexiunii
Comunicatia propriu-zisa este o secventa de tranzactii, pentru cate un
mesaj. Tranzactia consta din: o comanda MAIL, specificand originea
mailului, una sau mai multe comenzi RCPT specificand destinatarii,
o comanda DATA anuntand inceperea transmiterii corpului mesajului, si
in final corpul mesajului terminat cu un punct singur pe o linie.
De notat urmatoarele:
- In tot cursul protocolului, clientul, dupa ce a dat o comanda,
trebuie sa astepte raspunsul, si abia apoi poate da urmatoarea comanda
- Protocolul permite trimiterea unui mesaj catre mai multi destinatari
simultan - trebuie doar sa dea mai multe comenzi RCPT
- Serverul raspunde individual la fiecare comanda RCPT, putand
anunta ca anumiti destinatari vor fi serviti si altii nu
- Serverul nu se foloseste de campurile From sau To din
mesaj, ci de argumentele comenzilor MAIL FROM: si RCPT TO: .
Campurile From si To trebuie insa sa faca parte din mesaj.
Mecanismul acesta permite redirectarea mesajelor cu pastrarea informatiilor
privitoare la destinatarul original.
- Tranzactia poate fi abandonata cu comanda RSET
- Protocolul nu are nici un fel de autentificare, control al
integritatii mesajelor sau asigurarea confidentialitatii
In sistemele UNIX, MTA-urile cele mai folosite sunt: sendmail,
qmail, postfix
Livrarea locala a mesajelor
MTA-ul de pe masina destinatie poate fi in general configurat sa faca
anumite actiuni speciale. Configurarea respectiva poate fi facuta de catre
administrator sau de catre utilizatorul destinatar. Aceste prelucrari locale
pot consta in:
- selectia mesajelor dupa diferite criterii, in special dupa adresa
sursa, subiect, dimensiune, etc.
- redirectarea mesajului catre o alta casuta postala (in UNIX aceasta se
face prin specificarea casutei postale in fisierul .forward din
directorul personal al destinatarului)
- stocarea mesajului intr-un anumit fisier (folder)
- executarea automata a unui anumit program care sa proceseze mesajul
A se vedea comanda UNIX procmail.
Implicit, pe un sistem UNIX, mesajul se stocheaza in fisierul
/var/spool/mail/username
Mesajele se stocheaza intr-un fisier astfel: fiecare
mesaj este prefixat cu o linie de forma
From adresa
dupa care mesajele se aseaza unul dupa altul separate prin linii vide.
Consultarea mesajelor de la distanta
MUA-ul final poate rula pe masina ce stocheaza efectiv casuta postala, sau
pe un alt calculator. In primul caz, MUA va citi direct fisierul asociat
casutei postale (se va asigura blocarea fisierului pentru a nu permite
modificarea simultana a fisierului de catre MUA si MTA). In al doilea caz,
este necesar un sistem client-server in care MUA este client, si exista un
server pe masina care stocheaza casuta postala.
Exista doua protocoale mai raspandite pentru citirea de la distanta a
postei:
- POP3 (Post Office Protocol), este mai simplu (primitiv chiar), permite
doar listarea mesajelor (despre fiecare se dau sursa, destinatia,
subiectul), citirea unui mesaj, si stergerea unui mesaj de pe server. Este
popular datorita folosirii lui de catre programul Windows Outlook.
Din pacate, Outlook nu exploateaza nici macar in totalitate
posibilitatile protocolului, astfel, nu permite listarea mesajelor noi decat
dupa transferul complet al acestora si stergerea lor de pe
server.
- IMAP este mult mai complex, si permite organizarea mai multor foldere
de mail chiar pe masina server
Ambele protocoale sunt autentificate, pentru a nu permite citirea postei
altui utilizator (de remarcat ca la SMTP nu este necesar pentru ca un client
SMTP trimite mesaje, nu solicita serverului obtinerea unui mesaj).
Considerente de securitate
La citirea postei prin retea, este necesara autentificarea pentru a nu permite
citirea postei de catre persoane neautorizate. Secretul parolei si
confidentialitatea mesajelor pot fi compromise de lipsa criptarii in cazul
protocolului POP3.
Prin deturnarea adreselor IP este posibila interceptarea mesajelor (intrusul
poate determina un client SMTP sa creada ca el e serverul caruia trebuie
sa-i trimita niste mesaje).
Transmiterea postei prin SMTP sufera insa de doua deficiente majore:
- Nu e posibila autentificarea expeditorului unui mesaj. Este posibila
examinarea antetelor Received adaugate de serverele SMTP prin care a
trecut mesajul, in vederea incercarii de-a identifica autorul, insa acestea
trebuie corelate cu fisierele jurnal de pe serverle SMTP pentru a avea sanse
reale de identificare.
- Oricine poate trimite mesaje oricui, si in plus poate sa-si ascunda in
anumite limite propria identitate. Unii abuzeaza de acest fapt pentru a
trimite mesaje, de obicei publicitare, in ideea ca daca 1 din 1000000
dintre cei ce primesc mesajul (e destul de fraier ca sa) cumpara produsul,
firma castiga bani cu o cheltuiala infima. Astfel de mesaje se numesc
SPAM-uri, si in ultimii ani reprezinta o problema foarte mare: sunt
utilizatori care primesc zilnic sute sau mii de SPAM-uri.
Lupta impotriva SPAM-urilor se face pe urmatoarele cai:
- MTA-urile sunt configurate sa nu primeasca mesaje decat daca provin
sau sunt destinate utilizatorilor deserviti direct de ele
- adresele de origine ale spam-urilor sunt publicate, si unele MTA-uri
refuza mesajele ce provin de la asemenea adrese
- exista filtre care determina daca continutul mesajului indeplineste
anumite caracteristici, pe care le au in general spam-urile
Din pacate, aceste metode (mai ales ultimele doua) impiedica mesajele
indreptatite sa fie livrate.
World Wide Web
Serviciul WWW
Ideea WWW este de a avea o metoda unitara de a publica documente accesibile
intregii comunitati a Internetului. Inainte de WWW, existau servere
ftp publice - adica servere ftp avand configurat un utilizator,
ftp, caruia nu i se cere parola (obiceiul este de-a da pe post de
parola adresa de posta electronica a utilizatorului; dar "parola" nu este
verificata).
Conceptele de baza ale WWW sunt:
- fiecare obiect este identificat unic printr-un nume, avand un format
standard. Acest nume este asa-numitul URL (Universal Resource Locator).
Pentru paginile web, acesta are forma
protocol://nume-server[:port]cale
unde protocolul arata metoda prin care se cere obiectul,
nume-server reprezinta masina careia i se va cere obiectul, portul
(optional) este portul pe care se contacteaza serverul, iar calea, care
trebuie sa inceapa cu slash identifica obiectul pe masina gazda.
- obiectele pot fi de tipuri variate (texte, imagini, inregistrari
audio, programe executabile, etc); protocolul http (HyperText
Transfer Protocol)
prevede indicarea de catre server a tipului obiectului
- asa-zisele pagini web sunt texte scrise in limbajul html
(HyperText Markup Language). Acest limbaj permite plasarea de referinte
catre alte pagini, catre diverse fisiere (disponibile pentru download),
precum si includerea de imagini si alte obiecte grafice.
De notat ca pentru obiectele grafice textul paginii cuprinde doar URL-ul
obiectului grafic de afisat.
- in principiu obiectele rezida pe server sub forma unor fisiere. Este
insa posibil ca unele documente sa fie generate pe loc.
- protocoalele asociate WWW au fost extinse, astfel incat permit practic
sa se construiasca orice fel de aplicatie client-server.
De notat ca un browser web accepta, in general, URL-uri incomplete; de
exemplu, www.cs.ubbcluj.ro in loc de URL-ul corect
http://www.cs.ubbcluj.ro/ (de notat ca slash-ul este obligatoriu).
Protocolul de baza
In continuare este descris protocolul HTTP.
Clientul deschide conexiunea catre server (daca nu se specifica portul,
clientul incearca pe rand porturile 80, 8000, 8080). Dupa deschiderea
conexiunii, clientul da o comanda, text pe o singura linie, de forma:
comanda nume protocol. Comanda este:
- GET - comanda de baza pentru a obtine un obiect. Comanda GET
nu trebuie sa aiba efecte colaterale - de genul acceptarii de catre utilizator
a unor conditii sau emiterea unui ordin de cumparare; pentru acest scop se
fa folosi comanda POST
- POST - este o comanda generica care permite utilizatorului sa
trimita niste date catre server; serverul va raspunde cu un obiect - de
obicei o pagina generata pe loc care informeaza utilizatorul asupra
efectului cererii
- exista si alte comenzi: PUT, DEL, etc;
Partea nume din cerere este partea de dupa numele masinii (server),
inclusiv slash-ul initial.
Dupa prima linie, clientul trimite (optional) linii (similare cu antetul
unui mesaj e-mail) de forma nume:valoare. Cele mai
importante sunt:
- Accept care indica ce tipuri (stil MIME) de obiecte pot fi date
ca raspuns. Aceasta permite serverului sa selectioneze dintre mai multe
obiecte cu continut echivalent dar prezentare diferita (de exemplu, imagini
jpeg sau png
- Content-length daca metoda este POST, specifica lungimea
mesajului trimis de client
Dupa ultima linie de antet, clientul trimite o linie vida, urmata apoi, in
cazul comenzii POST, de continutul de trimis. Acest continut poate fi
binar (oarecare), si trebuie sa aiba exact content-length octeti.
Raspunsul serverului urmeaza, si este in acelasi stil: o linie ce descrie
rezultatul (OK/eroare), linii antet, o linie vida, si apoi obiectul
propriu-zis. Campul Content-type arata clientului cum sa afiseze
obiectul.
Serverul
- in varianta cea mai simpla, numele paginii (partea de dupa numele
masinii) este calea, relativa la un director de baza, a fisierului ce
contine obiectul. Serverul HTTP livreaza doar fisierele, adaugand antetele
HTTP. Campul content-type se deduce din extensia fisierului, pe baza
unei tabele.
- servere mai avansate (ex. Apache) permit corespondente mai complicate
intre numele paginii si fisierul de servid
- pentru aplicatii care cer pagini generate pe loc, serverul trebuie
scris special pentru acea aplicatie. In acest caz, serverul este un program
gata facut, si este configurat ca pentru anumite pagini in loc sa livreze un
fisier sa ruleze un anumit program. Interfete stadard: cgi, php, asp, jsp.
Clientul
- trebuie sa stie sa afiseze o multime de formate de documente
- exista metode prin care se poate extinde - de exemplu, IE permite
integrarea documentelor OLE/COM
- exista obiecte de tip program care ruleaza in client (JavaScript, Java
Applet, VBScript, ActiveX)
- obiectele ce ruleaza in client pun probleme de securitate: este un
program care ruleaza in contul utilizatorului care aduce pagina, si deci
poate face orice in numele lui ... in limita impusa de mecanismul de
executie.
Alte considerente legate de HTTP
- virtual hosting - numele serverului este un alias spre un server ce
gazduieste multe "servere virtuale".
- proxy
Retele de calculatoare
19 Oct 2003
Radu-Lucian LUPSA