Traffic Flow in Ethernet Networks

Scopul acestui articol este de a improspata cunostiintele legate de modul in care sunt folosite diferitele tipuri de adresare intalnite in stiva de protocoale TCP/IP.

Vom incepe analiza flow-ului de trafic prin prezentarea succinta a adreselor utilizate in fiecare etapa din procesul de incapsulare.

Haideti sa ne aducem aminte cele doua modele folosite in retelistica: modelul OSI si modelul TCP/IP (model de stiva de protocoale).

Modelul OSI este un model de referinta, folosit la crearea si dezvoltarea de protocoale; este un framework care ne spune ce functii trebuie sa fie indeplinite la fiecare nivel, nu si cum trebuie facut acest lucru, deci modelul OSI nu se refera la un protocol anume, ci la functiile sale. Spre deosebire de modelul OSI, modelul TCP/IP se refera strict la protocoalele utilizate in stiva TCP/IP.

Structura celor 2 modele, precum si corespondenta dintre ele sunt prezentate mai jos.

Modelul OSI

Modelul TCP/IP

APPLICATION

APPLICATION

PRESENTATION

SESSION

TRANSPORT

TRANSPORT

NETWORK

INTERNET

DATA LINK

NETWORK ACCESS

PHYSICAL

Datorita faptului ca modelul OSI prezinta functionarea unei retele intr-un mod mai detaliat, il vom folosi pe el la explicarea modului in care circula datele intre utilizatori.

Vom considera ca exemplu comunicatia dintre un client web (web browser) si un server web. Clientul doreste sa obtina o pagina de pe server, si,  pentru a face acest lucru, trimite o cerere de tip GET. Aceasta cerere este generata la nivelul Application din stiva OSI. Nivelul Application este nivelul cel mai apropiat de noi, de oameni, si reprezinta interfata dintre oameni si retea si resursele sale. In cadrul acestui nivel datele sunt generate de catre sursa comunicatiei si tot aici trebuie sa ajunga  la destinatie, dupa ce a avut loc procesul invers incapsularii, decapsularea.

Datele circula prin stiva OSI de sus in jos, formand procesul de incapsulare. In cadrul acestui proces la fiecare nivel, incepand cu nivelul 4 (Transport)  la datele primite de la nivelul Application se adauga antete (header-e) ce contin informatii suplimentare care au rolul de a ajuta la o comunicatie de succes intre sursa si destinatie.

Prima incapsulare a datelor apare la nivelul Transport. Acest nivel are rolul de a livra datele, numite la acest nivel segmente, de la aplicatia sursa la aplicatia destinatie. Asemanator cu adresele de expeditor si destinatar pe care le scriem pentru o scrisoare, si in lumea retelisticii avem nevoie de o adresa sursa – punctul de origine al datelor si o adresa destinatie – punctul unde trebuie sa ajunga datele.

Adresarea la nivelul Transport se face cu ajutorul numerelor de port. Numarul de port este un camp pe 16 biti cu valori cuprinse intre 0 si 65535. Numarul de port destinatie este numarul de port care identifica aplicatia de pe server cu care clientul doreste sa comunice. Pentru serverul web acest numar de port este 80. Numarul de port sursa se alege din intervalul de numere de port 49152 si 65535.  Este ales un numar aleator, insa de obicei, se alege primul numar de port disponbil. Pentru exemplul nostru vom considera numarul de port 54321. Deci adresarea la nivelul 4  va fi:

Port Sursa

54321

Port Destinatie

80

In drumul lor spre destinatie segmentele ajung la nivelul Network. La acest nivel are loc adresarea logica a datelor,  date care aici poarta denumirea de packets. Cel mai des protocol folosit este protocolul IPv4. Adresa IPv4 este o adresare:

  • ierarhica (contine o portiune de network, care identifica reteaua din care face parte un calculator si o portiune de host, care identifica numarul calculatorului din  cadrul retelei)
  • logica (mutarea unui calculator dintr-o retea intr-o alta retea cere si o schimbare de adresa)
  • globala (IP-ul sursa si IP-ul destinatie nu se schimba in tranzitul datelor de la sursa la destinatie; exceptie face cazul in care se foloseste procesul de natare)

Sa presupunem ca reteaua din care face parte clientul este 192.168.1.0/24 si ca acesta are un IP egal cu 192.168.1.111.

Parametrii cu care se configureaza clientul sunt urmatorii:

  • Adresa IP: 192.168.1.111
  • Subnet mask: 255.255.255.0
  • Default gateway: 192.168.1.1

Adresa default gateway-ului este adresa router-ului R1 de pe interfata fa0/0 a acestuia. Facand parte din aceeasi retea, interfata fa0/0 trebuie sa aiba un IP alocat din acelasi spatiu de adresare, iar acesta va fi 192.168.1.1.

IP-ul sursa il stim, este cel al clientului. IP-ul destinatie va fi IP-ul serverului, care face parte din subnet-ul 192.168.2.0/24 si va fi 192.168.2.222. Serverul va avea ca parametrii de retea urmatoarele informatii:

  • Adresa IP: 192.168.2.222
  • Subnet mask: 255.255.255.0
  • Default gateway: 192.168.2.1

Deci adresarea la nivelul Network va fi:

IP Destinatie

192.168.2.222

IP Sursa

192.168.1.111

Pachetele sunt pasate la nivelul Data Link, unde are loc adresare fizica a datelor, care aici sunt denumite frame-uri. In cadrul retelelor de tip LAN, cea mai des intalnita adresa este adresa MAC, specifica protocolului Ethernet. Adresa de nivel Data Link este:

  • plata (nu are o structura ierarhica)
  • fizica (inscrisa in ROM-ul placii de retea, numita si adresa BIA – Burned in Address datorita acestui lucru)
  • locala (se schimba pe fiecare segment local de retea)

Adresa MAC este o adresa pe 48 de biti si se reprezinta sub forma a 12 cifre hexazecimale. Sa presupunem ca MAC-ul clientului este 000.1111.1111. Adresa MAC destinatie va fi determinata dupa urmatoarele criterii:

  • daca sursa si destinatia fac parte din acelasi subnet, atunci adresa MAC destinatie va fi chiar cea a dispozitivului destinatie
  • daca sursa si destinatia nu fac parte din acelasi subnet, atunci adresa MAC destinatie va fi adresa default gateway-ului, mai exact adresa MAC de pe interfata fa0/0 a router-ului R1.

Pentru a verifica daca se afla pe acelasi subnet cu destinatia, clientul va compara rezultatul operatiunii de ANDing intre IP-ul sau si subnet mask-ul asociat si rezultatul operatiunii de ANDing intre IP-ul destinatie si subnet mask-ul sau (al clientului). Daca cele doua rezultate sunt similare, cele doua dispozitive fac parte din acelasi subnet, si sursa va trimite direct frame-urile catre destinatie. Daca rezultatele nu sunt identice, atunci sursa va trimite frame-urile catre default gateway, care se va ocupa de livrarea lor catre destinatie.

In cazul nostru clientul web afla ca va trebui sa trimita datele catre default gateway-ul sau. Vom considera MAC-ul interfetei fa0/0 a router-ului 1 ca fiind 0000.1111.FFFF. Deci adresarea la Data Link va fi urmatoarea:

(Consideram ca echipamentele au deja tabela ARP completa)

MAC Destinatie

0000.1111.1111

MAC Sursa

0000.1111.FFFF

Acum ca procesul de incapsulare a luat sfarsit datele sunt plasate pe mediul de transmisie la nivelul Physical.

Datele trimise de client ajung la switch-ul SW1. Switch-ul este un echipament de Layer 2. Rolul sau este de a forward-a frame-uri pe baza adreselor MAC. Pentru a face acest lucru switch-ul va folosi adresa MAC destinatie si o structura numita tabela de adrese MAC. Aceasta tabela se populeaza prin maparea adreselor MAC sursa de porturile pe care switch-ul primeste frame-urile. In cazul nostru SW1, primeste un frame pe portul fa0/1 cu MAC-ul sursa 0000.1111.1111, deci va crea o intrare in tabela MAC de forma:

Port

MAC

fa0/1

0000.1111.1111

Pentru a vedea pe ce port trebuie sa scoata frame-ul ca aceasta sa ajunga la destinatie, switch-ul va folosi adresa MAC destinatie din frame, care este 0000.1111.FFFF, pe care o va compara cu intrarile din tabela MAC. Se observa ca SW1 nu stie pe portul pe care se afla MAC-ul de destinatie. In acest caz SW1 va scoate frame-ul pe toate porturile cu exceptia celui pe care la primit. Toate echipamentele din retea vor primi acest frame, insa nu il vor procesa pentru ca nu li se adreseaza (MAC-ul destinatie nu este acelasi cu MAC-ul lor), cu exceptia router-ului R1 care il va procesa pentru ca adresa MAC destinatie este aceeasi cu MAC-ul de pe interfata fa0/0 a sa. R1 face decapsularea la Layer 2 si paseaza pachetul la Layer 3. Router-ul este un echipament care lucreaza la Network Layer si foloseste adresa IP destinatie impreuna cu o structura numita tabela de rutare pentru a livra datele de la echipamentul sursa la cel de destinatie. Tabela de rutare contine informatii despre retelele locale router-ului (retele direct conectate prin intermediul interfetelor sale) si despre retelele remote (configurate static sau dinamic prin intermediul unui protocol de rutare) la care router-ul poate ajunge. Presupunem ca tabelele de rutare pentru R1 si R2 sunt complete, adica se poate ajunge de oriunde in orice alta parte a topologiei.

Intre R1 si R2 consideram spatiul de adrese 192.168.12.0/30, unde R1 are IP-ul 192.168.12.1 pe interfata fa0/1, iar R2 are IP-ul 192.168.12.2 pe interfata fa0/1.

Spuneam ca R1 are o tabela de rutare completa, care ar arata ca mai jos:

Retea Destinatie

Exit Interface

Next-hop IP

192.168.1.0/24

Fa0/0

N.A

192.168.12.0/30

Fa0/1

N.A

192.168.2.0/24

Fa0/1

192.168.12.2

R1 compara adresa IP de destinatie din cadrul pachetelui, 192.168.2.222, cu continutul tabelei de rutare. Daca va gasi o potrivire va folosi acea ruta pentru a trimite pachetul spre destinatie, daca nu pachetul va nu putea fi trimis destinatiei si comunicatia va esua. R1 observa ca poate folosi ruta 192.168.2.0/24, fa0/1, via 192.168.12.2 pentru a trimite pachetul la destinatie.

In acest caz R1 va reincapsula pachetul folosind aceasi adresare logica, insa va folosi alte adrese la nivelul fizic. Consideram ca legatura dintre cele doua router-e este una Ethernet, si ca interfetele fa0/1 ale lui R1 si R2 au MAC-urile 0000.1212.0001, respectiv 0000.1212.0002.

Deci pachetul va avea urmatoarele adrese pe segmentul dintre R1 si R2:

IP Destinatie

IP Sursa

MAC Destinatie

MAC Sursa

192.168.2.222

192.168.1.111

0000.1212.0002

0000.1212.0001

R1 trimite frame-ul nou format catre R2, care il accepta deoarece observa ca i se adreseaza. La fel ca R1, R2 decapsuleaza frame-ul si urca pachetul la nivelul Network. Aici router-ul identifica IP-ul destinatie, 192.168.2.222, si compara acest IP cu continutul tabelei de rutare, care pentru R2 arata ca mai jos:

Retea Destinatie

Exit Interface

Next-hop IP

192.168.2.0/24

Fa0/0

N.A

192.168.12.0/30

Fa0/1

N.A

192.168.1.0/24

Fa0/1

192.168.12.1

Observa ca IP-ul destinatie face parte dintr-un subnet direct conectat si foloseste acea ruta pentru livrare: 192.168.2.0/24, fa0/1. Insa inainte de a face acest lucru pachetul trebuie sa fie reincapsulat intr-un frame de Ethernet, cu adresa MAC sursa adresa interfetei fa0/0 a lui R2, sa zicem ca aceasta este 0000.2222.FFFF, si cu adresa MAC destinatie adresa MAC a serverului, sa presupunem ca aceasta este 0000.2222.2222. Deci pachetul pe segmentul dintre R2 si serverul web va avea adresele:

IP Destinatie

IP Sursa

MAC Destinatie

MAC Sursa

192.168.2.222

192.168.1.111

0000.2222.2222

0000.2222.FFFF

R2 trimite pachetul catre server, insa inainte ca acesta sa ajunga la server, trece mai intai prin switch-ul SW2. Presupunem ca tabela de adrese MAC a lui SW2 este completa, adica SW2 stie pe ce porturi se afla toate adresele MAC de pe segmentul local de retea.

Port

MAC

Fa0/2

0000.2222.2222

Fa0/23

0000.2222.FFFF

Deci pentru a trimite datele la server, SW2 trebuie sa scoate aceste date pe portul fa0/2. O data ajunse datele la server, acesta la proceseaza la Layer 2, unde vede ca i se adreseaza, decapsuleaza frame-ul in pachet si il urca la Network Layer, unde il proceseaza mai departe intrucat IP-ul destinatie corespunde cu IP-ul sau sursa, inlatura antetul si urca pachetul la Transport Layer unde observa ca aplicatia destinatie este aplicatia web, identificata prin portul 80. Tipul mesajului generat de client era un mesaj de tip GET, prin care solicita o pagina web. Daca serverul are acea pagina disponibila va raspunde cu acea pagina si cu un cod 200 OK care indica prezenta acelei pagini pe serverul WEB (acest cod nu este vazut de catre utilizator, acesta vede doar pagina ceruta).

Serverul va trimite pagina ceruta de client spre incapsulare prin stiva OSI catre destinatie. La nivelul Transport pagina va fi impartita in segmente, si fiecare segment va avea urmatoarele adresari:

Port Sursa

Port Destinatie

IP Destinatie

IP Sursa

MAC Destinatie

MAC Sursa

80

54321

192.168.1.111

192.168.2.222

0000.2222.2222

0000.2222.FFFF

Sunt necesare cateva precizari privind aceste adrese. In primul rand se observa ca adresele sunt folosite in oglinda la destinatie: de exemplu, portul sursa din datele primite devine portul destinatie si invers. La fel si in cazul adreselor IP. Insa in cazul adreselor MAC acest lucru nu este valabil, intrucat, dupa cum spuneam si mai devreme, adresa MAC este valabila pe segmentul local de retea.

Serverul va trimite pachetele catre default gateway, adica spre interfata fa0/0 a router-ului R2, care are un IP-ul 192.168.2.1, din acelasi subnet cu serverul, pentru ca acesta si clientul web fac parte din retele diferite. Adresa MAC destinatie folosita la incapsulare de catre server va fi adresa MAC a interfetei fa0/0 a lui R2. Frame-urile nou formate ajung la switch-ul SW2, care foloseste adresa MAC de destinatie 0000.2222.FFFF care este mapata cu portul fa0/24. La celalalt capat al portului fa0/24 se afla R2 care primeste frame-urile, le decapsuleaza si compara IP-ul destinatie cu tabela de rutare, unde observa ca are un match pe ruta 192.168.1.0/24, fa0/1 via 192.168.12.1. Va incapsula pachetele in frame-uri de forma:

IP Destinatie

IP Sursa

MAC Destinatie

MAC Sursa

192.168.1.111

192.168.2.2222

0000.1212.0001

0000.1212.0002

R1 primeste frame-urile, le decapsuleaza, si compara IP-ul destinatie 192.168.1.111 cu informatiile din tabela de rutare. Observa ca acest IP se afla pe una din retelele sale direct conectate si incapsuleaza pachetele corespunzator pentru a fi livrate destinatiei:

IP Destinatie

IP Sursa

MAC Destinatie

MAC Sursa

192.168.1.111

192.168.2.222

0000.1111.1111

0000.1111.FFFF

 Switch-ul SW1 primeste frame-urile pe portul fa0/24 cu MAC-ul sursa 0000.1111.FFFF, MAC pe care anterior nu il stia, deci va trece aceasta noua mapare in tabela sa MAC:

Port

MAC

Fa0/1

0000.1111.1111

Fa0/24

0000.1111.FFFF

Switch-ul SW2 compara MAC-ul destinatie al frame-urilor cu intrarile din tabela MAC si observa ca MAC-ul de destinatie 0000.1111.1111 se afla pe portul fa0/1, si foloseste aceasta mapare pentru a livra datele catre destinatie, catre clientul web

Clientul web primeste frame-urile, le decapsuleaza la nivelul Data Link, la nivelul Network si la nivelul Transport unde paseaza pagina primita de la serverul web catre browser pentru a fi afisata si prezentata utilizatorului.