Sunteți pe pagina 1din 40

Retele de calculatoare

notiţe de curs

Radu-Lucian Lupşa

13 octombrie 2005
2
3

Cuprins

1 Introducere 5
1.1 Ce este o reţea de calculatoare? . . . . . . . . . . . . . . . . . . . 5
1.2 Problemele abordate ı̂n curs . . . . . . . . . . . . . . . . . . . . . 5
1.3 Problemele infrastructurii reţelei . . . . . . . . . . . . . . . . . . . 5
1.4 Tipuri de comunicaţie . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Arhitectura sistemului de comunicaţii . . . . . . . . . . . . . . . . 6

2 Programarea ı̂n reţea — introducere 7


2.1 Interfaţa de programare socket BSD . . . . . . . . . . . . . . . . 7
2.1.1 Creare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Utilizare socket stream . . . . . . . . . . . . . . . . . . . . 8
2.1.3 Utilizare socket pentru datagrame . . . . . . . . . . . . . . 9
2.2 Adresarea in internet . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Transmiterea mesajelor . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Mesaje binare . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Mesaje text . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Asigurarea concurenţei . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Nivelul fizic 13
3.1 Transmisia prin fir . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 Marimi electrice . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2 Semnale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.3 Banda de trecere . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.4 Codarea ı̂n banda de bază . . . . . . . . . . . . . . . . . . 16
3.1.5 Transmisia modulată . . . . . . . . . . . . . . . . . . . . . 16
3.1.6 Multiplexarea ı̂n frecvenţă . . . . . . . . . . . . . . . . . . 17
3.2 Transmisia prin unde radio . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 Propagarea undelor . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 Unde nedirijate şi unde dirijate . . . . . . . . . . . . . . . 19
3.3 Transmisia prin fibră optică . . . . . . . . . . . . . . . . . . . . . 19
3.3.1 Propagarea semnalului . . . . . . . . . . . . . . . . . . . . 19

4 Codarea informaţiei 21
4.1 Noţiuni de teoria informaţiei . . . . . . . . . . . . . . . . . . . . . 21
4.2 Problema codării pe canale fără zgomote . . . . . . . . . . . . . . 22
4.3 Coduri detectoare şi corectoare de erori . . . . . . . . . . . . . . . 26

5 Nivelul legăturii de date 29


4 CUPRINS

6 Nivelul retea şi nivelul transport 31


6.1 Algoritmi de dirijare . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2 Controlul congestiei . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.3 Protocolul IP şi protocoalele auxiliare . . . . . . . . . . . . . . . . 32
6.4 Nivelul transport . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.5 Reţele eterogene şi reţele private . . . . . . . . . . . . . . . . . . . 33
6.6 Reţele mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

7 Metode şi protocoale criptografice 35


7.1 Deziderate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.2 Asigurarea confidenţialiţăţii . . . . . . . . . . . . . . . . . . . . . 35
7.2.1 Criptografia simetrică . . . . . . . . . . . . . . . . . . . . 35
7.2.2 Utilizarea practică a cifrurilor bloc . . . . . . . . . . . . . 36
7.2.3 Numere aleatoare . . . . . . . . . . . . . . . . . . . . . . . 37
7.2.4 Criptografie asimetrică (cu cheie publică) . . . . . . . . . . 38
7.3 Autentificarea originii şi controlul integrităţii . . . . . . . . . . . . 38
7.3.1 Funcţii de dispersie criptografice . . . . . . . . . . . . . . . 38
7.3.2 Autentificarea mesajelor . . . . . . . . . . . . . . . . . . . 39
5

Capitolul 1

Introducere

1.1 Ce este o reţea de calculatoare?


Termenul retea de calculatoare are cel putin doua utilizari distincte:
1. mai multe calculatoare, impreuna cu un sistem (hard+soft) de comunicatii
2. un sistem de calcul, bazat pe o retea in sensul 1, dar comportandu-se ca un
sistem unitar (de exemplu, prezinta aceleasi conturi de utilizatori pe toate
calculatoarele)

1.2 Problemele abordate ı̂n curs


1. Realizarea infrastructurii pentru comunicaţii;
2. Aplicaţii (de comunicaţie) in reţea:
• aplicaţii existente,
• principiile realizării aplicaţiilor ı̂n reţea
3. Elemente de sisteme de operare in retea.

1.3 Problemele infrastructurii reţelei


1. codarea fizică a informaţiei;
2. detectarea şi corectarea erorilor de transmisie;
3. controlul fluxului (asigurarea faptului că emiţătorul nu trimite mai repede
decât poate receptorul să primească);
4. controlul coliziunilor şi adresarea, pe medii de tip magistrală (adică ı̂n care
există mai multe entităţi prevăzute cu emiţătoare şi receptoare care parta-
jează acelaşi mediu);
5. dirijarea comunicaţiei ı̂n reţea (astfel ı̂ncât două calculatoare să poată co-
munica, chiar dacă nu există legătură directă ı̂ntre ele, ci doar legături prin
intermediari);
6 Capitolul 1. Introducere

6. livrarea sigură (mesajele să nu se piardă, să nu ajungă ı̂n multiplu exemplar,
şi să ajungă ı̂n ordinea ı̂n care au fost emise);

7. securitatea:

• confidenţialitate (un mesaj să poată fi recepţionat doar de către desti-


natarul autorizat),
• autentificarea (receptorul să poată verifica identitatea emiţătorului,
• integritatea comunicaţiei (nimeni să nu poată modifica mesajele,
• non-repudiabilitatea (destinatarul să poată dovedi originea unui mesaj,
altfel spus, nici măcar destinatarul să nu poată falsifica identitatea au-
torului mesajului)

1.4 Tipuri de comunicaţie


Dupa nr. de receptori:

• punct la punct (unicast): un emiţător şi un receptor;

• difuziune (broadcast sau multicast): un emiţător şi mai mulţi receptori.

Nota: broadcast este o comunicaţie ı̂n care un mesaj este primit de toată
lumea; multicast desemnează o comunicaţie ı̂n care doar o parte din calculatoarele
din reţea primesc mesajul.
Dupa existenţa unei conexiuni:

• comunicatie prin conexiune;

• comunicatie prin datagrame.

Deziderate optionale:

• livrare sigura (un mesaj sa fie livrat exact o data)

• transmisie fara erori

• pastratea ordinii relative a mesajelor

• debit minim garantat

• timp maxim de livrare garantat

• confidentialitate

• autentificare

1.5 Arhitectura sistemului de comunicaţii


7

Capitolul 2

Programarea ı̂n reţea —


introducere

2.1 Interfaţa de programare socket BSD


socket = capat de cale de comunicatie
Presupuneri:
• pe fiecare calculator pot rula mai multe procese, şi fiecare proces poate avea
mai multe căi de comunicaţie deschise, prin urmare pe un calculator trebuie
să poată exista la un moment dat mai multe socket-uri active;

• o comunicaţie poate fi prin conexiune sau datagrame

• pentru a identifica partenerul de comunicaţie, iniţiatorul unei comunicaţii


trebuie să furnizeze o adresă; formatul acestei adrese poate să depindă de
tipul reţelei (IP, IPX, etc).
API-ul este conceput să fie independent de tipul exact al reţelei (poate
funcţiona pe reţele IP, IPX, local pe unix, etc.)

2.1.1 Creare
socket(proto_family, type, protocol)
type: desemnează tipul de servicii dorite:
SOCK STREAM: conexiune; punct la punct; flux de date bidirecţional la nivel de
octet; livrare sigura, cu pastrarea ordinii, transmisie fara erori.

SOCK DGRAM: datagrame punct la punct sau difuziune transmisie fara erori; livra-
rea nu e sigura si nici ordinea garantata.

SOCK RAW: acces direct la infrastructura; ex. in implementarea comenzii ping.


proto family identifică tipul de reţea cu care se lucrează (IP, IPX, etc).
Se pune PF INET pentru conexiuni pe protocol Internet (IP).
protocol identifică protocolul particular de utilizat. Este intenţionat a
fi folosit daca ar exista mai multe protocoale distincte pentru un tip de retea dat
si pentru un tip de serviciu dat. Implicit se va pune 0.
8 Capitolul 2. Programarea ı̂n reţea — introducere

Funcţia returnează identificatorul de socket, pe care aplicaţia ı̂l va furniza


ı̂n apelurile ulterioare.

2.1.2 Utilizare socket stream


Un socket stream poate să fie ı̂n una din două stări: neconectat sau
conectat. Un socket neconectat poate avea o adresă fixată sau nu.
Orice socket care participă la o operaţie de comunicare trebuie să aibă o
adresă; dacă adresa nu i se fixează explicit prin bind(), atunci sistemul ı̂i va da
o adresă aleatoare.
Conectarea, pe client:
connect(sock id, addr, addr len) conectează socket-ul local sock id cu socket-
ul identificat prin adresa addr. Adresa addr trebuie să corespundă unui
socket de tip stream neconectat
Conectarea, pe server:
bind(sock id, addr, addr len) fixează adresa socket-ului sock id.

listen(sock id, dim coada) fixează dimensiunea cozii de aşteptare pentru con-
exiunile către adresa socket-ului

accept(sock id, addr, addr len) aşteaptă o cerere de conexiune şi returnează
un nou socket conectat la socket-ul care a cerut conexiunea. Socket-ul origi-
nal poate fi folosit ulterior pentru a aştepta noi conexiuni. Parametrul addr
returneză adresa socket-ului
Comunicaţia propriu-zisă:
send(sock id, buf, count, flags) trimite count octeţi

recv(sock id, buf, count, flags) recepţionează cel mult count octeţi. Dacă
nu există nici un octet sosit, funcţia aşteaptă sosirea a cel puţin un octet (este
blocantă). Apoi citeşte minimul ı̂ntre numărul de octeţi sosiţi şi numărul de
octeţi ceruţi (count). Returnează numărul de octeţi citiţi. Returnează 0
dacă emiţătorul a ı̂nchis conexiunea.
Închiderea conexiunii:
close(sock id) distruge socket-ul şi ı̂nchide complet conexiunea ataşată (dacă
există)

shutdown(sock id, how) ı̂nchide comunicaţia, posibil doar ı̂ntr-unul singur sens
Structura unui program:
Clientul: #include <sys/socket.h>
#include <netinet/in.h>
...
struct sockaddr_in adr;

sd=socket(PF_INET, SOCK_STREAM, 0);


2.1. Interfaţa de programare socket BSD 9

memset(&adr, 0, sizeof(adr));
adr.sin_family = AF_INET;
adr.sin_port = htons(remote_port);
inet_addr(remote_ip, &adr.sin_addr);
if(-1==connect(sd, (struct sockaddr*)&adr,
sizeof(adr)) )
{
perror("connect()"); exit(1);
}
...
send(sd, ...); recv(sd, ...)
...
close(sd);

Serverul: #include <sys/socket.h>


#include <netinet/in.h>
...
struct sockaddr_in adr;

sd=socket(PF_INET, SOCK_STREAM, 0);


memset(&adr, 0, sizeof(adr));
adr.sin_family = AF_INET;
adr.sin_port = htons(remote_port);
adr.sin_addr = INADDR_ANY;
if(-1==bind(sd, (struct sockaddr*)&adr,
sizeof(adr)) )
{
perror("connect()"); exit(1);
}
listen(sd, 5);
...
struct sockaddr_in client_adr;
socklen_t client_adr_size;
sd_c = accept(sd, (struct sockaddr*)&client_adr,
&client_adr_size)
...
send(sd_c, ...); recv(sd_c, ...)
...
close(sd_c);
...
close(sd);

2.1.3 Utilizare socket pentru datagrame


Probabil cel puţin unul din capete trebuie să fixeze adresa socket-ului, la
o valoare cunoscută de partener; pentru aceasta foloseşte apelul bind(). Celălalt
capăt primeşte automat o adresă la prima trimitere de datagramă.
Funcţii:
10 Capitolul 2. Programarea ı̂n reţea — introducere

bind(sock id, addr, addr len) fixează adresa socket-ului;

sendto(sock id, buf, count, flags, addr, addr len) trimite o datagramă
la adresa specificată;

recvfrom(sock id, buf, count, flags, addr, addr len) recepţionează o da-
tagramă, şi pune ı̂n addr adresa de provenienţă.

2.2 Adresarea in internet


Adresa IP:

• identifică unic maşina

• 32 biţi; de obicei scrisă ca 4 numere zecimale separate prin puncte (ex.


193.226.40.130)

• ı̂n principiu, fiecare interfaţă de reţea (ex. placă de reţea, linie seriala sau
modem folosit pentru o conexiune in reţea) are o adresa IP

• adresa 127.0.0.1 corespunde unei intereţe virtuale intr-o retea (virtuală) ı̂n
care calculatorul este singur. Altfel spus, 127.0.0.1 desemnează intotdeauna
maşina locala.

• unele adrese sunt folosite pentru broadcast

Numarul portului:

• serveşte pentru a diferenţia intre socket-ii de pe aceeaşi maşina

• 16 biţi (1–65535)

• porturile TCP (SOCK STREAM) sunt independente de porturile UDP (SOCK DGRAM)

2.3 Transmiterea mesajelor


Exemplu: clientul anunţă scoaterea dintr-o magazie a unei anumite can-
tităţi de marfă. Se trimite un mesaj conţinând denumirea şi cantitatea.

2.3.1 Mesaje binare


Exemplu:

struct Cerere {
char denumire[30];
int cantitate;
};
Cerere c;
...
send(sd, &c, sizeof(c), 0);
2.4. Asigurarea concurenţei 11

Probleme:

1. lungimea (numărul de octeţi) pe care se reprezintă un int este dependentă


de platformă

2. ordinea octeţilor este dependentă de platformă (little endian vs. big endian)

3. alinierea e dependentă de platformă (se poate ca adresa unui ı̂ntreg să tre-
buiască să fie multiplu de 2, 4 sau 8 octeţi)

Soluţie:

1. se folosesc typedef-urile uint16 t, uint32 t definite ı̂n netinet/in.h ; lun-


gimea reprezentării lor e independentă de platformă;

2. se convertesc la o ordine a octeţilor independentă de platformă: funcţiile


htons(), htonl(), ntohs(), ntohl();

3. se transmite individual fiecare membru al unei structuri.

Exemplu:

struct Cerere {
char denumire[30];
unit32_t cantitate;
};
Cerere c;
...
send(sd, c.denumire, 30, 0);
c.cantitate=htonl(c.cantitate);
send(sd, &c.cantitate);

2.3.2 Mesaje text

2.4 Asigurarea concurenţei


12 Capitolul 2. Programarea ı̂n reţea — introducere
13

Capitolul 3

Nivelul fizic

3.1 Transmisia prin fir


3.1.1 Marimi electrice
Reamintim din fizica de liceu următoarele mărimi electrice:
Sarcina electrică (Q) măsoară cantitatea de electricitate. Este analoagă can-
tităţii de fluid. Putem măsura cantitatea de electricitate (sarcina electrică)
ce trece printr-un conductor ı̂ntr-o perioadă de timp. Se măsoară ı̂n cou-
lombi (C).
Intensitatea curentului (I) (numită pe scurt curentul ) măsoară sarcina elec-
trică ce trece printr-un conductor ı̂mpărţită la timpul ı̂n care trece. Este
analoagă debitului de fluid printr-o conductă. Intensitatea curentului ce
trece printr-un conductor se măsoară ı̂ntrerupând conductorul şi intercalând
un instrument de măsură numit ampermatru. Ampermetrul trebuie să con-
ducă foarte bine curentul (să aibă impedanţa — vezi mai jos — cât mai
mică) pentru a perturba cât mai puţin circuitul ı̂n care măsoară. Se măsoară
ı̂n amperi (A). Intensitatea curentului prin circuite folosite la transmiterea
informaţiei este de regulă de ordinul zecilor de miliamperi.
Tensiunea electrică (U) ı̂ntre două conductoare măsoară cât de puternic ar fi
impinsă o sarcină electrică aflată ı̂n primul conductor către cel de-al doilea.
Este analoagă diferenţei de presiune ı̂ntre două conducte de fluid. Pentru a
măsura tensiunea electrică ı̂ntre două conductoare, montăm un instrument
numit voltmetru cu o bornă conectată la unul din conductoare şi cu cealaltă
bornă legată la celălalt conductor. Voltmetrul trebuie să fie cât mai aproape
de un izolator — să conducă cât mai puţin curent de la o bornă la alta
(aidcă să aibă impedanţa cât mai mare). Tensiunea se măsoară ı̂n volţi (V).
Tensiunile intre conductoarele folosite pentru transmisia informaţiei sunt de
ordinul câtorva volţi.
Puterea şi energia electrică (P) Un element de circuit la bornele căruia se
aplică o tensiune U şi prin care trece un curent de intensitate I de acelaşi sens
cu tensiunea primeşte o putere P = U I. Dacă intensitatea are sens invers
tensiunii, elementul livrează puterea P = U I circuitului. Puterea se măsoară
ı̂n watti (W).
14 Capitolul 3. Nivelul fizic

Energia electrică (E) Energia măsoară produsul dintre puterea primită sau
cedată de un element de circuit şi timpul cât are loc fenomenul. Unitatea de
măsură ı̂n Sistemul Internaţional este joule-ul (J), ı̂nsă frecvent se foloseşte
kilowattora (kWh) (atenţie, simbolul kW/h , citit kilowatt pe oră, nu este
corect, deşi este folosit curent); un kilowattoră este energia primită de un
consumator care primeşte o putere de un kilowatt timp de o oră; ı̂n consecinţă
1kWh = 3600000J.

Elemente de circuit şi mărimi caracteristice (Notă: fiecare element poate


fi construit ı̂n mod deliberat, ı̂nsă comportamentul poate să apară şi acolo unde
nu este dorit):

rezistorul si rezistenţa (R) Un rezistor este un element de circuit

condensatorul şi capacitatea (C) .

bobina şi inductanţa (L) .

impedanţa (Z) şi conductanţa (G)

surse şi consumatori

3.1.2 Semnale
În general, prin semnal se ı̂ntţelege valoarea unei mărimi fizice, urmărie
ca funcţie de timp, folosite pentru transmiterea informaţiei.
În cazul transmiterii prin conductoare electrice, semnalul este tensiunea
ı̂ntre cele două conductoare; semnalul emis, notat Ue (t), este tensiunea măsurată
la momentul t la bornele emiţătorului, iar semnalul recepţionat, notat Ur (t), este
tensiunea măsurată la bornele receptorului.
În general, semnalul recepţionat nu coincide cu semnalul emis. Apar mai
multe fenomene:

ı̂ntârzierea face ca semnalul recepţionat să urmeza cu o anumită ı̂ntârziere sem-


nalul emis. Ideal (adică ı̂n lipsa fenomenelor de mai jos), Ur (t) = Ue (t − vl ),
unde l este lungimea liniei iar v este viteza de propagare a semnalului; aceasta
din urmă depinde doar de materialul izolator dintre conductoarele liniei. În
practică, v ≈ 2/3c = 2 · 108 m/s, unde c este viteza luminii ı̂n vid.

atenuarea face ca semnalul recepţionat să aibă amplitudine mai mică decât
cel emis. Fiecare metru al liniei scoate la iaşire un semnal egal cu un
anumit procent din semnalul intrat; ca urmare, amplitudinea semnalului
recepţionat scade exponenţial cu creşterea lungimii liniei. Mai exact, ne-
glijând ı̂ntârzierea, Ur (t) = g · Ue (t), unde 0 < g < 1 şi are forma g =
g0l . Se numeşte factor de atenuare valoarea (1/g)2 ;aceasta arată raportul
ı̂ntre puterea semnalului emis şi a celui recepţionat (ı̂n general puterea este
proporţională cu pătratul tensiunii, deoarece raportul tensiune/intensitate
este aproximativ constant). În practică, ı̂n loc să scriem factorul de atenuare
(1/g)2 scriem atenuarea, care, dată ı̂n decibeli (notat dB) este 10·log10 (1/g)2 .
Astfel, dacă o linie are atenuare de 10dB ı̂nseamnă că puterea recepţionată
3.1. Transmisia prin fir 15
p
este 1/10 din puterea emisă şi că tensiunea recepţionată este 1/ (10) din
tensiunea emisă.
Atenuarea unui cablu este proporţională cu lungimea, iar puterea şi tensiunea
recepţionate scad exponenţial cu lungimea. Dacă un cablu are atenuarea
0.1dB/m ı̂nseamnă că pe 100m de cablu vom avea o atenuare de 10dB, adică
o reducere de 10 ori a puterii. Pe 30m din acelaşi cablu, atenuarea va fi de
3dB, adică o reducere de aproximativ 2 ori a puterii (mai exact, factorul de
atenuare este de 100.3 ≈ 1.9953).
Atenuarea depinde de materialele din care sunt făcute conductoarele şi izo-
latorul precum şi de geometria cablului.

distorsiunile determină semnalul recepţionat să aibă o formă diferită faţă de


semnalul emis.

3.1.3 Banda de trecere


Considerăm un circuit electronic, care are o intrare şi o ieşire (fig. ??).
În particular, o pereche de fire folosite pentru transmisie poate fi considerată un
astfel de circuit, capetele dinspre emiţător constituind intrarea, iar cele dinspre
receptor, ieşirea.
Tensiunea de la ieşire depinde de tensiunea de la intrare, ı̂nsă ı̂n general
depinde de tot istoricul ei. Altfel spus, comportamentul circuitului poate fi descris
de o funcţie care primeşte ca argument funcţia tensiune-timp de la intrare si
ı̂ntoarce funcţia tensiune-timp de la iaşire (o funcţie definită pe un spatţiu de
funcţii cu valori tot ı̂ntr-un spaţiu de funcţii). Scriem Ue = T (Ui ), unde Ui (t)
este valoarea tensiunii de intrare la momentul t, iar Ue (t) este tensiunea de ieşire
la momentul t.
Multe circuite electronice au un comportament liniar, adică dacă Ui (t)
poate fi scris ca
Ui (t) = Ui1 (t) + Ui2 (t) + · · · + Uin (t),
atunci
Ue (t) = Ue1 (t) + Ue2 (t) + · · · + Uen (t),
unde Ue1 = T (Ui1 ), Ue2 = T (Ui2 ), etc.
Circuitele liniare au proprietatea că, dacă semnalul de intrare este sinu-
soidal, adică
Ui (t) = U0 · sin(ωt + φ)
atunci semnalul de ieşire este tot sinusoidal, şi, mai mult,

Ue (t) = g(ω) · U0 · sin(ωt + φ − θ(ω)

unde g(ω) şi θ(ω) depind doar de cun este construit circuitul şi de frecvenţa
(ω = 2πf , unde f este frecvenţa semnalului).
Orice semnal se poate scrie unic ca o sumă de semnale sinusoidale. (Nota:
scrierea unei funcţii ca sumă de sinusoide este aşa-numita transformata Fou-
rier. Condiţiile de existenţă depind de cadrul ı̂n care se scrie — funcţie in L2 ,
distribuţie, etc. Prezentarea de faţă are doar scop de suport intuitiv; lipsesc deta-
liile matematice şi ı̂n consecinţă cele scrise aici nu pot fi folosite pentru a sprijini
16 Capitolul 3. Nivelul fizic

ı̂n mod fiabil raţionamente). Transformata Fourier se mai numeşte şi spectrul
semnalului.
Ca urmare a liniarităţii, semnalul de ieşire se poate calcula descom-
punând ı̂n sinusoide semnalul de intrare, calculând efectul circuitului asupra
fiecărei sinusoide ı̂n parte, şi ı̂nsumând ı̂n final ieşirile. Comportamentul unui
circuit liniar este deci complet definit de funcţiile g(ω) şi θ(ω) de mai sus.
Un semnal este nedistorsionat dacă şi numai dacă, pentru toate valorile
ω din spectrul semnalului (adică acelea pentru care amplitudinea sinusoidei co-
respunzătoare este nenulă) g(ω) are aceeaşi valoare şi θ(ω) este proporţional cu
ω.
În general, un circuit (inclusiv o linie de transmisie) va prezenta distor-
siuni mici doar pentru semnale a căror spectru se ı̂ncadrează ı̂ntre anumite valori
extreme fmin şi fmax . Acest interval se numeşte banda de trecere a circuitului.
Diferenţa fmax − fmin se numeşte lăţimea de bandă a circuitului (sau a liniei).
De exemplu, banda de trecere a unui circuit de telefon este cuprinsă ı̂ntre
aproximativ 300Hz şi 3kHz.

3.1.4 Codarea ı̂n banda de bază


Prin codare ı̂n acest context se ı̂nţelege regulile prin care unui şir de biţi
de transmis i se asociază semnalul emis. Codarea cea mai simplă este aceea ı̂n
care ı̂mpărţim timpul ı̂n celule de durată fixată (pe care o numim lungimea unui
bit) şi, pe durata fiecărui bit semnalul emis va avea o anumită valoare — de
exemplu 12V — dacă bitul are valoarea 1 şi 0V dacă bitul are valoarea 0.
Receptorul va avea un ceas cu care va determina celulele corespunzătoare
biţilor, şi va măsura semnalul la mijlocul fiecărei celule de bit. Dacă tensiunea
va fi mai mare de, să zicem, 3V, va decide că bitul respectiv are valoarea 1, altfel
0.

3.1.5 Transmisia modulată


Transmisia modulată se foloseşte atunci când este necesar ca spectrul
semnalului să ocupe o bandă departe de frecvenţa zero. Aceast poate fi necesar
fie pentru că circuitele sau mediul de transmisie nu pot transmite frecvenţele
apropiate de zero, fie pentru a putea transmite mai multe semnale pe acelaşi
mediu prin multiplexare ı̂n frecvenţă.
Modularea constă ı̂n a transmite un semnal de forma

U (t) = a · sin(ωt + φ),

unde unul din parametri a, ω sau φ sunt funcţie de semnalul ce s-ar transmite ı̂n
lipsa modulaţiei.
Mai exact, putem avea:
modulaţie ı̂n amplitudine (AM): semnalul transmis este de forma

U (t) = U0 · s(t) · sin(2πfp t)

unde s(t) este semnalul de modulat, cel care poartă informaţia utilă, iar fp
este aşa-numita frecvenţă purtătoare a semnalului.
3.1. Transmisia prin fir 17

Se observă că modulaţia ı̂n amplitudine este liniară (modulaţia sumei a două
semnale a + b este suma rezultatelor modulaţiei independente pentru a şi b)
şi că dacă semnalul de modulat este sinusoidal

a(t) = sin(2πfs t + φ)

atunci
U (t) = U0 · s(t) sin(2πfp t =
= U0 · sin(2πfs t + φ) sin ωt =
µ ¶
1 1
= U0 · cos ((ω − 2πf )t − φ) − cos ((ω + 2πf )t + φ)
2 2

adică ı̂n urma modulaţiei ı̂n amplitudine a unui semnal sinusoidal se obţine o
sumă de două semnale sinusoidale având ca frecvenţe suma dintre frecvenţa
semnalului de modulat şi frecvenţa purtătoare şi celălalt având diferenţa
celor două frecvenţe. În condiţii reale, frecvenţa purtătoare este cel putin de
câteva ori mai mare decât frecvenţele din spectrul semnalului de modulat.
Spectrul unui semnal modulat ı̂n amplitudine va conţine frecvenţa purtătoare
şi două benzi laterale, stângă şi dreaptă, acestea cuprinzând diferenţele, res-
pectiv sumele, frecvenţelor din spectrul semnalului util cu frecvenţa purtătoare.
Întrucât spectrul semnalului modulat este simetric ı̂n jurul frecvenţei purtătoare,
de fapt doar una dintre benzile laterale poartă informaţie utilă. Din acest
motiv, adesea se suprimă total sau parţial de la transimisie una dintre benzile
laterale.

modulaţie ı̂n frecvenţă (FM): semnalul transmis are forma


¡ ¢
U (t) = U0 · sin 2π · (fp + s(t)) · t

unde, din nou, fp este numită frecvenţa purtătoare şi s(t) este semnalul util;
avem s(t) ¿ fp .
Analiza spectrului unui semnal modulat ı̂n frecvenţă este mult mai difcilă
decât ı̂n cazul modulaţiei ı̂n amplitudine.

modulaţie ı̂n fază: semnalul transmis are forma


¡ ¢
U (t) = U0 · sin 2πfp t + s(t)

Este evident că, ı̂ntrucât receptorul nu are de obicei un reper absolut de


timp, el nu poate detecta decât variaţiile de fază ale semnalului recepţionat.
Ca urmare, o valoare constantă a lui s(t) nu poate fi deosebită de zero şi,
mai mult, nici variaţii lente ale lui s(t) nu pot fi detectate. În consecinţă,
spectrul lui s(t) nu poate conţine frecvenţe prea apropiate de 0.

3.1.6 Multiplexarea ı̂n frecvenţă


Dacă modulăm mai multe semnale s1 . . . sn folosind frecvenţe purtătoare
fp1 . . . fpn suficient de depărtate pentru ca spectrele semnalelor modulate să nu se
18 Capitolul 3. Nivelul fizic

ı̂ntrepătrundă, putem transmite toate semnalele pe acelaşi mediu de transmisie


fără ca semnalele să interfereze.
Acest procedeu se numeşte multiplexare ı̂n frecvenţă. Poate fi folosit atât
pentru a transmite două sau mai multe semnale ı̂n acelaşi sens, cât şi pentru a
transmite semnale ı̂n ambele sensuri simultan (transmisie full-duplex ).
Emiţătorul va suprapune pur şi simplu semnalele modulate. Receptorul
va separa, cu ajutorul unor circuite capabile să filtreze de pe o linie doar o anumită
bandă de frecvenţe, semnalele modulate, după care le va demodula independent
pe fiecare.

3.2 Transmisia prin unde radio


3.2.1 Propagarea undelor
Proprietăţile de propagare ale undelor radio depind de lungimea de undă
sub două aspecte:

1. Orice undă ocoleşte obstacolele mai mici decât o fracţiune din lungimea de
undă, ı̂n vreme ce ı̂n spatele obstacolelor mai mari de câtea lungimi de undă
,,rămâne umbră“. De aceea, undele lungi, cu lungime de undă de ordinul
kilometrilor sau sutelor de metri sunt capabile să ocolească obstacole mari,
inclusiv curbura Pământului pe distanţă de câteva sute sau chiar mii de
kilometri. Prin contrast, undele cu lungime de undă sub câţiva metri se
propagă aproape numai ı̂n linie dreaptă, dealurile sau clădirile mai mari
putând provoca umbre.

2. Absorbţia şi reflexia undelor pe diferite materiale depinde de lungimea de


undă; este similară cu absorbţia şi reflexia diferită a luminii de diferite culori.
Ionosfera reflectă undele cu lungimi de undă de ordinul metrilor; prin reflexii
repetate ı̂ntre Pământ si ionosferă, aceste unde pot parcurge uşor multe
mii de kilometri. Microundele (cca. 1cm–20cm) şi lumina vizibilă (400nm–
700nm) sunt singurele care pot traversa atmosfera terestră; ı̂nsă microundele
ı̂n jurul a 6GHz (5cm) sunt puternic absorbite de apă şi ca urmare trec greu
prin nori şi prin ploaie.

Puterea semnalului scade, pe măsură ce ne ı̂ndepărtăm de emiţător, din


două cauze:

• datorită extinderii frontului de undă, puterea pe unitatea de suprafaţă a


frontului de undă este mai mică. Scăderea este cu pătratul distanţei:
1
Pr = Pe · α ·
d2
unde α este o constantă ce depinde de construcţia antenelor de emisie şi de
recepţie, iar d este distanţa ı̂ntre emiţător şi receptor.

• datorită absorbţiei undelor ı̂n mediu. Această scădere este exponenţială cu


distanţa, ca şi ı̂n cazul cablurilor, ı̂nsă de cele mai multe ori este neglijabilă
faţă de extinderea frontului de undă.
3.3. Transmisia prin fibră optică 19

3.2.2 Unde nedirijate şi unde dirijate


Există antene direcţionale şi antene nedirecţionale. Antenele direcţionale
emit şi recepţionează unde aproape doar ı̂ntr-o singură direcţie; cele nedirecţionale
emit aproape cu aceeaşi putere (respectiv, recepţionează cu aceeaşi sensibilitate)
de jur ı̂mprejur. Antenele nedirecţionale sunt de cele mai multe ori un simplu
baston metalic (de fapt, bastonul este un pol, iar carcasa aparatului sau, după
caz, Pământul. este celălalt pol). Antenele direcţionale cele mai răspândite
pentru comunicaţiile ce ne interesează au directivitatea asigurată de o oglindă
de forma unui paraboloid de rotaţie, cu antena propriu-zisă plasată ı̂n focarul
paraboloidului. (aşa-numitele antene parabolice).
O antenă direcţionale trebuie să fie orientată ı̂n permanenţă către par-
tenerul de comunicaţie. În schimb, ca avantaj faţă de antenele nedirecţionale,
puterea emisă poate fi mai mică, sensibilitatea receptorului poate fi mai scăzută
— ı̂ntrucât o mai mare parte din energia emisă de emiţător ajunge pe receptor
— şi pot exista ı̂n aceeaşi zonă mai multe instalaţii ce folosesc aceeaşi frecvenţă
fără să interfereze.

3.3 Transmisia prin fibră optică


3.3.1 Propagarea semnalului
20 Capitolul 3. Nivelul fizic
21

Capitolul 4

Codarea informaţiei

4.1 Noţiuni de teoria informaţiei


Teoria informaţiei serveşte la a putea evalua necesarul de informaţie de
transmis de la emiţător la receptor şi de-a evalua eficienţa şi redundanţa trans-
miterii informaţiei.
Teoretic receptorul are nevoie de un mesaj de la emiţător dacă conţinutul
acelui mesaj (şi eventual momentul ı̂n care este trimis) nu poate fi dedus de către
receptor pe baza cunoştinţelor sale. Putem spune că un mesaj conţine informaţie
dacă aduce receptorului ceva ce acesta nu putea obţine singur. Prin urmare, un
mesaj conţine informaţie numai ı̂n măsura ı̂n care receptorul are o incertitudine
pe care prin primirea mesajului o poate ı̂nlătura.
Informaţia este deci ı̂nlăturarea unei incertitudini. Măsura informaţiei
trebuie să măsoare incertitudinea ı̂nlăturată prin dobândirea unei informaţii.
Presupunem că avem o mulţime completă de evenimente posibile, dis-
juncte: A = {x1 , x2 , . . . , xn } cu probabilităţile pi = P (xi ). Prin definiţie, un
mesaj care ı̂nştiinţează receptorul de producerea evenimentului xi aduce o canti-
tate de informaţie i = −log2 pi . Unitatea de măsură se numeşte bit. Observaţie:
a nu se confunda bitul unitate da măsură a informaţiei, cu bitul cifră ı̂n baza 2.
Există o legătură: presupunând o codare ideală, o informaţie de n biţi poate fi
codată ca un şir de n biţi.
La transmisia informaţiei se pune ı̂n mod obişnuit problema următoare:
emiţătorul are o mulţime de mesaje posibile M = {m1 , m2 , . . . , mn }. Dintre
acestea, el va trebui să transmită unul. Pe de altă parte, emiţătorul are la
dispoziţie o mulţime de simboluri de cod S = {s1 , s2 , . . . , sk } pe care le poate
emite; el poate transmite un şir de astel de simboluri de cod. În general, S
are două elemente, notate 0 şi 1 (S = {0, 1}. Fiecare mesaj trebuie codificat ca
un şir de simboluri de cod, printr-o funcţie de codare c : M → S ? . Funcţia c
trebuie să fie injectivă, pentru ca orice cuvânt de cod să fie unic decodabil, şi să
fie cunoscută receptorului pentru ca acesta să poată decoda efectiv orice mesaj
primit.
Problema codării informaţiei este să se aleagă o funcţie c potrivită.
Cerinţele sunt să minimizeze lungimea medie a cuvintelor de cod, şi să permită
decodarea ı̂n prezenţa erorilor, adică dacă receptorul primeşte un cuvânt de cod
uşor modificat.
Modelul de lucru ı̂n problema codării informaţiei este următorul:
22 Capitolul 4. Codarea informaţiei

Figura 4.1: Codarea informaţiei pentru transmitere

Există o sursă de informaţie, care produce ı̂n timp un şir de mesaje


dintr-o mulţime finită M .
Canalul de transmisie (mediul fizic) permite transmiterea unor simboluri
de cod dintro altă mulţime finită, S numită alfabetul canalului (ı̂n majoritatea
cazurilor S = {0, 1}).
Transmiterea informaţiei prin canal presupune codarea mesajelor, astfel
ı̂ncât fiecărui mesaj ı̂i corespunde o secvenţă de simboluri de cod. Avem schema
din figura ??.

Măsurarea informaţiei Este util uneori să putem defini cantitatea de informaţie
purtată de un mesaj. Pentru aceasta este necesar ca să asignăm fiecărui mesaj
posibil probabilitătea de-a fi emis.

Definitia 4.1 Cantitatea de informaţie adusă de un mesaj m este − log2 (pm ),


unde pm este probabilitatea emisiei mesajului m.

De remarcat că, cantitatea de informaţie este o măsură a incertitudinii


ı̂nlăturate de mesaj. Daca primirea mesajul era aproape sigură (p ' 1) incerti-
tudinea primirii este mică şi cantitatea de informaţie este de asemenea mică.

4.2 Problema codării pe canale fără zgomote


Cod: o funcţie c : M → S ∗ , unde M este mulţimea mesajelor posibile,
iar S este mulţimea simbolurilor de cod (simbolurile ce pot fi codate fizic direct
pe canal, de exemplu ca nivele de semnal).
Termeni:
mesaj obiectul trimis de sursă, aparţinând mulţimii mesajelor posibile M
simbol de cod simbol ce poate fi trimis direct la nivel fizic (ce poate fi codat
direct ca nivel de tensiune pe linie, de exemplu);
alfabetul sursei mulţimea simbolurilor de cod posibile;
secvenţă de cod secvenţă oarecare de simboluri de cod;
cuvânt de cod secvenţă de cod prin care se codează un mesaj.

Cod unic decodabil Pentru ca decodarea să fie posibilă, funcţia c este ne-
cesar să fie injectivă. (Notă: surjectivitatea nu este nici necesară nici posibilă;
imposibilitatea este datorată faptului că M este finită şi S ∗ este infinită).
Injectivitatea nu este suficientă. De exemplu: a 7→ 0, b 7→ 1, c 7→ 01 este
injectivă dar secvenţa de cod 01 poate proveni din ab sau din c.
Funcţia c se extinde la ĉ : M ∗ → S ∗ prin ĉ(m1 · m2 · · · · · mk ) = c(m1 ) ·
c(m2 ) · · · · · c(mk ) (punctul reprezintă concatenarea).

Definitia 4.2 Codul este unic decodabil dacă ĉ este injectivă.


4.2. Problema codării pe canale fără zgomote 23

0 1

a
0 1

c
0 1

d b

Figura 4.2: Arborele ataşat unui cod prefix

Condiţii pentru unic decodabilitate


Teorema 4.3 Pentru orice cod unic decodabil are loc inegalitatea:
n
X
|S|−lk ≤ 1 (4.1)
k=1

unde lk sunt lungimile cuvintelor de cod, iar |S| este numărul de simboluri de
cod.

Definitia 4.4 Un cod se spune că are proprietatea de prefix (sau mai scurt, este
cod prefix) dacă nici un cuvânt de cod nu este prefix al altui cuvănt de cod.

Exemplu:
a 7→ 0
b 7→ 101
c 7→ 11
d 7→ 100
Unui cod prefix i se poate ataşa un arbore ı̂n care fiecărui mesaj ı̂i cores-
punde o frunză, muchiile descendente de la fiecare nod sunt etichetate cu simbo-
luri de cod distincte, iar cuvântul de cod al unui mesaj este format din simbolurile
de cod ale muchiilor de pe lanţul ce uneşte rădăcina cu frunza ataşată mesajului.
Exemplu: fig. 4.2

Teorema 4.5 Orice cod cu proprietatea de prefix este unic decodabil.

Teorema 4.6 Dacă l1 . . . lk satisac inegalitatea 4.1, atunci există un cod cu pro-
prietatea de prefix avănd lungimile cuvintelor de cod l1 . . . lk .

Construcţia: Sortăm crescător lungimile cuvintelor (lk ). Construim ar-


borele ataşat codului plecând de la rădăcină. La fiecare nivel, alegem dintre
vârfurile de pe acel nivel un număr egal cu numărul cuvintelor de cod de acea
lungime şi le acem frunze, ataşate mesajelor corespunzătoare. Restul nodurilor
vor rămâne noduri interne, şi vor da descendenţi pe nivelul următor; fiecare nod
va da |S| descendenţi, iar muchiile descendente se vor eticheta cu simboluri de
24 Capitolul 4. Codarea informaţiei

0 1 0 1

a a 0 1

0 1

a 0 1

c
0 1

b d

Figura 4.3: Construcţia unui cod prefix cu lungimi fixate ale cuvintelor de cod

cod ı̂ntr-o ordine arbitrară. Inegalitatea 4.1 ne asigură că vom avea la fiecare
nivel suficiente vârfuri de ataşat mesajelor a căror cuvinte de cod urmează să
aibă acea lungime.
Exemplu: figura 4.3 arată etapă cu etapă construcţia unui cod pentru
lungimile l1 = 1, l3 = 2, l2 = 3, l4 = 3. Cerculeţele desemnează nodurile
neataşate unor mesaje, care urmează să producă descendenţi pe nivelul următor.
Observaţie: din teoremele din acest paragraf rezultă că dacă avem un cod
unic decodabil pentru nişte mesaje putem găsi un cod prefix cu aceleaşi lungimi
ale cuvintelor de cod.

Coduri optimale Dacă dorim codificarea unei secvenţe de mesaje să fie cât mai
scurtă, avem nevoie de un cod care să minimizeze lungimea medie a cuvântului de
cod. Media lungimilor se va calcula ponderat, cu ponderile egale cu probabilităţile
de apariţie ale respectivelor cuvinte de cod.

Definitia 4.7 Un cod optimal este un cod unic decodabil care are cea mai mică
lungimea medie a cuvintelor de cod.

Presupunând că avem la dispoziţie doar două cuvinte de cod, avem l ≥


H(M ), adică lungimea medeie a cuvântului de cod nu poate fi mai mică decât
informaţia medie pe simbol a sursei.

Algoritmul Huffman Dacă facem presupunerea că sursa este ergotică, adică
probabilitatea de-a emite un anumit mesaj nu depinde de mesajele precedente şi
nici de timp, codul optimal se poate construi prin algoritmul lui Huffman.
Algoritmul Huffman (vezi fig. 4.4) este următorul (presupunem |S| = 2,
adică alfabetul canalului are doar două simboluri):
4.2. Problema codării pe canale fără zgomote 25

0.55 0.10 0.20 0.15 0.55 0.20 0.25

a b c d a c 0 1

b d

0.55 0.45 1.00

a 0 1 0 1

c a
0 1 0 1

b d c
0 1

b d

Figura 4.4: Funcţionarea algoritmului Huffman

Pentru ı̂nceput, se ataşează fiecărui mesaj un arbore format dintr-un


singur vârf, şi i se ataşează arborelui respectiv frecvenţa acelui mesaj.
În continuare, la fiecare pas se selectează cei doi arbori cu frecvenţele de
apariţie asociate cele mai mici. Se unesc cei doi arbori prin creerea unui nou nod
ce va deveni rădăcină şi va avea subordonaţi cei doi arbori. Una din muchiile
nou introduse va fi etichetată cu 0, cealaltă cu 1. Noului arbore i se asociază
frecvenţa egala cu suma frecvenţelor celor doi arbori uniţi.
Algoritmul se termină ı̂n momentul ı̂n care rămâne un singur abrore.

Teorema 4.8 Codul obţinut prin algoritmul Huffman este optimal.

Aplicaţii Codarea optimală este ceea ce face orice program de compresie a


informaţiei. Algoritmul Huffman este folosit aproape de orice algoritm de com-
presie, ı̂nsă de regulă nu direct asupra octeţilor din datele de comprimat.
Algoritmii de compresie utilizaţi ı̂n practică se folosesc şi de dependenţele
ı̂ntre octeţii succesivi.
Utilizarea oricărui cod presupune că receptorul cunoaşte codul folosit
de emiţător. Transmiterea separată a codului către receptor riscă să contraba-
lanseze câştigul obţinut prin codare optimală. Metodele adaptative presupun că
emiţătorul ı̂ncepe emisia cu un cod standard, după care ı̂l modifică pentru a-l
optimiza conform frecvenţelor observate ı̂n date. Dacă algoritmul de generare
a codului este fixat şi codul folosit la un moment dat depinde doar de datele
trimise (codate) deja, atunci receptorul poate recalcula codul folosit de emiţător
(folosind acelaşi algoritm ca şi emiţătorul).
De notat că nici un cod nu poate folosi mai puţini biţi pentru codare
decât cantitatea de informaţie transmisă. În lipsa redundanţei, nu e posibilă
compresia. Ca o consecinţă, nici un program de compresie nu poate comprima
un şir aleator de octeţi.
26 Capitolul 4. Codarea informaţiei

4.3 Coduri detectoare şi corectoare de erori


Detecţia erorilor constă ı̂n a face receptorul să-şi dea seama ı̂n anumite
condiţii dacă au avut loc erori la transmisie (receptorul va cere probabil retrans-
miterea informaţiei ı̂n acest caz).
Corectarea erorilor constă ı̂ntr-un mecanism care permite receptorului ı̂n
anumite condiţii să reconstituie mesajul trimis de emiţător, chiar dacă ceea ce a
recepţionat este diferit din cauza erorilor.
În general, nu pot fi detectate sau corectate toate erorile posibile. În
practică se presupune un anumit număr maxim de erori ce pot afecta un bloc
de date, şi schemele permit detectarea oricărei astfel de configuraţii de erori.
Dacă erorile se produc ı̂n număr mai mare, e posibil să scape nedetectate, sau
corectarea să funcţioneze greşit.
Presupunem ı̂n cele ce urmează că alfabetul cananului este S = {0, 1}
Erorile pot fi:

• erori individuale care schimbă valoarea unui bit din 0 ı̂n 1 sau reciproc;

• rafale de erori care schimbă o parte dintr-un şir de bitı̂ (nu neapărat toţi).
Lungimea rafalei este numărul de biţi dintre primul şi ultimul bit modificat;

• erori de sincronizare care determină pierderea unui bit sau introducerea unui
bit, ı̂mpreună cu decalarea corespunzătoare a biţilor următori.

Mai multe erori pot afecta acelsăi bloc de biţi.


Nu ne vom ocupa ı̂n cele ce urmează de erorile de sincronizare.
Presupunem cuvinte de cod de lungime n biţi. Mulţimea cuvintelor de
cod este W ⊆ V = {0, 1}n . Pentru a putea detecta erorile, trebuie ca eroarea să
nu schimbe un cuvânt de cod ı̂n alt cuvânt de cod. ci să schimbe cuvântul de
cod ı̂ntr-un cuvânt invalid.
P
Punem d(v1 , v2 ) = ni=1 |v1i − v2i | adică distanţa ı̂ntre două cuvinte este
numărul de erori individuale necesare pentru a schimba primul cuvânt ı̂n al doilea.
Punem dmin (W ) = min d(v1 , v2 .
v1 ,v2 ∈W,v1 6=v2
Un cod este capabil să detecteze k erori individuale dacă dmin ≥ k + 1.
Un cod este capabil să corecteze k erori individuale dacă dmin ≥ 2k + 1.

Coduri polinomiale F2 = ({0, 1}, ⊕, ·) este corp (⊕ este operaţia sau exclusiv,
iar · este operaţia şi).
Unui cuvânt din V = {0, 1}n ı̂ se asociază poliniomul (de grad cel mult
n−1) v1 ·X n−1 ⊕v2 ·X n−2 ⊕· · ·⊕vn Acesta este un polinom peste F2 . Polinoamele
peste orice corp păstrează multe din proprietăţile polinoamelor “obişnuite”, ı̂n
particular se poate defini la fel adunarea, scăderea şi ı̂nmulţirea, şi are loc teorema
ı̂mpărţirii cu rest.
Pentru a defini W , se alege un aşa-numit polinom generator g(X). W se
defineşte ca mulţimea polinoamelor (din V ) divizibile cu g(X).
Dacă m = grad(G(X)), un cuvânt de cod poartă n−m biţi de informaţie
şi m biţi redundanţi (de control).
4.3. Coduri detectoare şi corectoare de erori 27

Construcţia cuvântului de cod se face: v(X) = i(X) · X m ⊕ r(X), unde


i(X) este polinomul corespunzător informaţiei utile, iar r(X) este restul ı̂mpărţirii
lui i(X) · X m la g(X).
Verificarea cuvântului recepţionat v 0 (X) se face prin ı̂mpărţire la g(X)
şi verificare dacă restul este 0. Informaţia utilă este primii n − m biţi din v 0 (X).
Dacă se doreşte corectarea erorilor, se observă că poziţiile erorilor nu
depind decât de restul ı̂mpărţirii lui v 0 (X) la g(X).
28 Capitolul 4. Codarea informaţiei
29

Capitolul 5

Nivelul legăturii de date


30 Capitolul 5. Nivelul legăturii de date
31

Capitolul 6

Nivelul retea şi nivelul transport

Reţele:

• comutare de circuite

• comutare de pachete

Reţele cu comutare de pachete:

• reţele cu dirijare independentă a pachetelor

• reţele cu circuite virtuale

6.1 Algoritmi de dirijare


Criterii:

• numar de noduri intermediare (hopuri)

• distanta (geografica)

• cost

• ı̂ncărcare

Tehnici de calcul a tabelelor de dirijare

• informare completă privitoare la legaturile existente

• tabele de distanţe (v. pb. numărării la infinit)

• dirijarea pentru multicast — arbori de acoperire minimi

• dirijare ierarhică

• inundare
32 Capitolul 6. Nivelul retea şi nivelul transport

6.2 Controlul congestiei


• aruncarea pachetelor — cele mai vechi sau cele mai noi?

• limitarea traficului: galeata gaurita, galeata cu jeton

• semnalizarea ı̂ncărcării

6.3 Protocolul IP şi protocoalele auxiliare


Antetul IP:

• adresa sursă şi destinaţie — cu prefix de reţea

• timp de viaţă (număr de salturi)

• optiuni de inregistrare a salturilor (pentru traceroute)

• protocolul de nivel superior (TCP, UDP, ICMP)

Forma tabelelor de dirijare statice O adresă IP se asociază unei interfeţe


de reţea
Tabela de dirijare are ı̂nregistrări de forma (IP, masca, ruta)

Rezolvarea adresei — ARP Scop: gasirea adresei fizice corespunzătoare


unei adrese IP.
Modalitate: se trimite un pachet broadcast in reţeaua Ethernet.

ICMP Scop: diagnostic şi informare legat de rute.


Pachere ICMP mai des utilizate:

• cerere ecou, răspuns ecou;

• informare eşec dirijare

• redirectare (forma extrema de corectare a tabelelor de dirijare)

RARP, BOOTP, DHCP Scop: informare cu privire la propria adresă IP.

6.4 Nivelul transport


Rol: să facă adaptarea de la primitivele de comunicaţie prezentate aplicaţiei
la posibilităţile reţelei.
Problema: conexiune sigură peste reţea bazată pe dirijare independentă
a pachetelor.
Soluţia (TCP): se numerotează pachetele (octeţii, ı̂n TCP), şi se confirmă
independent fiecare număr de pachet.
Numerele de secvenţă sunt independente pentru cele două sensuri.
Probleme suplimentare:
6.5. Reţele eterogene şi reţele private 33

• ı̂nchiderea şi redeschiderea conexiunii

• căderea unuia din capete, şi uitarea numrelor de secvenţă folosite

6.5 Reţele eterogene şi reţele private


• tunelarea

• translaţia adreselor

6.6 Reţele mobile


• redirectarea cu agenţi locali şi agenţi pentru straini
34 Capitolul 6. Nivelul retea şi nivelul transport
35

Capitolul 7

Metode şi protocoale


criptografice

7.1 Deziderate
confidenţialitate un mesaj să nu poată fi ı̂nţeles decât de către destinatarul
dorit;

integritatea mesajelor destinatarul unui mesaj să poată verifica dacă mesajul
este identic cu cel emis de emiţătorr (că nu a fost modificat pe traseu);

autentificarea sursei destinatarul să poată verifica identitatea emiţătorului


unui mesaj;

nerepudiabilitate emiţătorul unui mesaj să nu poată nega ulterior emiterea


unui mesaj (destinatarul să poată proba ı̂n justiţie faptul că emiţătorul a
emis un anumit mesaj).

Note:

1. Verificarea integrităţii şi autentificarea au sens doar ı̂mpreună.

2. Nerepudiabilitatea nu are sens fără verificarea integrităţii şi autentificarea


sursei.

7.2 Asigurarea confidenţialiţăţii


7.2.1 Criptografia simetrică
Este cifrarea clasică, ı̂n care un mesaj dat, numit text clar (eng: plain-
text), este transformat ı̂ntr-un aşa-numit text cifrat (eng:ciphertext), astfel ı̂ncât
numai cineva care cunoaşte un anumit secret să poată reconstitui textul clar
având la dispoziţie doar textul cifrat.
În general, algoritmii folosiţi la cifrare şi la descifrare sunt presupuşi
cunoscuţi de toată lumea; secretul este un parametru al algoritmului, numit
cheie (eng: key).
36 Capitolul 7. Metode şi protocoale criptografice

Notă: Ideea este că elaborarea şi implementarea unui algoritm nou cere
un efort intens şi implică mai multe persoane; de aceea e greu de păstrat secretul
şi e şi mai greu de schimbat algoritmul oridecâteori el devine cunoscut din afară.
În plus, publicând algoritmul, există şanse mari ca, dacă acesta este vulnerabil,
să aflăm de la cineva care doreşte doar gloria şi eventual banii unei recompense,
nu secretele păzite de algoritm.
Cifrarea se scrie m = ck (p), unde p este textul clar, m este textul cifrat,
k este cheia, iar c este funcţia (algoritmul) de cifrare.
Descifrarea se scrie p = dk (m). Pentru ca descifrarea să fie posibilă,
trebuie ca dk (ck (p)) = p, ∀p, ceea ce implică cerinţa ca ck să fie injectivă.
Notă: În criptografia simetrică, adesea ck este bijectivă (atunci ck şi dk
sunt una inversa celeilalte) şi dk este posibil de folosit pentru cifrare ı̂n locul lui
ck .
Atacuri posibile:
atac cu text cifrat: intrusul dispune de textul cifrat şi doreşte obţinerea tex-
tului clar corespunzător;
atac cu text clar cunoscut: intrusul dispune de perechi (pi , mi ) de text clar
şi textul cifrat corespunzător, plus un text cifrat m 6= mi pentru care doreşte
obţinerea textului clar corespunzător;
atac cu text clar ales: ca şi ı̂n cazul precedent, dar ı̂n plus intrusul poate alege
pi .
În general, un sistem criptografic sigur trebuie să reziste la atac cu text
clar ales. Ca o consecinţă, funcţia de cifrare, văzută ca fiind parametrată cu
textul clar şi având ca argument cheia, trebuie să fie dificil inversabilă (eng:
one-way), adică a găsi cheia cunoscând textul clar dat şi textul cifrat rezultat să
necesite cautare aproape exhaustivă ı̂n spaţiul cheilor.
Există şi protocoale care prevăd explicit chei de unică folosinţă (cheia
se schimbă la fiecare mesaj); la astfel de protocoale atacul cu text clar cunoscut
este imposibil.
Un astfel de sistem este cifrarea cu cheie acoperitoare: cheia este un
şir aleator de biţi de lungime egală cu a mesajului, iar cifrarea este operaţia
xor ı̂ntre fiecare bit din mesaj şi bitul corespunzător din cheie. Un argument
probabilistic simplu arată că cunoaşterea textului cifrat nu aduce nici o informaţie
asupra textului clar. Dezavantajul metodei este că cheia este lungă şi nu poate
fi refolosită (ı̂n cazul refolosirii cheii, mecanismul de cifrare este uşor de spart).

7.2.2 Utilizarea practică a cifrurilor bloc


Unele din metodele de cifrare pot cifra doar blocuri de lungime fixa (de
ex. 64, 128 sau 256 de biţi). Există câteva metode standard de utilizare a unui
astfel de cifru pentru a cifra o cantitate arbitrară de text:
ECB — Electronic Code Book: Textul clar se ı̂mparte ı̂n blocuri de lungime
egală cu blocul folosit de algoritmul de cifrare. Ultimul bloc se completează
cu biţi aleatori. Fiecare bloc se cifrează apoi independent de celelalte.
Este metoda cea mai simplă, dar are câteva dezavantaje:
7.2. Asigurarea confidenţialiţăţii 37

• pentru o cheie fixată, un fragment de text clar ı̂ncepând de la o poziţie


multiplu de lungimea blocului se cifrează totdeauna la fel; acest fapt
poate permite atacuri cu text clar cunoscut dacă există fragmente de
text clar care se repetă frecvent;
• un intrus care permută blocurile de text cifrat va obţine permutarea blo-
curilor corespunzătoare de text clar, chiar dacă nu ı̂ntelege nimic din
textul cifrat. Deşi este citat frecvent, acesta nu este propriu-zis un dez-
avantaj al metodei ECB: un algoritm de cifrare are ca scop păstrarea
confidenţialităţii mesajului, nu controlul integrităţii.
CBC — Cipher Block Chaining: Ca şi la ECB, textul clar se ı̂mparte ı̂n
blocuri şi ultimul bloc se completează cu biţi aleatori. În plus, se alege un şir
de biţi aleatori de lungimea unui bloc; acesta se numeşte vector de iniţializare.
Vectorul de iniţializare se transmite separat sau se stabileşte după o regulă
oarecare. Se efectuează xor pe biţi ı̂ntre vectorul de iniţializare şi primul bloc
de text clar; rezultatul se cifrează şi se trimite. Apoi, se face xor ı̂ntre fiecare
bloc de text clar şi blocul precedent de text cifrat, şi rezultatul se cifrează şi
se transmite destinatarului.

7.2.3 Numere aleatoare


Un sistem criptografic utilizează numere aleatoare, ı̂ntre altele pentru
generarea cheilor şi pentru protocoale de autentificare de tip provocare-răspuns.
Spre deosebire de generatoarele de numere aleatoare pentru alte scopuri,
generatoarele de numere aleatoare pentru scopuri criptografice este necesar să fie
imprevizibile, chiar pentru cineva care cunoaşte metoda de generare şi chiar o
parte din numerele generate.
Metode folosite:
Generatoare fizice: utilizează un fenomen fizic destul de aleator (este similar
aruncării unui zar). Exemple: zgomotul termic pe un rezistor sau pe un semi-
conductor, dezintegrarea unei substanţe radioactive, curenţii de aer formaţi
ı̂n interiorul carcasei unui harddisc.
În lipsa unui generator fizic “adevărat”, se utilizează acţiunile utilizatorilor
asupra tastaturii sau mouse-ului, ı̂ncărcarea sistemului, sosirea pachetelor pe
interfaţa de reţea. Sunt necesare diverse prelucrări pentru a putea obţine
din aceste surse un şir de numere aleatoare de calitate; de asemenea, trebuie
ca cel puţin o parte din sursele enumerate mai sus să nu fie controlate sau
observate de inamic.
Numere pseudoaleatoare: pentru alte aplicaţii decât cele criptografice, se ge-
nerează numere pseudo-aleatoare după următoarea schemă: există o variabilă
s care ţine starea internă a generatorului. Când aplicaţia are nevoie de un
număr aleator, numărul aleator este extras din starea internă: rt = f (st );
de obicei se extrag o parte din biţi. Apoi, starea internă este actualizată cu
ajutorul unei funcţii care “amestecă” bine starea internă: st+1 = g(st ). Un
astfel de generator se spune că este generator de numere pseudoaleatoare.
Pentru a folosi un generator de numere pseudoaleatoare ı̂n scopuri criptgrafice
este necesar să fie indeplinite mai multe condiţii:
38 Capitolul 7. Metode şi protocoale criptografice

1. Starea iniţială (eng: seed) trebuie generată cu un generator fizic, altfel


intreg şirul este previzibil;
2. Starea internă trebuie să aibă un număr suficient de mare de biţi pentru
a rezista unui atac prin forţă brută;
3. Funcţiile f şi g să fie dificil inversabile, altfel cineva care ar obţine o parte
din numerele din şir ar putea fi capabil să afle restul şirului. De obicei este
necesar de asemenea ca cineva care reuşeşte să obţină (de exemplu, dintr-
un core dump) starea internă, să nu fie capabil să calculeze numerele ce
au fost generaţe până ı̂n acel moment.

7.2.4 Criptografie asimetrică (cu cheie publică)


Criptografia asimetrică presupune următoarele:

• Cifrarea şi descifrarea nu folosesc aceeaşi cheie, ci folosesc chei diferite, ı̂n
pereche. Vom avea m = ckc (p) şi p = dkd (m).

• Din cheia folosită la descifrare se poate genera uşor cheia corespunzătoare


pentru cifrare; transformarea inversă este ı̂nsă foarte dificilă: kc = f (kd ),
f bijectivă, şi a calcula x = f −1 (y) implică a verifica pentru aproape toate
valorile posibile pentru x dacă f (x) = y.

• Găsirea lui p cunoscând doar m şi kc este la fel de dificilă ca şi găsirea lui kd
cunoscând kc .

În aceste condiţii, receptorul va genera o pereche kd , kc şi va putea face


publică kc . Emiţătorul poate cifra un mesaj folosind kc , şi numai posesorul lui
kd ı̂l va putea descifra. De notat că, dacă se doreşte comunicaţie bidirecţională,
este necesară câte o pereche de chei (kc , kd ) pentru fiecare sens.
Notă: Algoritmii criptografici asimetrici sunt mult mai lenţi decât cei
simetrici; din acest motiv, comunicaţia propriu-zisă se cifrează de obicei cu o
metodă simetrică, şi doar cheia de cifrare (sau alte obiecte mici, impuse de pro-
tocoale de autentificare) se cifrează folosind metode asimetrice.

7.3 Autentificarea originii şi controlul integrităţii


7.3.1 Funcţii de dispersie criptografice
O funcţie de dispersie (eng: hash function) este ı̂n general o funcţie h care
asociază unui şir de biţi m de o lungime oricâte de mare, o valoare ı̂ntreagă ı̂ntr-
un interval de forma [0, 2n ) cu n fixat (sau echivalent, un şir de biţi de lungime
n); ı̂n plus, se cere ca pentru sirurile care apar in problema unde se foloseşte
funcţia de dispersie, două şiruri distincte să nu aibă aceeaşi valoare a funcţiei de
dispersie cu probabilitate semnificativ mai mare de 2−n .
De la o funcţie de dispersie criptografică se cere ı̂n plus:

1. dându-se h(m), să fie dificil de regăsit m. Eventual, dificultatea să se păstreze
chiar ı̂n cazul cunoaşterii unei părti din m.
7.3. Autentificarea originii şi controlul integrităţii 39

2. dându-se un şir m, să fie dificil de găsit un al doilea şir, m0 6= m astfel ı̂ncât
h(m) = h(m0 ).

3. să fie dificil de găsit m1 6= m2 cu h(m1 ) = h(m2 ).

De remarcat că cele trei condiţii sunt diferite, deşi condiţia 3 o include
pe 2.
Exemple de funcţii: md5 (ieşire 128 biţi), sha1 (ieşire 160 biţi)

7.3.2 Autentificarea mesajelor


Pentru a putea trimite mesaje autentificate, trebuie ca fie emiţătorul şi
receptorul să partajeze o cheie secretă k folosită ı̂ntr-un algoritm simetric, fie
emiţătorul să aibă o cheie secretă kd a cărei cheie publică corespunzătoare kc să
o aibă receptorul.
Într-o prezentare simplificată, emiterea de mesaje autentificate merge pe
una din schemele (m desemnează mesajul de trimis, h desemnează o funcţie de
dispersie criptografică:

• Emitătorul trimite (m, s), unde s = ck (h(m)); receptorul primeşte (m, s) şi
verifică dacă s = ck (h(m)).
Mai adesea, se foloseşte o varianta ı̂n care funcţia de dispersie criptografică
ı̂nglobează şi cifrarea; o asemenea funcţie se numeşte cod de autentificare
(eng: hash message authentication code — HMAC). În varianta aceasta,
emiţătorul calculează s = hk (m), unde hk este funcţia cod de autentificare
cu cheia k; el trimite (m, s). Receptorul primeşte (m, s) şi verifică dacă
s = hk (m).

• Presupunând că funcţia de cifrare a unui sistem asimetric este şi surjectivă
(pe o multime cunoscută), emiţătorul calculeză s = dkd (h(m)) şi trimite
(m, s). Receptorul primeşte (m, s) şi verifică dacă ckc (s) = h(m).
40

Index

A
AM, Vezi modulaţie ı̂n amplitudine

B
bandă
laterală, 17

F
FM, Vezi modulaţie, ı̂n frecvenţă
frecvenţa
purtătoare, 16–17

M
modulaţie
ı̂n amplitudine, 16
ı̂n fază, 17
ı̂n frecvenţă, 17

P
purtătoare, Vezi frecvenţa, purtătoare