Documente Academic
Documente Profesional
Documente Cultură
notite de curs
Radu-Lucian Lupsa
13 octombrie 2005
Cuprins
1 Introducere
1.1 Ce este o retea de calculatoare? . . .
1.2 Problemele abordate n curs . . . . .
1.3 Problemele infrastructurii retelei . . .
1.4 Tipuri de comunicatie . . . . . . . .
1.5 Arhitectura sistemului de comunicatii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
5
6
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
8
9
10
10
10
11
11
3 Nivelul fizic
3.1 Transmisia prin fir . . . . . . . . . . .
3.1.1 Marimi electrice . . . . . . . . .
3.1.2 Semnale . . . . . . . . . . . . .
3.1.3 Banda de trecere . . . . . . . .
3.1.4 Codarea n banda de baza . . .
3.1.5 Transmisia modulata . . . . . .
3.1.6 Multiplexarea n frecventa . . .
3.2 Transmisia prin unde radio . . . . . . .
3.2.1 Propagarea undelor . . . . . . .
3.2.2 Unde nedirijate si unde dirijate
3.3 Transmisia prin fibra optica . . . . . .
3.3.1 Propagarea semnalului . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
14
15
16
16
17
18
18
19
19
19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Codarea informatiei
21
4.1 Notiuni de teoria informatiei . . . . . . . . . . . . . . . . . . . . . 21
4.2 Problema codarii pe canale fara zgomote . . . . . . . . . . . . . . 22
4.3 Coduri detectoare si corectoare de erori . . . . . . . . . . . . . . . 26
5 Nivelul leg
aturii de date
29
CUPRINS
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
32
32
32
33
33
.
.
.
.
.
.
.
.
.
35
35
35
35
36
37
38
38
38
39
Capitolul 1
Introducere
1.1
1.2
1.3
Capitolul 1. Introducere
1.4
Tipuri de comunicatie
Dupa nr. de receptori:
1.5
Capitolul 2
Programarea n retea
introducere
2.1
pe fiecare calculator pot rula mai multe procese, si fiecare proces poate avea
mai multe cai de comunicatie deschise, prin urmare pe un calculator trebuie
sa poata exista la un moment dat mai multe socket-uri active;
o comunicatie poate fi prin conexiune sau datagrame
pentru a identifica partenerul de comunicatie, initiatorul unei comunicatii
trebuie sa furnizeze o adres
a ; formatul acestei adrese poate sa depinda de
tipul retelei (IP, IPX, etc).
API-ul este conceput sa fie independent de tipul exact al retelei (poate
functiona pe retele IP, IPX, local pe unix, etc.)
2.1.1
Creare
socket(proto_family, type, protocol)
type: desemneaza tipul de servicii dorite:
2.1.2
Un socket stream poate sa fie n una din doua stari: neconectat sau
conectat. Un socket neconectat poate avea o adresa fixata sau nu.
Orice socket care participa la o operatie de comunicare trebuie sa aiba o
adresa; daca adresa nu i se fixeaza explicit prin bind(), atunci sistemul i va da
o adresa aleatoare.
Conectarea, pe client:
connect(sock id, addr, addr len) conecteaza socket-ul local sock id cu socketul identificat prin adresa addr. Adresa addr trebuie sa corespunda unui
socket de tip stream neconectat
Conectarea, pe server:
bind(sock id, addr, addr len) fixeaza adresa socket-ului sock id.
listen(sock id, dim coada) fixeaza dimensiunea cozii de asteptare pentru conexiunile catre adresa socket-ului
accept(sock id, addr, addr len) asteapta o cerere de conexiune si returneaza
un nou socket conectat la socket-ul care a cerut conexiunea. Socket-ul original poate fi folosit ulterior pentru a astepta noi conexiuni. Parametrul addr
returneza adresa socket-ului
Comunicatia propriu-zisa:
send(sock id, buf, count, flags) trimite count octeti
recv(sock id, buf, count, flags) receptioneaza cel mult count octeti. Daca
nu exista nici un octet sosit, functia asteapta sosirea a cel putin un octet (este
blocanta). Apoi citeste minimul ntre numarul de octeti sositi si numarul de
octeti ceruti (count). Returneaza numarul de octeti cititi. Returneaza 0
daca emitatorul a nchis conexiunea.
Inchiderea conexiunii:
close(sock id) distruge socket-ul si nchide complet conexiunea atasata (daca
exista)
shutdown(sock id, how) nchide comunicatia, 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. Interfat
a de programare socket BSD
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
Probabil cel putin unul din capete trebuie sa fixeze adresa socket-ului, la
o valoare cunoscuta de partener; pentru aceasta foloseste apelul bind(). Celalalt
capat primeste automat o adresa la prima trimitere de datagrama.
Functii:
10
2.2
Adresarea in internet
Adresa IP:
2.3
Transmiterea mesajelor
Exemplu: clientul anunta scoaterea dintr-o magazie a unei anumite cantitati de marfa. Se trimite un mesaj continand denumirea si cantitatea.
2.3.1
Mesaje binare
Exemplu:
struct Cerere {
char denumire[30];
int cantitate;
};
Cerere c;
...
send(sd, &c, sizeof(c), 0);
11
Probleme:
1. lungimea (numarul de octeti) pe care se reprezinta un int este dependenta
de platforma
2. ordinea octetilor este dependenta de platforma (little endian vs. big endian)
3. alinierea e dependenta de platforma (se poate ca adresa unui ntreg sa trebuiasca sa fie multiplu de 2, 4 sau 8 octeti)
Solutie:
1. se folosesc typedef-urile uint16 t, uint32 t definite n netinet/in.h ; lungimea reprezentarii lor e independenta de platforma;
2. se convertesc la o ordine a octetilor independenta de platforma: functiile
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
2.4
Mesaje text
Asigurarea concurentei
12
13
Capitolul 3
Nivelul fizic
3.1
3.1.1
Sarcina electric
a (Q) masoara cantitatea de electricitate. Este analoaga cantitatii de fluid. Putem masura cantitatea de electricitate (sarcina electrica)
ce trece printr-un conductor ntr-o perioada de timp. Se masoara n coulombi (C).
Intensitatea curentului (I) (numita pe scurt curentul ) masoara sarcina electrica ce trece printr-un conductor mpartita la timpul n care trece. Este
analoaga debitului de fluid printr-o conducta. Intensitatea curentului ce
trece printr-un conductor se masoara ntrerupand conductorul si intercaland
un instrument de masura numit ampermatru. Ampermetrul trebuie sa conduca foarte bine curentul (sa aiba impedanta vezi mai jos cat mai
mica) pentru a perturba cat mai putin circuitul n care masoara. Se masoara
n amperi (A). Intensitatea curentului prin circuite folosite la transmiterea
informatiei este de regula de ordinul zecilor de miliamperi.
Tensiunea electric
a (U) ntre doua conductoare masoara cat de puternic ar fi
impinsa o sarcina electrica aflata n primul conductor catre cel de-al doilea.
Este analoaga diferentei de presiune ntre doua conducte de fluid. Pentru a
masura tensiunea electrica ntre doua conductoare, montam un instrument
numit voltmetru cu o borna conectata la unul din conductoare si cu cealalta
borna legata la celalalt conductor. Voltmetrul trebuie sa fie cat mai aproape
de un izolator sa conduca cat mai putin curent de la o borna la alta
(aidca sa aiba impedanta cat mai mare). Tensiunea se masoara n volti (V).
Tensiunile intre conductoarele folosite pentru transmisia informatiei sunt de
ordinul catorva volti.
Puterea si energia electric
a (P) Un element de circuit la bornele caruia se
aplica o tensiune U si prin care trece un curent de intensitate I de acelasi sens
cu tensiunea primeste o putere P = U I. Daca intensitatea are sens invers
tensiunii, elementul livreaza puterea P = U I circuitului. Puterea se masoara
n watti (W).
14
Energia electric
a (E) Energia masoara produsul dintre puterea primita sau
cedata de un element de circuit si timpul cat are loc fenomenul. Unitatea de
masura n Sistemul International este joule-ul (J), nsa frecvent se foloseste
kilowattora (kWh) (atentie, simbolul kW/h , citit kilowatt pe ora, nu este
corect, desi este folosit curent); un kilowattora este energia primita de un
consumator care primeste o putere de un kilowatt timp de o ora; n consecinta
1kWh = 3600000J.
Elemente de circuit si marimi caracteristice (Nota: fiecare element poate
fi construit n mod deliberat, ns
a comportamentul poate sa apar
a si acolo unde
nu este dorit):
rezistorul si rezistenta (R) Un rezistor este un element de circuit
condensatorul si capacitatea (C) .
bobina si inductanta (L) .
impedanta (Z) si conductanta (G)
surse si consumatori
3.1.2
Semnale
15
p
este 1/10 din puterea emisa si ca tensiunea receptionata este 1/ (10) din
tensiunea emisa.
Atenuarea unui cablu este proportionala cu lungimea, iar puterea si tensiunea
receptionate scad exponential cu lungimea. Daca un cablu are atenuarea
0.1dB/m nseamna ca pe 100m de cablu vom avea o atenuare de 10dB, adica
o reducere de 10 ori a puterii. Pe 30m din acelasi cablu, atenuarea va fi de
3dB, adica 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 facute conductoarele si izolatorul precum si de geometria cablului.
distorsiunile determina semnalul receptionat sa aiba o forma diferita fata de
semnalul emis.
3.1.3
Banda de trecere
16
3.1.4
Prin codare n acest context se ntelege regulile prin care unui sir de biti
de transmis i se asociaza semnalul emis. Codarea cea mai simpla este aceea n
care mpartim timpul n celule de durata fixata (pe care o numim lungimea unui
bit) si, pe durata fiecarui bit semnalul emis va avea o anumita valoare de
exemplu 12V daca bitul are valoarea 1 si 0V daca bitul are valoarea 0.
Receptorul va avea un ceas cu care va determina celulele corespunzatoare
bitilor, si va masura semnalul la mijlocul fiecarei celule de bit. Daca tensiunea
va fi mai mare de, sa zicem, 3V, va decide ca bitul respectiv are valoarea 1, altfel
0.
3.1.5
Transmisia modulat
a
17
1
1
= U0
cos (( 2f )t ) cos (( + 2f )t + )
2
2
adica n urma modulatiei n amplitudine a unui semnal sinusoidal se obtine o
suma de doua semnale sinusoidale avand ca frecvente suma dintre frecventa
semnalului de modulat si frecventa purtatoare si celalalt avand diferenta
celor doua frecvente. In conditii reale, frecventa purtatoare este cel putin de
cateva ori mai mare decat frecventele din spectrul semnalului de modulat.
Spectrul unui semnal modulat n amplitudine va contine frecventa purtatoare
si doua benzi laterale, stanga si dreapta, acestea cuprinzand diferentele, respectiv sumele, frecventelor din spectrul semnalului util cu frecventa purtatoare.
Intrucat spectrul semnalului modulat este simetric n jurul frecventei purtatoare,
de fapt doar una dintre benzile laterale poarta informatie utila. Din acest
motiv, adesea se suprima total sau partial de la transimisie una dintre benzile
laterale.
modulatie n frecvent
a (FM): semnalul transmis are forma
3.1.6
Multiplexarea n frecvent
a
18
3.2
3.2.1
1
d2
optica
3.2.2
19
3.3
3.3.1
20
21
Capitolul 4
Codarea informatiei
4.1
22
4.2
Problema cod
arii pe canale f
ar
a zgomote
rii pe canale fa
ra
zgomote
4.2. Problema coda
23
|S|lk 1
(4.1)
k=1
unde lk sunt lungimile cuvintelor de cod, iar |S| este numarul de simboluri de
cod.
Definitia 4.4 Un cod se spune ca are proprietatea de prefix (sau mai scurt, este
cod prefix) daca nici un cuvant de cod nu este prefix al altui cuvant de cod.
Exemplu:
a 7 0
b 7 101
c 7 11
d 7 100
Unui cod prefix i se poate atasa un arbore n care fiecarui mesaj i corespunde o frunza, muchiile descendente de la fiecare nod sunt etichetate cu simboluri de cod distincte, iar cuvantul de cod al unui mesaj este format din simbolurile
de cod ale muchiilor de pe lantul ce uneste radacina cu frunza atasata mesajului.
Exemplu: fig. 4.2
Teorema 4.5 Orice cod cu proprietatea de prefix este unic decodabil.
Teorema 4.6 Dac
a l1 . . . lk satisac inegalitatea 4.1, atunci exista un cod cu proprietatea de prefix avand lungimile cuvintelor de cod l1 . . . lk .
Constructia: Sortam crescator lungimile cuvintelor (lk ). Construim arborele atasat codului plecand de la radacina. La fiecare nivel, alegem dintre
varfurile de pe acel nivel un numar egal cu numarul cuvintelor de cod de acea
lungime si le acem frunze, atasate mesajelor corespunzatoare. Restul nodurilor
vor ramane noduri interne, si vor da descendenti pe nivelul urmator; fiecare nod
va da |S| descendenti, iar muchiile descendente se vor eticheta cu simboluri de
24
1
0
0
a
0
c
1
0
b
1
d
Figura 4.3: Constructia unui cod prefix cu lungimi fixate ale cuvintelor de cod
cod ntr-o ordine arbitrara. Inegalitatea 4.1 ne asigura ca vom avea la fiecare
nivel suficiente varfuri de atasat mesajelor a caror cuvinte de cod urmeaza sa
aiba acea lungime.
Exemplu: figura 4.3 arata etapa cu etapa constructia unui cod pentru
lungimile l1 = 1, l3 = 2, l2 = 3, l4 = 3. Cerculetele desemneaza nodurile
neatasate unor mesaje, care urmeaza sa produca descendenti pe nivelul urmator.
Observatie: din teoremele din acest paragraf rezulta ca daca avem un cod
unic decodabil pentru niste mesaje putem gasi un cod prefix cu aceleasi lungimi
ale cuvintelor de cod.
Coduri optimale Daca dorim codificarea unei secvente de mesaje sa fie cat mai
scurta, avem nevoie de un cod care sa minimizeze lungimea medie a cuvantului de
cod. Media lungimilor se va calcula ponderat, cu ponderile egale cu probabilitatile
de aparitie ale respectivelor cuvinte de cod.
Definitia 4.7 Un cod optimal este un cod unic decodabil care are cea mai mica
lungimea medie a cuvintelor de cod.
Presupunand ca avem la dispozitie doar doua cuvinte de cod, avem l
H(M ), adica lungimea medeie a cuvantului de cod nu poate fi mai mica decat
informatia medie pe simbol a sursei.
Algoritmul Huffman Daca facem presupunerea ca sursa este ergotic
a, adica
probabilitatea de-a emite un anumit mesaj nu depinde de mesajele precedente si
nici de timp, codul optimal se poate construi prin algoritmul lui Huffman.
Algoritmul Huffman (vezi fig. 4.4) este urmatorul (presupunem |S| = 2,
adica alfabetul canalului are doar doua simboluri):
rii pe canale fa
ra
zgomote
4.2. Problema coda
0.55
0.10
0.55
0.20
0.15
0.55
0.20
0
0
b
1.00
1
0.25
0.45
25
0
0
b
1
1
26
4.3
27
28
29
Capitolul 5
Nivelul leg
aturii de date
30
turii de date
Capitolul 5. Nivelul lega
31
Capitolul 6
Nivelul retea si nivelul transport
Retele:
comutare de circuite
comutare de pachete
Retele cu comutare de pachete:
retele cu dirijare independenta a pachetelor
retele cu circuite virtuale
6.1
Algoritmi de dirijare
Criterii:
32
6.2
Controlul congestiei
6.3
6.4
Nivelul transport
6.5. Ret
ele eterogene si ret
ele private
6.5
tunelarea
translatia adreselor
6.6
Retele mobile
33
34
35
Capitolul 7
Metode si protocoale
criptografice
7.1
Deziderate
7.2
7.2.1
Asigurarea confidentialit
atii
Criptografia simetric
a
Este cifrarea clasica, n care un mesaj dat, numit text clar (eng: plaintext), este transformat ntr-un asa-numit text cifrat (eng:ciphertext), astfel ncat
numai cineva care cunoaste un anumit secret sa poata reconstitui textul clar
avand la dispozitie doar textul cifrat.
In general, algoritmii folositi la cifrare si la descifrare sunt presupusi
cunoscuti de toata lumea; secretul este un parametru al algoritmului, numit
cheie (eng: key).
36
Not
a: Ideea este ca elaborarea si implementarea unui algoritm nou cere
un efort intens si implica mai multe persoane; de aceea e greu de pastrat secretul
si e si mai greu de schimbat algoritmul oridec
ateori el devine cunoscut din afara.
In plus, publicand algoritmul, exista sanse mari ca, daca acesta este vulnerabil,
s
a aflam de la cineva care doreste doar gloria si eventual banii unei recompense,
nu secretele pazite de algoritm.
Cifrarea se scrie m = ck (p), unde p este textul clar, m este textul cifrat,
k este cheia, iar c este functia (algoritmul) de cifrare.
Descifrarea se scrie p = dk (m). Pentru ca descifrarea sa fie posibila,
trebuie ca dk (ck (p)) = p, p, ceea ce implica cerinta ca ck sa fie injectiva.
criptografia simetrica, adesea ck este bijectiv
Not
a: In
a (atunci ck si dk
sunt una inversa celeilalte) si dk este posibil de folosit pentru cifrare n locul lui
ck .
Atacuri posibile:
atac cu text cifrat: intrusul dispune de textul cifrat si doreste obtinerea textului clar corespunzator;
atac cu text clar cunoscut: intrusul dispune de perechi (pi , mi ) de text clar
si textul cifrat corespunzator, plus un text cifrat m 6= mi pentru care doreste
obtinerea textului clar corespunzator;
atac cu text clar ales: ca si n cazul precedent, dar n plus intrusul poate alege
pi .
In general, un sistem criptografic sigur trebuie sa reziste la atac cu text
clar ales. Ca o consecinta, functia de cifrare, vazuta ca fiind parametrata cu
textul clar si avand ca argument cheia, trebuie sa fie dificil inversabila (eng:
one-way), adica a gasi cheia cunoscand textul clar dat si textul cifrat rezultat sa
necesite cautare aproape exhaustiva n spatiul cheilor.
Exista si protocoale care prevad explicit chei de unica folosinta (cheia
se schimba 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
sir aleator de biti de lungime egala cu a mesajului, iar cifrarea este operatia
xor ntre fiecare bit din mesaj si bitul corespunzator din cheie. Un argument
probabilistic simplu arata ca cunoasterea textului cifrat nu aduce nici o informatie
asupra textului clar. Dezavantajul metodei este ca cheia este lunga si nu poate
fi refolosita (n cazul refolosirii cheii, mecanismul de cifrare este usor de spart).
7.2.2
Utilizarea practic
a a cifrurilor bloc
Unele din metodele de cifrare pot cifra doar blocuri de lungime fixa (de
ex. 64, 128 sau 256 de biti). Exista cateva metode standard de utilizare a unui
astfel de cifru pentru a cifra o cantitate arbitrara de text:
ECB Electronic Code Book: Textul clar se mparte n blocuri de lungime
egala cu blocul folosit de algoritmul de cifrare. Ultimul bloc se completeaza
cu biti aleatori. Fiecare bloc se cifreaza apoi independent de celelalte.
Este metoda cea mai simpla, dar are cateva dezavantaje:
t
7.2. Asigurarea confident
ialit
a
ii
37
7.2.3
Numere aleatoare
38
7.2.4
Criptografie asimetric
a (cu cheie public
a)
Criptografia asimetrica presupune urmatoarele:
7.3
7.3.1
t
7.3. Autentificarea originii si controlul integrita
ii
39
7.3.2
Autentificarea mesajelor
40
Index
A
AM, Vezi modulatie n amplitudine
B
banda
laterala, 17
F
FM, Vezi modulatie, n frecventa
frecventa
purtatoare, 1617
M
modulatie
n amplitudine, 16
n faza, 17
n frecventa, 17
P
purtatoare, Vezi frecventa, purtatoare