Notițe Curs CB PCom
Contribuții notițe curs
Oricine poate contribui pentru a îmbunătăți notitele de curs. Textul laboratoarelor îl găsiti în acest repo. În partea de sus dreaptă a fiecărei pagini există un buton de edit pe care îl puteți folosi pentru a sugera modificări. Va recomandam LanguageTool ca addon de corectura a textului.
Introducere
Orice rețea implică existența unei conexiuni stabilite între entitățile aflate la capetele canalului de comunicare (sender & receiver); această conexiune facilitează transmisia datelor, fiind implementată atât prin medii fizice, cât și prin medii wireless.
O conexiune este definită prin următoarele proprietăți:
-
latență (latency) - cât de repede se transmite un mesaj dintr-un punct A într-un punct B
-
lățime de bandă (bandwidth) - cât de multă informație se transmite dintr-un punct A intr-un punct B
- Medii fizice

- Exemplu de conectare a 5 puncte în mediul fizic:

- Medii wireless

Observație : prin conexiunea wireless nu se transmit doar date, ci și adresa punctului din care se comunică informația, și adresele punctelor către care se comunică informația.
Datele se transmit întotdeauna corect și complet indiferent de mediul de transmitere?
- În funcție de mediul de transmitere a informației, ne putem confrunta într-o frecvență mai mare sau mai mică cu fenomenul de pierdere a datelor (package loss).
OSI Stack

Cursul 3
1. Legătura de date
PROTOCOL = set de reguli pe care sender-ul/receiver-ul le repetă
Protocol privind maparea bit-symbol și frecvența de transmisie:

Exemplu de protocol - Ethernet
2. Formatul frame-ului Ethernet. Încapsulare. PPPoE (Point-to-Point over Ethernet)
IEEE (The Institute of Electrical and Electronic Engineers) - organizația care realizează standardele pentru protocoale Ethernet.
- Encodarea Manchester - realizează suma dintre semnalul util si clk, biți encodați de tranziție

Ethernet - 4 perechi de fire electrice ⭢ pentru standardul de 10Mb/s se folosesc doar 2 perechi
Cablu Ethernet:
- 2 fire A → B
- 2 fire B → A
- 1 bit la fiecare 100 nano-secunde → 1 bit/symbol
10Mb/s = 10 * 10^6 / s ↔ 1 / 10^7 s → timpul necesar pentru transmiterea unui bit ⭢ 10^2 nano-secunde ⭢ 1b / 100ns pentru Ethernet
Transmisie - least significant bit ⭢ most significant bit ⮕ trebuie citit invers

Bandwidth - viteza de transmisie a unui link
ex. Ethernet - pentru 100 de bytes date utile
10 Mb/s = THROUGHPUT (câți biți intră pe fir) → \frac{100}{120} = 8,4 Mb/s = GOODPUT (câți biți sunt utili din cei transmiși)
Obs. Durata/dimensiunea asociată transmisiei ⭢ crește probabilitatea de corupere a biților

Obs. Layerele din stivă trebuie să poată funcționa independent.
3. Protocoale de rețea:
- HDLC (High-level Data Link) - destul de generic (nu depinde de PHY) încât să meargă pe orice nivel fizic.

- Ethernet - depinde de PHY, deci nu este la fel de generic.
- Fibră optică - legături fizice PTP (point-to-point) ⮕ PPProtocol
- WLAN - legătură broadcast, e nevoie de adresare (sursă/destinație), throughput scăzut
Obs. - Inițial Ethernet-ul folosea broadcast, apoi a trecut la Switched Ethernet.
The modern Ethernet - point to multipoint

-
DST MAC - medium access control, câmpuri encodate prin fir, scris în hexa
-
FCS - Frame Check Sequence
-
Dimensiune validă - minim 64 de bytes ⮕ PAYLOAD Size = 48 bytes - 9KB
!!! Cadrul se termină când începe următorul IFG (0V) ⮕ te duci înapoi cu 4 bytes.
API Ethernet - send(MAC, DST, ETH_TYPE, buffer, LEN)
⭢ multiplexare ⭢ ETH ⭢ demultiplexare ⭢ ETH_TYPE (specifică cui i se transmit pachetele la demultiplexare) ⭢ internet ⭢ SWITCH
CAM Table (Content Addressable Memory) - tabelă pentru a reține traficul din SWITCH
SWITCH - dacă la trimiterea pachetului nu se cunoaște portul detinație, celelalte device-uri verifică MAC-ul și dacă nu le este adresat, aruncă pachetul.
4. Adrese nivel de legătură

-
Transport - asigură trnsmisia unformă a pachetelor de dimensiune arbitrară (TCP/UDP)
-
Network - conectează instanțe din rețele diferite (adrese independente - best effort de transmisie) (IP)
-
DL (Data Link Layer) - send/receive frames
-
PHY (The Physical Layer) - send/receive bits
-
DL, PHY - conexiune prin același tip de legătură fizică (Ethernet/WLAN)
Legături de date. Detecția și corectarea erorilor.
Din diverse cauze, în timpul transmiterii de date pot apărea fenomene ce duc la coruperea biților, cu alte cuvinte, la inversarea valorii acestora. Pentru a contracara acest fenomen și pentru a menține consistența datelor transmise se pot aplica două soluții:
- mecanisme de detecție
- mecanisme de corecție
Ambele metode se bazează pe adăugarea de "redundanță" în cadrul frame-urilor transmise, adică introducerea unor biți adiționali ce ajută la identificarea erorilor.
Principala diferență între cele două constă în ce se întâmplă cu pachetul la receptare. Mecanismul de detecție duce la aruncarea pachetului primit și trimiterea unei cereri de retransmisie, pe când cel de corecție aplică un set de reguli pentru a corecta erorile.
Pe legături de distanță mică poate fi mult mai eficient să retrimitem un pachet decât să încercăm să-l corectăm.
Ethernet:
ETH HEADER PAYLOAD FCS - frame check sequence = 32 bits
______________________ _____________ _____
|-----|-----|----------|-------------|-----|
| DST | SRC | ETH TYPE | | |
|-----|-----|----------|-------------|-----|
↳ biți redundanți
Bitul de paritate
Dacă se vrea %n cu n > 2, sunt necesari biți redundanți suplimentari.
Checksum
Checksum este o metodă de detecție ce constă în însumarea octeților mesajului ce trebuie transmis.
Pe send se trimite ~CHECKSUM (checksum negat), iar pe receive se mai calculează odată CHECKSUM pe mesajul primit.
Mesajul este corect <=> ~CHECKSUM + CHECKSUM = 0
Implementare checksum (din laborator):
uint8_t simple_csum(uint8_t *buf, size_t len)
{
if (!buf) return 0;
uint8_t sum = 0;
for (int i = 0; i < len; i++) {
sum += buf[i];
}
return sum % 256;
}
Ciclic Redundancy Check
Detectează orice rafală (secvență de biți consecutivi) de erori cu lungime < 32 biți și orice număr impar de erori.
Implementare a CRC32 (din laborator):
uint32_t crc32(uint8_t *buf, size_t len)
{
uint32_t crc = ~0;
const uint32_t POLY = 0xEDB88320;
for (int i = 0; i < len; i++) {
crc ^= *buf++;
for (int bit = 0; bit < 8; bit++) {
if (crc & 1)
crc = (crc >> 1) ^ POLY;
else
crc >>= 1;
}
}
crc = ~crc;
return crc;
}
Cod corector de erori
1 1 0 0 1 1 0 0 | -> Se ia bitul majoritar
/ \ / \ / \ / \ / \ / \ / \ / \ | => orice eroare de un singur bit
111 110 000 000 111 101 010 000 | va fi garantat corectată
\ / \ / \ / \ / \ / \ / \ / \ / |
1 1 0 0 1 1 0 0 |
Cod Hamming
Inventat de Richard Hamming în 1950, codul Hamming este o metodă de corectare a erorilor ce constă în aplicarea următorilor pași:
Pentru codificare:
-
Codificarea în sistem binar a pozițiilor biților
-
Pe pozițiile care nu au index putere a lui 2 se vor pune biții corespunzători mesajul de transmis (biți de date)
-
Pe pozițiile cu index putere a lui 2 urmează să se regăsească biții de paritate ce vor fi calculați astfel:
- Se reține poziția pe care se află valoarea 1 în reprezentarea binară a indexului bitului de paritate
- Se execută XOR între toți biții de date ce au în reprezentarea binară a indexului valoarea 1 pe aceeași poziție cu cea anterior reținută
- Rezultatul final reprezintă valoarea bitului de paritate
- Se reia procesul pentru fiecare bit de paritate
-
Odata găsiți acești biți mesajul a fost codificat și este gata să fie transmis
Pentru corecție:
- La recepție este posibil ca pe parcursul transmisiei să se fi corupt unul sau mai mulți biți. Codul Hemming poate corecta orice eroare de maxim 2 biți.
- Pentru a face asta se recalculează biții de paritate, iar indicele bitului corupt va fi egal cu suma indicilor biților de paritate care au ieșit diferit după recalculare.
Exemplu Hemming(7,4)
d - bit de date
r - bit de paritate
*If it's too fast you can adjust the playback speed.
Bibliografie
- Computer Networking : Principles, Protocols and Practice
- Networking tutorial, primele 6 clipuri.
- Hamming code
Congestion control
Este un algoritm executat independent pentru fiecare conexiune. Acesta ajustează CWND (Congestion Window) folosind feedback-ul din rețea (ACK-uri).
Algoritmul New RENO
Inițial slow_start_threshold are valoarea infinit.
- ON_ACK():
if(CWND < ssthresh) //slow-start CWND++; //creștere exponențială else //congestion avoidance CWND += 1/CWND;
- ON_LOSS():
CWND /= 2; ssthresh = CWND;
- ON_TIMEOUT():
ssthresh = CWND/2; CWND = 1;
Fairness (Chiu-Jain diagram)
Reprezintă un grafic în care apare CWND a doi senderi.
W (RTT) = o unitate pentru fiecare pachet
Pentru linerate avem:
- (BDP + BUFFER) / 2 >= BDP
- BUFFER >= BDP
Generez loss pentru a vedea ce capacitate am. Pentru echitabilitate(fairness) scad rata de transmisie, dar buffer-ul trebuie să fie foarte mare ca să nu pierd performanță.
BW = CWND * MSS / RTT
1 loss la w + w + 1 + ... + 2w pachete => w * 3w / 4 pachete transmise
p = 1 / (3 * w^2 / 4) => w^2 = 4 / 3p => w = √ (4 / 3p) <=> aceeași fereastră pentru ambii senderi; aceeași pierdere și același throughput
p * CWND = probabilitatea să pierd un pachet
∆ = (1 - p) * 1 - p * CWND * (CWND / 2), p ≈ 0
∆ = 0 => se scoate CWND
Exerciții:
-
B = 1 Gbps
S1, S2, RTT 10 ms
BS1, BS2 = ?
CWNDS1 = CWNDS2 = √ (2 / p) => BS1 = BS2 = √ (2 / p) * MSS / RTT
BS1 + BS2 = B -
Diferă RTT:
RTTS1 = 1 ms
RTTS2 = 10 ms
CWNDS1 = CWNDS2 = CWND = √ (2 / p) => BS1 = BS2 = √ (2 / p)
BS1 = CWND * MSS / 1ms (1)
BS2 = CWND * MSS / 10ms (2)
Din (1) și (2) => BS1 / BS2 = 10
RTT mic => B mai mare (trimite mai repede)
RTT = 1ms
C1 + C3 <= 1 Gbps
C2 + C3 <= 1 Gbps
C1 =
√ (2 / p1)
* MSS / RTT (1)
C2 =
√ (2 / p2)
* MSS / RTT (2)
C3 =
√ (2 / (p1 + p2))
* MSS / RTT (3)
Din (1), (2) și (3) => C1, C2 ≈
√ (2 / p)
;
C3 ≈
√ (1 / p)
=> C1 / C3 = C2 / C3 =
√ 2
=>
C3 * (
√ 2
+ 1) = 1 Gbps => C3 = 1000 Mbps / 2,41 => nu se împarte egal
Cursul 12 - World Wide Web
Domain Name System (DNS): nume -> IP
- protocol peste UDP
- nivel APP
File Transfer Protocol (FTP)
- protocol peste TCP
- protocol peste TCP
Web
Standardized General Markup Language (SGML) -> apărut in 1950
- referențiere a documentelor pe aceealși mașină
- 2 tipuri de entități: Clienți (browser) + Servere (APACHE, IIS)

Componente WWW:
1. Adresare: Uniform Resource Identifier - mod unic de a identifica informația
2. HTML: Hypertext Markup Language - cum se afișează informația
3. HTTP: Hypertext Transfer Protocol - mod de a transmite cereri, peste TCP
Serializarea HTTP


HEADER HTTP:
METHOD PATH HTTP_VERSION
HEADERS (1 pe linie)
[MIME]
________ (linie goală)
(finalul request-ului)
TCP [GET/vasile HTTP/1.0
HOST: www.upb.ro
USER AGENT: CHROME...
\n \n
]

PRINTRE REPLY_HEADERS:


Cursul 13
1. Domain Name System (DNS)
- sistem distribuit
- transforma NUME -> ADRESE
- serviciu care traduce numele de domenii in adrese IP
- ofera confort in accesarea de site-uri web
Fiecare host dintr-o rețea are o adresă IP unică.
HOST.txt
Nume IP -> flat addressing
______ ______ -> numele din HOST.txt trebuie să fie unice
______ ______
______ ______
2.FQDN (Fully Qualified Domain Name)
- label1 . label2 . label3 . ... . labeln . -> ultimul punct reprezintă rădăcina arborelui
- numele unic al unui computer sau host pe internet, conține toate nivelurile superioare, inclusiv numele domeniului de nivel superior (TLD)
Ex. www.upb.ro
- www = numele host-ului
- example = numele domeniului
- com = TLD
Arbore FQDN

- Dacă pică root nameserver nu mai funcționează rețeaua
- "UPB" este subdomeniul lui "RO"
- Fiecare nod este fie un domeniu, fie o gazdă
- Ierarhia permite ca organizații diferite să controleze rețele/domenii diferite
- Orice punct din ierarhie poate răspunde la cererile din subpunctele sale
- Fiecare domeniu are propriul NAMESERVER
- "HOTNEWS.RO" -> definește un domeniu, dar nu e host
- HOST -> frunză a arborelui
- Domeniile trebuie să fie diferite între ele
curs.upb.uk ≠ curs.upb.ro
3. NAME RESOLUTION
- procesul prin care dintr-un nume obținem o adresă IP
Ex. www.cs.upb.ro
- Ne trebuie un IP al unui NAMESERVER

RESOLVER
- un nameserver care face query-uri recursive pentru fiecare cale din arbore -> păstreză cererile într-un cache
- oferă răspunsuri mai rapide clienților
- reduce memoria folosită
UDP PORT 53 -> portul standard pentru serviciile DNS, utilizat pentru consultările DNS care sunt în principal de tip cerere-răspuns, trimise de la client la server
-
HEADER (conține câmpurile) -> IP -> 16 biți
-
QUESTIONS Flag QA -> (0 - query, 1 - answer)
-
ANSWERS OPCODE -> ce operație facem, în general 0 - query
-
AUTHORITY RD -> Recursion Desire
-
ADDITIONAL AA -> Authoritative Answer
RCODE -> codul de eroare
QUESTIONS, ANSWERS, AUTHORITY, ADDITIONAL -> Resource Records (RR)
-
entități de bază în sistemul DNS, folosite pentru a răspunde la cererile DNS, iar fiecare RR identifică o anumită resursă
-
NAME
-
TYPE -> NS - nameserver, A - iPv4, AAAA - iPv6, MX - mail exchanger
-
CLASS - setat pe IN (internet)
-
RDLENGTH - cât de mare e răspunsul
Cursul 14 - Securitatea rețelelor
1. THREAT MODEL
PASSIVE
Amenințările pasive implică interceptarea și monitorizarea traficului de rețea fără a modifica datele transmise.
- SPLITTER - dispozitiv hardware care împarte semnalul pentru monitorizare fără a întrerupe traficul
- TCPDump - software care capturează pachetele de date care traversează rețeaua


ACTIVE
Amenințările active implică modificarea sau întreruperea traficului de rețea.
- Man in the Middle - se bazează pe un punct de routare pe care se face spoofing (R în desenul de mai jos), atacatorul interceptează și eventual modifică comunicarea dintre două părți
- Spoofing - atacatorul își asumă identitatea unei entități de încredere.
- DENIAL OF SERVICE - se referă la resursele limitate (BANDWIDTH, memorie), atacul vizează limitarea resurselor pentru a întrerupe serviciile


2. Primitive de securitate
One-time pad - sistem de criptare în care cheia este aleatorie și la fel de lungă ca mesajul
-
cheia trebuie să fie aleatorie și utilizată o singură dată.
-
cheia trebuie să fie la fel de lungă ca mesajul.
C = M + K (+ = XOR)
A <- C (cyphertext), R (random)
P ~ 50%
-> problemă: securitate, eficiență (cheia are lungimea mesajului)
3. Algoritmi cu cheie simetrică
E(M, K) => C - Criptare
D(C, K) => M - Decriptare
∀ M, K: D(E(M,K), K) = M
Exemple:
-
DES - cheie de 56 de biți
-
RCU
-
AES - cheie de 12811961256 de biți
-
Cha Cha

keysize: 128-256 de biți
encriptare/decriptare rapidă -> 10Gbps/core
4. Algoritmi cu cheie publică
_K = (Kpub -> publică, Kpriv -> secretă)
Exemple:
-
RSA -> fact. nr. prime
-
ECDA -> în practică
∀ M, (Kpub, Kpriv) = M, dacă D(E(M, Kpub), Kpriv) = M
D(E(M, Kpriv), Kpub) = M
5. Algoritmul (SHA - One-way functions)
Funcțiile hash produc un digest fix dintr-un input de dimensiune variabilă, asigurând integritatea datelor.
f: M -> DIGEST -> eficient
-
SHA 160
-
SHA2 256
-
MD5

∃ Entități care atestă cheia publică a cuiva => Certificatul
TOFU - Trust of First Use
- Se presupune prima dată că nu vb. cu atacator
- Salvăm local cheia publică
Cursul 15 - Securitatea rețelelor
1. Primitive criptografice
Criptare simetrică: K, E, D (∀) KD(E(M, K)) = M
Criptare asimetrică: (Kpub, Kpriv) E, D (∀) K (∀) M
D(E(M, Kpub), Kpriv) = M
și
D(E(M, Kpriv), Kpub) = M
2. One-way-function
HASH(M) -> digest; computațional imposibil să găsești M având digest
HMAC(M, K) = HASH(M | K) -> Message Authentication Code (MAC)
E(M, K) MAC(E(M, K)) = M(C | K) - Encrypt and then MAC
3. Diffie Helman Key Exchange


TRUST ON FIRST USE

Public Key Infrastructure (PKT)
HOSTNAME -> PUBLIC KEY
- entități terțe de încredere
Certification Authority <-> Registration Authority
Certificat PKT -> se face HASH, se adaugă semnătura
-
Document public
-
Cont -> Asocierea HOSTNAME -> PUBKEY
-> DATA -> EMIT
-> EXP
-> Cine le-a emis
Transport Layer Security
- APP
- TLS
- TCP
HTTPS - folosește TLS, rulează pe portul 443 HTTP - rulează pe portul 40

