Locked History Actions

TCP/IP

TCP/IP protokolo kilmė

Interneto protokolo ištakos siekia aštuntąjį dešimtmetį. DARPA užsakymu 1972 m. Robertas Kahn'as pradėjo dirbti ties patikimo duomenų perdavimo modeliu, prie kurio 1973 m. pavasarį prisijungė Vintas Cerf'as, kuris lig šiol tituluojamas "interneto tėvu". 1975 m. buvo atlikti pirmieji sėkmingi TCP/IP protokolo testai, o dabar plačiai naudojama TCP/IP protokolo ketvirtoji versija pasirodė 1978 m. 1984 m. Amerikos gynybos departamentas paskelbė TCP/IP kaip standartinį visų karinio pobūdžio tinklų protokolą, kuris vėliau sėkmingai išplito ir akademiniuose tinkluose.
Vienas iš sukūrimo tikslų - galimybė sujungti daug tinklų be aiškiai matomų siūlių. Kitas tikslas - ryšiai neturi nutrūkti tol, kol egzistuoja siuntiklis ir gaviklis, nors tuo metu didelė potinklio aparatūros dalis jau nedirba (išgyventi atominio karo metu). Reikalinga lanksti architektūra, nes numatomas labai platus taikymo spektras, pradedant failų siuntimu ir baigiant kalbos perdavimu realiame laike. TCP/IP pirmą kartą apibrėžtas 1974 m. Toliau buvo nuolat tobulinamas Internet (IP) lygis (tarptinklinis).
Vėliau TCP/IP buvo įdiegtas į UNIX operacinę sistemą ir tapo pamatu, į kurį remiasi Internetas.
Šiuo metu TCP/IP stekas – populiariausia sudėtinių tinklų organizavimo priemonė. Iki 1996 m. lyderiu buvo kompanijos Novell IPX/SPX stekas, tačiau vėliau jis prarado lyderio pozicijas, naujuoju lyderiu tapo TCP/IP.

TCP/IP steko struktūra

TCP/IP stekas turi 4 lygius (1 pav.). Kiekvienas lygis turi užtikrinti tam tikrą funkciją ir užtikrinti patikimą sudėtinio tinklo, suprojektuoto skirtingų tinklo technologijų pagrindu, veikimą.
1.jpg
1 pav. TCP/IP tinklų modelis

Taikymo lygis

Čia visi aukšto lygio protokolai (2 pav.). Nuo seno ten yra virtualus terminalas (TELNET), failų perdavimas (FTP - File Transfer Protocol) ir elektroninis paštas (SMTP - Simple Mail Transfer Protocol). Vėliau atsirado DNS (Domain Name Service), surišantis kompiuterių vardus su jų tinkliniais adresais. NNTP (Network News Transfer Protocol) - naujienų straipsnių perdavimui. HTTP (Hyper Text Transfer Protocol) - WWW puslapių perdavimui. Ir daug kitų protokolų.
2.jpg
2 pav. TCP/IP taikymo lygis

Transporto lygis

Transporto lygis - tai lygis virš Internet IP (tarpinklinio) TCP/IP modelyje (3 pav.). Jis leidžia bendrauti lygiaverčiams lygiams abiejose pusėse kaip OSI transportinis lygis. Čia apibrėžti du end-to-end protokolai. TCP (Transport Control Protocol - perdavimo valdymo protokolas) - patikimas, orientuotas į sujungimą protokolas. Jis fragmentuoja ateinantį baitų srautą į atskirus pranešimus ir kiekvieną jų perduoda į Internet IP (tarptinklinį) lygį. Priimančioje pusėje atitinkamas TCP apjungia visus pranešimus. TCP taip pat palaiko srauto valdymą (flow control), kad greitas siųstuvas neperkrautų lėto imtuvo.
UDP (User Datagram Protocol) - vartotojo deitagramų protokolas. Nepatikimas, be sujungimų protokolas taikymams, kuriems nereikia TCP eiliškumo tvarkymo ar srauto valdymo ir kurie linkę tvarkyti patys. Jis plačiai taikomas kliento-serverio tipo klausimas-atsakymas atvejams, taip pat taikymams, kai greitas pristatymas yra svarbesnis už pristatymą be klaidų.
3.jpg
3 pav. TCP/IP transporto lygis

Internet (IP) arba tarptinklinis lygis


Šis lygis, kaip rišamoji medžiaga, laiko visą architektūrą. Jo darbas yra leisti kompiuteriams injektuoti paketus į tinklą. Paketai keliauja į tikslą nepriklausomai vienas nuo kito (galbūt į kitą tinklą). Jie gali atkeliauti kitokia eilės tvarka negu buvo išsiųsti. Aukštesniųjų lygių reikalas juos sustatyti į savo vietas.

Tarptinklinis lygis apibrėžia paketų formatą ir protokolą, pavadintą IP (Internet protocol). Pagrindiniai dalykai - paketų maršrutizavimas ir tinklo užsikimšimų likvidavimas (avoiding congestion). Labai panašu į OSI tinklinį lygį.
4.jpg
4 pav. TCP/IP Internet(IP) arba Tarptinklinis lygis

TCP/IP modelio protokolai ir tinklai


5.jpg
5 pav. TCP/IP modelio protokolai ir tinklai.

Telnet – terminalo emuliavimo protokolas. Jis leidžia prisijungti prie tarnybinės stoties tinkle. Galima įvedinėti komandas, ir jos vykdomos tarnybinėje stotyje, nors atrodo, kad jos vykdomos tame pačiame vartotojo kompiuteryje.

FTP (File Transfer Protocol) - pagrindinis būdas nutolusiems kompiuteriams keistis informacija (failais).

SMTP (Simple Mail Transfer Protocol) naudojamas pasikeitimui elektroninio pašto pranešimais tarp tarnybinių stočių. Dauguma elektroninio pašto sistemų naudoja SMTP pranešimų siuntimui, o pranešimus galima priimti naudojantis POP arba IMAP protokolu.

TFTP (Trivial File Transfer Protocol) palaiko failų skaitymą ir rašymą. Jis nepalaiko vartotojo identifikavimo katalogų tarnybos.

TCP protokolas išsamiau bus aptartas vėliau.

UDP (User Datagram Protocol) teikia paprastas, tačiau nepatikimas pranešimų paslaugas transakcijomis paremtoms tarnyboms.

IP protokolas yra deitagraminis. IP deitagrama sudaryta iš antraštės ir tekstinės dalies.

ICMP (Internet Control Message Protocol) protokolo pranešimai informuoja apie maršrutizavimo problemas, praneša apie klaidas ir pan. Komanda PING, naudojama Internet ryšio patikrinimui, naudoja ICMP.

RIP (Routing Information Protocol) naudojamas maršrutizavimo informacijos perdavimui. Jis nusako, kaip maršrutizatoriai turi keistis maršrutizavimo lentelių informacija. Pagal jį maršrutizatoriai periodiškai pasikeičia pilnomis lentelėmis. Kadangi tai neefektyvu, šis protokolas beveik pakeistas naujesniu OSPF protokolu.

OSPF (Open Shortest Path First). Naudodamiesi juo, maršrutizatoriai siunčia maršrutizavimo informaciją, paskaičiuodami trumpiausią kelią iki kiekvieno tinklo mazgo. Kiekvienas maršrutizatorius siunčia tą maršrutizavimo lentelės dalį, kuri aprašo jo prievadus, bei siunčia visą maršrutizavimo struktūrą.

ARP (Address Resolution Protocol) naudojamas IP adresų konvertavimui į fizinius adresus (MAC adresus).

TCP ir IP protokolai

TCP protokolas

TCP veikia aukštesniame lygmenyje, nei IP ir savo duomenų blokų transportavimui naudoja potencialiai nepatikimą protokolą IP. Duomenų perdavimo patikimumas TCP protokolu paremtas tuo, kad jis paremtas loginiu sujungimu tarp sąveikaujančių procesų. Kol TCP protokolo programos veikia teisingai, o sudėtinis tinklas neišsibarstęs į nesujungiamas dalis, duomenų perdavimo klaidos protokolo IP lygyje neturės įtakos teisingų duomenų gavimui.

Protokolas TCP naudoja IP protokolą kaip transporto priemonę. Prieš išsiųsdamas duomenų blokus, TCP protokolas juos patalpina į IP paketo apvalkalą. Esant reikalui, IP protokolas gali šį paketą fragmentuoti ir po to vėl sujungti, kai perdavimas vyksta per keletą tinklų bei tarpinių šliuzų. TCP sąveikauja su IP protokolu ir su aukščiau esančiais taikomojo lygio protokolais ar programomis.
Šio protokolo tikslas – perduoti duomenis tarp taikomųjų procesų, vykdomų bet kuriuose tinklo mazguose. Kai IP protokolas pristato paketą nurodytu adresu, duomenis reikia perduoti konkrečiam procesui. Kiekvienas kompiuteris gali vykdyti keletą procesų, be to, taikomasis procesas gali turėti ir daugiau nei vieną įėjimo tašką, kuris laikomas duomenų paketo paskirties adresu.

Paketai, patenkantys į transporto lygį, operacinėje sistemoje organizuojami kaip daugybė eilių prie įvairių taikomųjų procesų įėjimo taškų. Tokios eilės vadinamos prievadais (ports). Tokiu būdu, paskirties adresu, kuris naudojamas TCP protokole, yra taikomosios tarnybos prievado identifikatorius (numeris). Pvz., FTP tarnybai yra priskirtas prievadas 21, o Telnet tarnybai – 23. Galimas ir lokalus prievado numerio priskyrimas, t. y., programos kūrėjas pats gali priskirti prievado numerį su sąlyga, kad tas numeris nėra rezervuotas. Prievado numeris kartu su tinklo numeriu bei galutinio mazgo numeriu vienareikšmiškai nusako taikomąjį procesą tinkle. Šis identifikacinių parametrų rinkinys vadinamas lizdu (socket).
TCP protokolo duomenų vienetas vadinamas segmentu. Informacija, patenkanti į TCP protokolą iš aukštesniojo lygio protokolų, traktuojama kaip nestruktūrizuotas baitų srautas. Duomenys buferizuojami, po to iš buferio paimama tam tikra nuosekli duomenų dalis, kuri ir vadinama segmentu. Kitaip nei kituose protokoluose, TCP patvirtina ne paketų, o srauto baitų gavimą.
Segmento dydis parenkamas taip, kad segmentą pakuojant į jis ten tilptų visas, t. y., maksimalus segmento dydis neturi viršyti IP paketo maksimalaus duomenų lauko dydžio. Kitaip reikėtų segmentą fragmentuoti, t. y., segmentą padalinti, kad jis tilptų į IP paketą.
Sujungimas TCP protokole identifikuojamas pilnų abiejų sąveikaujančių procesų – lizdų – pora. Formaliai sujungimą galima apibrėžti kaip parametrų rinkinį, charakterizuojantį duomenų apsikeitimą tarp dviejų procesų. Be pilnų procesų adresų, šiame rinkinyje yra ir parametrai, kurių reikšmės nustatomos TCP modulių “pasikalbėjimo” metu. Tokiais parametrais gali būti segmentų dydžiai, duomenų kiekis, kurį galima perduoti be patvirtinimo gavimo pradinis ir esamas perduodamų baitų numeriai. TCP garantuoja dupleksinį ryšį.
TCP protokole naudojamas slystančiojo lango patvirtinimų algoritmas. Tai reiškia, kad segmentų skaičius, lygus lango dydžiui, gali būti persiųstas nelaukiant patvirtinimo. Tada procesas sustoja, kol sulaukiama bent vieno patvirtinimo iš priimančiosios pusės. Jei, tarkim, sulaukta 3 segmentų gavimo patvirtinimo, langas pasislenka per 3 pozicijas – vadinasi, dar 3 segmentus galima pasiųsti, nelaukiant patvirtinimo ir t. t. Jeigu kuris segmentas persiunčiamas neteisingai, jo gavimo patvirtinimas nesiunčiamas. Tokiu būdu patvirtinimo nebuvimas reiškia, kad arba segmentas, arba pats patvirtinimas nepasiekė adresato. Patvirtinimas siunčiamas irgi kaip segmentas, kuriame yra skaičius, vienetu didesnis už maksimalaus baito numerį gautajame segmente. Šis skaičius vadinamas eilės numeriu.
Perdavimo patikimumas užtikrinamas patvirtinimų ir eilės numerių naudojimo dėka. Kiekvienam duomenų baitui priskiriamas eilės numeris. Pirmojo duomenų baito eilės numeris segmente perduodamas kartu su šiuo segmentu ir vadinamas segmento eilės numeriu. Segmentai taip pat turi eilės numerį, kuris yra kito laukiamo duomenų baito, perduodamo priešinga kryptimi, numeris. Kai protokolas perduoda segmentą su duomenimis, jo kopija patalpinama į pakartotino siuntimo eilę ir paleidžiamas laikmatis. Gavus patvirtinimą, segmentas pašalinamas iš eilės Jei per laikmatyje nustatytą laiką patvirtinimas negaunamas, segmentas išsiunčiamas pakartotinai.6 pav. parodyta TCP protokolo antraštės struktūra.

TCP segmento antraštė yra 20 baitų. Segmentai gali būti ir be duomenų, jie paprastai naudojami patvirtinimams ir valdymo pranešimams. Pirmiausia nurodomas šaltinio ir adresato prievadai, paskui pažymimas eilės numeris. Toliau pažymimas patvirtinimo numeris. TCP antraštės ilgis turi būti nustatomas dėl to, kad yra opcijos, kurių lauko ilgis nėra pastovus.
6.jpg
6 pav. TCP antraštės struktūra.

URG = 1, kai yra naudojama skubių duomenų rodyklė, kuri parodo, kokioje vietoje, skaičiuojant nuo eilės numerio pradžios, prasideda skubūs duomenys.

ACK = 1 parodo, kad patvirtinimo numeris yra veikiantis. ACK = 0 - patvirtinimo laukas ignoruojamas.

PSH - PUSHED duomenys. Prašoma, kad gavėjas perduotų duomenis taikomajam procesui nelaukdamas, kol bus užpildytas buferis.

RST - naudojamas panaikinti sujungimą, kuris yra sugadintas dėl kokių nors priežasčių. Taip pat naudojamas blogiems segmentams atmesti arba neigiamai atsakyti į sujungimo užklausą.

SYN - naudojamas sujungimo užklausoje. SYN = 1, ACK = 0. Atsakymas į užklausą turi SYN = 1, ACK = 1.

FIN - sujungimo nutraukimas. Po jo dar galima priimti duomenis, kol kita pusė pasiųs FIN. SYN ir FIN segmentai turi eilės numerius, kas garantuoja, kad jie bus apdoroti eilės tvarka.
Lango dydžio laukas lygus nuliui parodo, kad visi baitai, įskaitant ACK Nr 1, yra gauti, tačiau daugiau duomenų siųsti nereikia. Leidžiama siųsti, kai yra gaunamas segmentas su tuo pačiu ACK Nr. ir nenuliniu lango dydžiu.

Kontrolinė suma skaičiuojama nuo antraštės, duomenų ir vadinamosios pseudoantraštės.

Opcijos. Viena iš svarbiausių opcijų leidžia nurodyti kompiuteriui, kokį maksimalų duomenų kiekį segmente jis gali priimti. Susijungimo metu abi pusės paskelbia apie maksimalų duomenų kiekį. Jeigu kompiuteris šios opcijos nenaudoja, tai reiškia 536 baitus pagal nutylėjimą. Visi Interneto kompiuteriai turi priimti 536+20=556 baitų ilgio TCP segmentus.

IP protokolas

IP deitagrama sudaryta iš antraštės (7 pav.) ir tekstinės dalies. Antraštė turi fiksuotą 20 baitų dalį ir kintamą nebūtinąją dalį.

Versijos laukas (4 bitai) leidžia perduoti deitagramas iš kompiuterių, naudojančių senesnes IP protokolo versijas.
IHL (4 bitai) - antraštės ilgis 32 bitų žodžiais. Mažiausia yra 5 žodžiai (20 baitų), daugiausia - 15 žodžių (60 baitų). Nebūtinoji dalis 40 baitų).

Paslaugos tipo laukas dažniausiai nenaudojamas. Susideda iš keleto laukų. Prioriteto laukas - 3 bitai. 0 - normalus paketas, 7 - tinklo valdymo paketas. Trys vėliaviniai bitai: D (Delay), T Throughput), R (Reliability). Taip nurodoma, kas yra svarbiausia - vėlinimas, pralaida, patikimumas. Maršrutizatorius pagal tai gali parinkti paketo perdavimo kelią. 2 bitai nenaudojami.

Bendras ilgis (2 baitai) - viso paketo ilgis (antraštė + duomenys).
Identifikacijos laukas. Visi deitagramos fragmentai turi tą pačią identifikacijos reikšmę.

DF (1 bitas) Don’t Fragment (nefragmentuoti). Kai gaviklis neturi galimybių surinkti fragmentuotas deitagramas. MF (1 bitas) - More Fragments. Vienetas visuose fragmentuose, išskyrus paskutinį.

Fragmento numeris (Fragment offset). Visų fragmentų ilgiai, išskyrus paskutinio, turi būti kartotiniai 8 baitams. 13 bitų duoda 8192 fragmentus vienai deitagramai. Iš viso 8192 *8=65536 baitai. Vienu baitu daugiau už bendrąjį ilgį.
7.jpg
7 pav. IP paketo antraštės struktūra

Gyvavimo trukmė (1 baitas). Maksimali trukmė - 255 s. Gyvavimo trukmės reikšmė kiekviename maršrutizatoriuje sumažinama priklausomai nuo eilės dydžio. Realiai yra skaičiuojamas perėjimų skaičius. Kiekvieno perėjimo metu gyvavimo trukmė sumažinama vienetu. Kai tampa lygi nuliui, paketas atmetamas. Išsiunčiamas paketas, informuojantis siuntiklį apie paketo atmetimą.

Protokolo laukas nurodo, koks reikalingas aukštesnio lygio protokolas TCP, UDP ar kitas. Protokolų numeracija yra vienoda visame Internete, aprašyta RFC 1700.

Antraštės kontrolinė suma yra perskaičiuojama kiekviename maršrutizatoriuje, kadangi bent vieno lauko reikšmė pasikeičia (gyvavimo trukmė).
Adresų laukuose yra tinklo numeris ir kompiuterio tinkle numeris.
Nebūtinoji dalis (Options). Padaryta tam, kad naujesnės protokolo versijos galėtų patalpinti reikalingą informaciją. Eksperimentuojama, tikrinamos naujos idėjos. Susideda iš atskirų laukų, kurių ilgis yra keturių kartotinis. Kiekvienas laukas prasideda identifikaciniu baitu. Kai kurios opcijos turi vieno baito opcijos ilgio baitą ir po jo einančius duomenų baitus. Apibrėžtos penkios opcijos.
Saugos (Security) opcija pasako, kokio slaptumo perduodama informacija.
Tikslus kelias nuo šaltinio. Įrašomas visas deitagramos kelias kaip IP adresų seka. Deitagrama turi keliauti šiuo keliu. Naudinga sistemos administratoriams, siunčiant paketus, kai yra sugadintos maršrutizacijos lentelės arba kai reikia išmatuoti perdavimo trukmę.
Loose source routing reikalauja, kad paketas praeitų per nurodytus maršrutizatorius, tačiau leidžia praeiti ir per kitus maršrutizatorius.
Įrašyti kelią. Nurodo maršrutizatoriams, kad jie įrašytų savo adresą į opcijos lauką. Tai reikalinga tinklų derinimui, maršrutizacijos klaidų taisymui ir t.t. Laiko opcija. Kiekvienas maršrutizatorius įrašo ne tik savo IP adresą, bet ir laiką.