cr3us
Moderator
Inregistrat: acum 17 ani
Postari: 160
|
|
Structura antetului IP
Protocolul IP a fost publicat în 1981.Ar trebui oare studiul antetului IP sa fie abordat la o ora de istoria calculatoarelor?
Antetul IP, chiar daca nu a fost amendat direct, nu este doar o marturie a viziunii asupra retelelor de calculatoare pe care o aveau cei de acum 20 de ani, ci, chiar daca ne place sau nu, este modul în care lumea noastra de azi este gândita. Multe dintre tehnologiile pe care le avem azi nu sunt neaparat cele mai performante, ci sunt "IP compliant".
Orice pachet ajuns la nivelul retea va fi reîmpachetat, adaugându-i-se antetul IP. În figura de mai jos sunt prezentate câmpurile ce compun antetul IP, urmând apoi o scurta descriere a acestora.
Descrierea campurilor unui pachet IP:
VERS(Version, 4biti)- indica versiunea ip folosita actualmente
HLEN(Header Length, 4biti)- indica lungimea antetului datagramei( un fel de mesaj) in cuvinte de 32 de biti
TOS(Type of Service, 8biti)- specifica nivelul de importanta atribuit de un protocol anume de nivel superior
Length(16biti)- specifica lungimea intregului pachet in octeti
Lungime incarcatura date=lungime totala-HLEN
Identificarea(16biti)- contine un numar intreg care identifica datagrama curenta; acesta este numarul de secventa
Flags(3biti)- un camp de 3biti in care cei 2 biti de nivel inferior controleaza fragmentarea,primul specifica daca pachetul poate fi fragmentat, iar al doilea specifica ultimul fragment(dintr-o serie de pachete fragmentate)
Fragment off-set(13biti)- folosit pentru a ajuta recompunerea datagramelor fragmentate
TTL(Time to Live, 8biti)- un camp care specifica numarul de hopuri pe care il poate traversa un pachet. Acest numar este decrementat cu o unitate cand pachetul traverseaza un ruter, iar pachetul este eliminat atunci cand ajunge la 0
Protocol(8biti)- indica ce protocol de nivel superior precum TCP sau UDP primeste pachetele care sosesc dupa procesarea completa IP
Suma de control a antetului(16biti)- ajuta la asigurarea integritatii antetului IP
Adresa sursei(32biti)- specifica adresa IP a nodului emitator
Adresa destinatiei(32biti)- specifica adresa IP a nodului receptor
Padding- zerouri suplimentare adaugate la acest camp pentru a face ca antetul IP sa fie mereu un multiplu de 32 biti
Date- contine informatii de nivel superior; are o lungime variabila de pana la 64KB
Optiuni- permite IP sa suporte diferite optiuni cum ar fi: securitate, lungime variabila
Adresarea IP
O adresa IP este un sir de 32 de biti ce identifica doua lucruri: o retea si o statie în cadrul acelei retele. Forma în care sunt folosite totusi adresele IP nu este cea binara, astfel încât când spunem adresa IP aveam mai degraba în minte reprezentarea decimala a patru octeti, separati prin trei puncte.
Astfel pentru o adresa IP data: 10110001000001000001011000001000, vom separa mai întâi bitii în grupuri de câte 8 biti: 10110001.00000100.00010110.00001000 si în final vom converti fiecare grup în decimal: 177.4.22.8.
Desi aceasta noua exprimare înlesneste semnificativ lucrul cu adresele IP, aduce unele limitari legate de usurinta de a discerne între portiunea de retea si cea de statie din cadrul adresei IP. Încercarea de a pastra reprezentarea decimala ca model de referinta pentru IP si de a clarifica distinctia între cele doua componente ale adresei IP a dus la definirea claselor de adrese IP.
Clasele de adrese IP
Odata cu definirea celor trei clase pentru rutare a mai fost definit un spatiu de adrese ce este folosit pentru adresarea multicast, anume clasa D. Restul adreselor vor constitui clasa E, reprezentând adrese rezervate.
În tabelul de mai jos sunt prezentate cele 5 clase definite pentru spatiul de adrese IP.
Clasa Primii biti Nr biti retea Nr de retele Nr biti statie Nr statii Domeniul de valori A 0... 8 27 24 224-2 1.0.0.0-126.255.255.255 B 10... 16 214 16 216-2 128.0.0.0-191.255.255.255 C 110... 24 221 8 28-2 192.0.0.0-223.255.255.255 D 1110... Adrese multicast E 11110... Rezervat
Distributia adreselor pe clase este asemanatoare cu un arbore Huffmann, spatiile de adrese astfel obtinute fiind inegale.
Clasele A, spre exemplu, sunt definite de valoarea zero a primului bit din adresa IP, ajungându-se la situatia când mai putin de 130 de retele sa consume jumatate din spatiul de adrese IP, ramânând pentru restul de peste 2 milioane de retele mai putin de jumatate din acest spatiu de adrese.
Clasa A a fost proiectata pentru a satisface cerintele ridicate de retele de mari dimensiuni. Astfel pentru definirea retelei va fi folosit doar primul octet, ramânând pentru identificarea statiei 24 de biti, adica mai mult de 16,7 milioane de posibilitati. Din tabelul de mai sus se poate observa ca domeniul de valori pentru clasa A nu include retelele 0.0.0.0 si 127.0.0.0, acestea fiind rezervate. Clasa de adrese 0.0.0.0 nu este folosita datorita posibilelor confuzii cu rutele implicite, în vreme ce clasa 127.0.0.0 este rezervata pentru adrese de lookback, în scopul monitorizarii si testarii.
Tot din studiul numarului de statii din tabelului de mai sus se observa eliminarea a câte doua adrese dintre cele ce pot fi alocate statiilor, pentru fiecare dintre clasele rutabile. Cele doua adrese sunt: adresa de retea si adresa de difuzare.
O adresa IP de retea este o adresa pentru care toti bitii de statie sunt 0. O astfel de adresa este folosita pentru identificarea întregii retele, aceasta fiind în fapt forma relevanta a oricarei adrese ce calatoreste peste Internet.
O adresa IP de boadcast sau de difuzare este o adresa pentru care toti bitii de statie sunt 1. Un pachet destinat unei astfel de adrese va ajunge la toate statiile din aceeasi retea.
O clasa de adrese B este definita de valorile primilor doi biti din adresa IP, acesti primi doi biti fiind 10. Respectând aceasta constrângere rezulta ca toate adresele IP ale caror prim octet se afla între 10000000 si 10111111, adica între 128 si 191, apartin unei clase B.
Câmpul de retea pentru o clasa B va cuprinde primii doi octeti, dar cum primii doi biti ai primului octet sunt fixati, ne ramân doar 14 biti pentru a crea clase B. Pentru definirea statiilor vom avea la dispozitie ultimii doi octeti, adica 16 biti. Astfel vom obtine 16.384 retele, fiecare având un numar maxim de statii de 65.533.
Clasele A si B la un loc reprezinta 75% din spatiul de adrese disponibile, aceste clase fiind epuizate în primii ani de expansiune a Internetului (`92 -`94). Daca mai dam la o parte clasele D si E, clase ce nu pot fi folosite pentru rutare, rezulta ca aproape întreaga expansiune a Internetului din ultimul deceniu s-a facut folosindu-se doar 12,5% din spatiul de adresare IP, si anume clasele C.
Clasele C se definesc prin alocarea primilor 3 octeti pentru definirea retelei si doar a ultimilor 8 biti pentru distingerea între statiile aceleiasi retele. Primii trei biti din primul octet trebuie sa fie 110, adica valoarea acestui prim octet trebuie sa se afle între 192 si 223 pentru ca o adresa sa apartina unei clase C.
Desi numarul claselor C depaseste 2 milioane, numarul de statii pentru fiecare dintre aceste retele este de doar 254.
Clasa de adrese D este folosita pentru retele multicast. Chiar daca retelele multicast nu s-au ridicat la înaltimea asteptarilor formate la începutul anilor `90, exista în continuare proiecte de cercetare cu un impact major bazate pe multicast (M-Bone fiind cel mai recent), iar retelele de transmisie pentru programe TV sau macar pentru radio nu par sa se desprinda de arhitecturile multicast. Fara îndoiala pentru România tehnologiile multicast reprezinta un exercitiu mai mult teoretic, dar asta nu trebuie sa ne faca sa pierdem din vedere puternicul impact pe care îl au acestea mai ales în SUA.
Masca de retea
Masca de retea este un sir de 32 de biti care, în conjunctie logica cu o adresa IP, va separa adresa de retea, anulând bitii de statie.
Fiecare bit din masca de retea ce corespunde (se afla pe aceasi pozitie) cu un bit din câmpul de retea va avea valoare 1, în vreme ce toti bitii corespunzatori câmpului de statie vor avea valoarea zero.
Mastile de retea sunt inutile într-un mediu ce ofera adresare classful, deoarece simpla testare a valorii primului octet fata de 128 si 192 ne-ar oferi toate informatiile necesare despre numarul bitilor ce apartin câmpului retea dintr-o adresa IP data. În schimb, odata cu aparitia adresarii classless, masca de retea a devenit piatra de temelie în deciziile de rutare.
Reprezentarea mastilor de retea folosita cel mai des este cea decimala, datorita similitudinii cu forma de exprimare a adreselor IP.
O a doua forma de reprezentare a mastilor de retea este sub forma unui numar ce reprezinta numarul de biti de 1 din masca de retea, aceasta forma de reprezentare fiind referita ca prefix de retea.
Mastile de retea pentru clasele rutate
Clasa A: 255.0.0.0 Clasa B: 255.255.0.0 Clasa C: 255.255.255.0
De ce reprezentarea decimala a mastilor de retea este mai populara decât reprezentarea ca prefix?
Bineînteles ca a doua exprimare este semnificativ mai comoda, dar folosirea ei implica atât asumarea faptului ca toti bitii din masca de retea sunt pe pozitia cea mai semnificativa, cât si, mai ales, a faptului ca sunt consecutivi. Dupa cum am vazut pâna acum bitii ce formeaza câmpul de retea sunt la stânga adresei IP, fiind totodata si consecutivi, asa ca asumarea ceruta de folosirea prefixurilor nu este o constrângere. Mai mult chiar, pâna acum nu a aparut nici o tehnologie care sa necesite încalcarea conditiei de consecutivitate a bitilor din câmpul retea. Astfel încât, desi adresarea în forma decimala ofera independenta fata de conditia de consecutivitate, în realitate aceasta independenta este total inutila.
Singura explicatie rezonabila pentru atitudinea producatorilor de aplicatii de retea ce promoveaza reprezentarea decimala este inertia, sau poate si posibilitatea aparitiei mastilor de retea necontinue (desi în mod obiectiv aceasta posibilitate este extrem de mica).
În concluzie, forma de reprezentare ce o vom folosi preponderent în aceasta carte va fi reprezentarea ca prefix. Subretele
În adresarea classful aveam trei dimensiuni de retele, ducând la o utilizare extrem de ineficienta a spatiului de adrese. Închipuiti-va numai ca pentru 300 de statii ce trebuie sa fie în acelasi domeniu de broadcast (în aceeasi retea) administratorul de retea ar fi trebuit sa solicite o clasa B, urmând sa foloseasca sub 0,5% din adresele disponibile.
Întrebarea este daca în loc de o întreaga clasa B nu am fi putut aloca doar jumatate de clasa B, dublând astfel eficienta alocarii de adrese? Sau, reformulând, daca avem clasa B 130.170.0.0, care este jumatatea acesteia?
Pentru a înjumatati un spatiu de adrese, va trebui în fapt sa înjumatatim numarul de statii, adica sa reducem cu unu numarul de biti de statie. Bitul astfel obtinut va intra în componenta unui nou câmp, pe care îl vom numi câmp de subretea.
Masca de retea va avea valoarea 1 atât în câmpurile corespunzatoare bitilor de retea, cât si în câmpurile corespunzatoare bitilor de subretea.
În concluzie, pentru a înjumatati un spatiu de adrese, trebuie sa extindem masca de retea cu un bit (cel corespunzator câmpului de subretea), iar cele doua jumatati vor fi obtinute facând acest bit o data 0, o data 1.
Având de înjumatatit o clasa B, cele doua jumatati vor avea masca de retea /17, bitul de subretea fiind chiar al 17-lea bit din adresa IP.
În concluzie, subretelele au aparut în scopul eficientizarii modului de alocare a adreselor IP. Pentru a împarti în subretele un spatiu de adrese dat, o parte din bitii de statie sunt trecuti într-un nou câmp, cel de subretea, acesta având rolul de a oferi un al treilea nivel de ierarhizare a adreselor IP.
În realitate definirea unui câmp de subretea este facuta pentru a înlesni întelegerea procesului, neavând o reflectare în modul de functionare a ruterelor. Din punctul de vedere al unui ruter orice adresa IP are doar doua niveluri de ierarhizare, si anume retea si statie. Astfel procesul de creare de subretele se traduce în transferarea unui numar de biti din câmpul statie în retea, extinderea mastii de retea cu un numar egal cu numarul de biti transferati.
În primul rând, termenul de subretea pare a implica o relatie de subordonare fata de retele, definite ca apartinând claselelor de adrese IP. Într-un mediu classless, nu exista nici o diferenta în modul cum ruterele sau calculatoarele trateaza adrese apartinând unei retele sau a unei subretele. De fapt, la ora actuala, cel mai adesea prin retele se întelege totalitatea subretelelor, clasele de adrese fiind privite ca un caz particular al acestora. Astfel putem trage concluzia ca singura diferenta între retele si subretele este de natura strict istorica.
În al doilea rând masca de retea este deseori apelata ca masca de subretea, ambele exprimari referindu-se totusi la acelasi obiect.
Alte protocoale pentru adresele IP
ARP(Address Resolution Protocol)
Pentru ca doua dispozitive de retea sa poata comunica este necesara cunoasterea atât a adresei MAC, cât si a celei logice. În cazul în care numai una dintre adrese este disponibila se apeleaza la un protocol dedicat care pe baza acesteia va determina cealalta adresa.
Stiva de protocoale TCP/IP contine doua protocoale de nivel retea pentru a servi acest scop: ARP (Address Resolution Protocol) si RARP (Reverse Address Resolution Protocol). ARP este protocolul ce va oferi adresa MAC a unui dispozitiv de retea, data fiind adresa sa IP.
ARP se bazeaza pe construirea si mentinerea unei tabele ARP. O tabela ARP are rolul de a oferi o corespondenta între adresele IP si cele MAC. Acestea sunt construite dinamic si sunt stocate în memoria RAM. Desi exista mecanisme pentru adaugarea sau eliminarea unei intrari într-o tabela ARP, acestea sunt rareori folosite.
Fiecare computer sau dispozitiv de retea îsi pastreaza propria sa tabela ARP.
Cum functioneaza ARP? Cum este construita tabela ARP?
Toate statiile sunt tocmai pornite, astfel tabelele ARP sunt vide. Presupunem ca statia A1 vrea sa comunice cu statia A2, cunoscând doar adresa IP a acesteia. La nivelul retea datele venite de la nivelurile superioare vor fi encapsulate si vor primi un antet ce va contine în câmpul adresa destinatie 193.23.1.7, iar ca adresa sursa 193.23.1.4. Înainte de trecerea la nivelul legatura de date adresa IP destinatie va fi cautata în tabela ARP si nefiind gasita se va crea un cadru special (ARP request) ce va avea în câmpul adresa destinatie din antet adresa de difuzare: FF.FF.FF.FF.FF.FF, iar în câmpul adresa sursa adresa MAC a statiei A1.
Daca vom considera ca reteaua din figura foloseste Ethernet drept protocol de nivel MAC datele vor fi difuzate si vor ajunge la A2 si la interfata ruterului conectata la segmentul A.
La nivelul legatura de date va fi analizat antetul cadrului. Câmpul destinatie fiind o adresa de difuzare cadrul va fi trimis la nivelul superior. Totodata, pe baza continutului câmpului sursa de nivel 2 si 3, va fi creata prima intrare în tabela ARP a statiei A2. Ajuns la nivelul 3 cadrul este identificat drept o cerere ARP si se initiaza un raspuns transmis ca unicat atât la nivel retea cât si la nivel legatura de date. Dupa primirea raspunsului A1 va putea insera în tabela sa ARP adresa MAC a lui A2, iar comunicatia din acest moment va avea loc fara probleme.
Fiind pe un segment Ethernet toate cadrele schimbate de A1 si A2 vor ajunge la toate statiile de pe segment, astfel ca, desi nu au emis nici un cadru, atât A3 cât si ruterul vor avea câte o tabela ARP cu 2 intrari. Aceste intrari expira dupa o perioada de timp, fiind înlaturate din tabela ARP.
Cum are loc comunicatia între statii aflate în retele diferite?
Am vazut ca protocolul de rezolutie a adresei se bazeaza pe difuzari la nivel legatura de date. Ruterele în schimb nu propaga pachetele de difuzare de nivel legatura de date în afara retelei din care provin.
Exista doua modalitati prin care statii aflate în retele diferite pot comunica: default gateway si proxy ARP.
Proxy ARP este o extensie a protocolului de rezolutie a adresei. Pornind de la faptul ca ruterul nu va transfera pachetele de difuzare Proxy ARP va determina ruterul sa raspunda la toate cererile ARP destinate unor adrese în afara retelei cu propria sa adresa MAC.
În cazul retelei de mai sus sa consideram ca statia A1 vrea sa comunice cu B1. Dupa ce nu va gasi adresa MAC a statiei B1 în tabela ARP va trimite o cerere ARP. Cadrul va fi receptionat de catre toate dispozitivele de retea aflate pe acest segment. Statiile A2 si A3 deja au în tabela ARP informatii despre A1, astfel încât vor reseta timpul de viata al acestei intrari. Ruterul va reseta si el acest timp, iar apoi, analizând adresa IP destinatie, va concluziona ca destinatia nu se afla în acelasi segment. Daca acesta ar fi fost un cadru obisnuit ruterul ar fi luat o decizie pe baza tabelei sale de rutare. Fiind totusi o cerere ARP ruterul va genera un raspuns ARP ce va contine propria sa adresa MAC. Raspunsul ARP va fi încapsulat, iar antetul va avea atât la nivelul legatura de date cât si la nivelul retea în câmpul adresa sursa adresa interfetei ruterului ce se afla conectata la retea. Ruterul va determina pe ce interfata trebuie sa trimita pachetele destinate pentru 24.8.17.2 si va trimite pe aceasta interfata o noua cerere ARP. B1 va raspunde la aceasta.
În final toate statiile din reteaua A îsi vor adauga o noua intrare în tabela ARP ce va face corespondenta între 193.23.1.1 si adresa MAC a interfetei ruterului: 00.48.0C.18.7A.A2. În plus statia A1 va mai adauga o intrare ce va mapa 24.8.17.2 cu adresa 00.48.0C.18.7A.A2. Statiile din reteaua B vor insera doua intrari în tabelele ARP proprii: 24.8.17.1 - 00.48.0C.18.7A.A3 si 24.8.17.1 - 00.01.9A.11.71.11.
Din acest moment statia A1 va încapsula transmisia destinata statiei B1 folosind adresa IP a lui B1 si adresa MAC a ruterului. Ruterul va primi cadrele, va înlocui adresa sursa din antetul de nivel legatura de date cu adresa sa: 00.48.0C.18.7A.A3 si le va trimite mai departe catre B1.
Pentru o statie data default gateway este adresa IP a interfetei de pe ruter ce conecteaza reteaua din care face parte respectiva statie. Odata precizat un default gateway nivelul retea al statiei va mai capata o noua atributie, trebuind sa determine daca destinatia este sau nu în aceeasi retea. Daca nu este, atunci nu va mai fi initiata ci se va folosi adresa IP a destinatiei finale si adresa MAC a default gateway. Astfel, în tabela ARP va fi cautata adresa interfetei ruterului.
NAT(Network Address Translation)
NAT (RFC 1631) ofera posibilitatea schimbarii unei adrese IP cu o alta din antetul unui pachet IP. În practica NAT se foloseste pentru a permite statiilor ce utilizeaza adrese private sa acceseze Internetul.
Deoarece exista un numar destul de mare de retele neconectate la Internet, IETF a încercat sa reglementeze folosirea adreselor în cadrul acestor retele. Solutia (RFC 1918) a fost definirea unor spatii de adrese private, adrese ce nu pot fi rutate pe Internet.
Totodata adresele private pun o serie de probleme. Cea mai importanta este ca ruterul prin care reteaua privata acceseaza Internetul va trebui sa fi capabil sa faca conversia adreselor private în adrese publice, deci sa ruleze un serviciu de NAT. Acest serviciu impune o latenta suplimentara pentru fiecare pachet ce tranziteaza ruterul. Un alt dezavantaj este acela ca în interiorul unei retele private nu pot fi plasate calculatoare ce ofera servicii publice, deoarece este imposibil de initiat conexiuni din exterior catre acestea.
Translatarea statica a adreselor presupune constituirea unei tabele de translatare ce va asigna întotdeauna aceeasi adresa publica pentru o adresa privata data. Trebuie sa existe în acest caz un numar egal de adrese publice si adrese private.
Translatarea dinamica a adreselor presupune definirea unui rezervor de adrese publice, iar apoi vor fi asignate în functie de ordinea în care statiile solicita conexiuni cu Internetul. Odata încheiata ultima conexiune a unei statii adresa publica este întoarsa în rezervorul de adrese, putând fi alocata unei alte statii. Avantajul major al acestei implementari este ca numarul adreselor publice poate fi semnificativ mai redus decât al celor private. Daca spre exemplu avem o retea cu 200 de calculatoare, dar din care pe Internet nu sunt niciodata mai mult de un sfert, atunci se poate realiza o translatare dinamica a adreselor pe un spatiu de 64 de adrese publice si nu 256 ca în cazul translatarii statice.
Translatarea adreselor cu supraîncarcare este forma cea mai des întâlnita de NAT. În prezent, când ne referim la translatarea adreselor, în realitate ne referim la translatarea adreselor cu supraîncarcare. Aceasta metoda ofera posibilitatea folosirii unei singure adrese publice pentru mai multe statii ce acceseaza Internetul. Din aceasta cauza aceasta metoda mai este numita si NAT multi-la-unu sau PAT (Protocol Addess Translation).
Cum functioneaza translatarea adreselor cu supraîncarcare?
Fie o retea privata conectata la Internet printr-un ruter ce ruleaza NAT si statiile A (192.168.1.2) si B (192.168.1.3) doua calculatoare din reteaua privata. Adresele pentru interfetele ruterului vor fi: 192.168.1.1 si 193.230.36.9. Presupunem ca ambele încearca sa acceseze site-ul, a carui adresa IP este 141.85.37.20. Statia A va încapsula cererea precizând în antetul de nivel transport potul destinatie: 80, portul sursa: 3021, apoi la nivel retea vor fi puse în antet adresa destinatie: 141.85.37.20, precum si adresa sursa: 192.168.1.2, la nivel legatura de date va pune în câmpul adresa destinatie adresa MAC a ruterului, si propria sa adresa MAC în câmpul adresa sursa. În mod similar statia B va încapsula cererea precizând în antetul de nivel transport portul destinatie: 80, portul sursa: 12021, apoi la nivel retea vor fi puse în antet adresa destinatie: 141.85.37.20, precum si adresa sursa: 192.168.1.3, la nivel legatura de date va pune în câmpul adresa destinatie adresa MAC a ruterului, si propria sa adresa MAC în câmpul adresa sursa.
Odata ajunse la ruter cele doua pachete sunt despachetate. Câmpul adresa sursa din antetul de nivel retea va fi înlocuit cu adresa ruterului de pe interfata dinspre Internet: 193.230.36.9. Daca dupa aceasta operatiune pachetele ar fi rutate, ele ar ajunge la destinatie, dar ruterul nu va fi capabil sa determine cui din reteaua privata îi este adresat fiecare din cele doua raspunsuri pe care le va primi de la 141.85.37.20.
Serviciul de translatare a adresei se bazeaza pe construirea unei tabele ce va stabili o corespondenta univoca între o conexiune initiata de la o adresa privata (adresa si port) cu un port de pe ruter. În cazul nostru pentru pachetul primit de la statia A ruterul va dedica un port: 15989. Va schimba portul sursa din pachetul primit de la A cu valoarea 15989, si orice va primi pe acest port va trebui reîmpachetat cu adresa destinatie 192.168.1.2:3021. Portul 15989 va ramâne blocat pâna la încheierea conexiunii de web initiate de pe statia A catre.
Desi teoretic pe o singura adresa publica pot fi mapate mai mult de 65000 de conexiuni, în realitate implementarile de NAT nu mapeaza mai mult de 4000 de conexiuni pentru o adresa publica.
Pentru retelele mari translatarea adreselor se face combinând translatarea dinamica a adreselor cu translatarea adreselor cu supraîncarcare.
_______________________________________ Cr3u$
|
|