Documente Academic
Documente Profesional
Documente Cultură
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
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
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:
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:
Deziderate optionale:
• confidentialitate
• autentificare
Capitolul 2
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.
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;
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);
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ţă.
• ı̂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.
Numarul portului:
• 16 biţi (1–65535)
• porturile TCP (SOCK STREAM) sunt independente de porturile UDP (SOCK DGRAM)
struct Cerere {
char denumire[30];
int cantitate;
};
Cerere c;
...
send(sd, &c, sizeof(c), 0);
2.4. Asigurarea concurenţei 11
Probleme:
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:
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);
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.
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:
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.
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.
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
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.
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.
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.
Capitolul 4
Codarea informaţiei
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.
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).
0 1
a
0 1
c
0 1
d b
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.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 .
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.
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
a b c d a c 0 1
b d
a 0 1 0 1
c a
0 1 0 1
b d c
0 1
b d
• 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.
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
Capitolul 5
Capitolul 6
Reţele:
• comutare de circuite
• comutare de pachete
• distanta (geografica)
• cost
• ı̂ncărcare
• dirijare ierarhică
• inundare
32 Capitolul 6. Nivelul retea şi nivelul transport
• semnalizarea ı̂ncărcării
• translaţia adreselor
Capitolul 7
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);
Note:
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).
• Cifrarea şi descifrarea nu folosesc aceeaşi cheie, ci folosesc chei diferite, ı̂n
pereche. Vom avea m = ckc (p) şi p = dkd (m).
• Găsirea lui p cunoscând doar m şi kc este la fel de dificilă ca şi găsirea lui kd
cunoscând kc .
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 ).
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)
• 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