Pakete (informācijas tehnoloģijas)

Informācijas tehnoloģijās **pakete** ir īpašā veidā izveidots datu fragments, kas pārvietojas datortīklā. Sakaru līnijas, kas neatbalsta paketes, piemēram, tradicionālie "point-to-point" telekomunikāciju savienojumi vienkārši pārraida datus kā atsevišķu baitu vai bitu virkni. Ja datus saformē paketēs, tīkls var pārraidīt garākus paziņojumus efektīvāk un drošāk. 

## Pakešu darbības mehānisms

Pakete satur trīs elementus: pirmais elements ir *[[hederis]]* jeb *galvene*, kas apzīmē paketes sākumu un satur paketes izcelsmes un gala adresi. Otrais elements ir *derīgā krava*, kas satur datus, ko paketei ir jāpārsūta. Trešais elements ir *noslēgums* jeb *treileris*, kas apzīmē paketes beigas un satur kontrolsummu, kuru var izmantot, lai noskaidrotu, vai pakete pārsūtīšanas laikā tika sabojāta. Daudzi protokoli (IP, UDP) treilerus nelieto un kontrolsummu (ja lieto) ievieto hederī.

Dažādi sakaru protokoli lieto dažādas vienošanās, kas ļauj atšķirt pakešu hederus, derīgos datus un noslēgumus, kā arī dažādus datu formatēšanas nosacījumus. Bināri sinhronajā pārraidē paketi veido 8-bitu baiti, speciālie simboli atdala paketes 3 sastāvdaļas. Citi protokoli, piemēram Ethernet, nosaka hedera un datu elementu sākumus relatīvi pret paketes sākumu. Daži protokoli formatē informāciju bitu nevis baitu līmenī. 

Laba analoģija ir uzskatīt paketi par kaut ko līdzīgu vēstulei: hederis ir līdzīgs aploksnei, un datu apgabals ir vēstules saturs. Ir tomēr atšķirība - daži datortīkli var sadalīt lielāku paketi mazākās, kad nepieciešams. Turklāt mazākie datu elementi tad tiek arī noformēti kā paketes. Tīkla arhitektūra iegūst divas lietas, izmantojot paketes - *kļūdu labošanu* un *vairāku saimniekdatoru adresāciju*.

### Kļūdu atklāšana

Ir efektīvāk un drošāk pārbaudīt kontrolsummu vai CRC vērtību visam paketes saturam kopumā, nekā pārbaudīt kļūdas, izmantojot paritātes bitu katrā pārraidītajā baitā atsevišķi. Paketes noslēgumā (treilerī) bieži ir kļūdu pārbaudes dati, lai atklātu pārraides laikā radušās kļūdas.

### Saimniekdatoru adresēšana

Mūsdienu tīkli parasti saista kopā trīs vai vairākus saimniekdatorus. Šādos gadījumos paketes hederis parasti satur adreses informāciju, lai to varētu saņemt pareizais saimniekdators. Sarežģītos tīklos, kur ir daudz maršrutēšanas un komutācijas punktu, piemēram tīklā ARPANET un mūsdienu Internetā, pakešu virknē, ko viens dators sūta otram, dažādas paketes var sasniegt to pašu adresātu pa dažādiem ceļiem. Šo tehnoloģiju sauc par pakešu komutāciju.

## Drošas paketes un nedrošas datagrammas

Jēdziens **pakete** attiecas uz jebkuru ziņojumu, kas formatēts kā pakete, turpretī jēdziens **datagramma** ir šaurāks jēdziens - tās ir paketes, kuru pārsūtīšana nav droša. Droša pārsūtīšana (*reliable delivery*) nav atkarīga no tā, vai tīkls var atklāt pārraides kļūdas paketēs - datagrammu tīklā sabojātās paketes vienkārši izmet, nepaziņojot par to sūtītājam vai saņēmējam.

Kad ARPANET pirmoreiz sāka nodarboties ar pakešu komutāciju (*switching*), tas nodrošināja drošu pakešu piegādes procedūru saimniekdatoriem saskaņā ar 1822 interface. Saimniekdators vienkārši sakārtoja datus pareizā pakešu formātā un sūtīja ziņojumu pa interfeisu uz piesaistīto IMP. Kad paziņojums tika piegādāts adresāta saimniekdatoram, sūtītājam nosūtīja apstiprinājumu. Ja tīkls nevarēja pārraidīt ziņojumu, tad sūtošajam saimniekdatoram sūtīja kļūdas paziņojumu.

Pat to laiku CYCLADES un ALOHAnet izstrādātāji demonstrēja, ka var uzbūvēt efektīvu datortīklu arī tad, ja drošu pakešu pārraidi nevar garantēt. Šo secinājumu vēlāk izmantoja Ethernet tīkla projektētāji. Ja tīkls negarantē pakešu piegādi, tad pazaudēto pakešu pamanīšana un pārsūtīšana ir saimniekdatoru atbildība. Turpmākā pieredze ARPANET projektā norādīja, ka pats tīkls nevar droši pamanīt visas pakešu piegādes kļūdas, tādēļ atbildība par kļūdu atpazīšanu jebkurā gadījumā kļuva par sūtošā saimniekdatora atbildību. Tas noveda pie principa "no gala līdz galam" (:en:end-to-end principle), kas ir viens no Interneta galvenajiem projektēšanas principiem.

## Piemērs: IP paketes
IP paketes veido vairāki komponenti - http://www.freesoft.org/CIE/Course/Section3/7.htm. Tie iedalās 2 galvenajās daļās: hederis un derīgie dati. IPv4 pakete satur šādas lietas:

# 4 biti, kas satur *versiju*, kas norāda, vai tā ir IPv4 vai IPv6 pakete,
# 4 biti, kas satur *Interneta hedera garumu*, kas izsaka hedera garumu,
# 8 biti, kas satur *servisa tipu*, ko sauc arī par *Quality of Service* (QoS), kas apraksta šīs paketes prioritāti,
# 16 biti, kas satur paketes *garumu* baitos,
# 16 biti, kas satur *identifikācijas tagu*, kas palīdz rekonstruēt paketi, ja tā sadalīta vairākos fragmentos,
# 3 biti, kas satur nulli - nosacījumu, kas apliecina, vai šo paketi var *fragmentēt*, vai attiecīgi DF - *Don't fragment*. Un arī karodziņu, kas nosaka, vai sekos vairāk paketes fragmenti: MF - *More Fragments*. 
# 13 biti, kas satur *fragmenta nobīdi*, lauks, kas nosaka, kuram fragmentam šī pakete tiek piestiprināta, 
# 8 biti, kas satur atlikušo dzīves ilgumu jeb *Time to live* (TTL), kas ir pārsūtījumu (t.i. maršrutizācijas soļu) skaits, kuras paketei ir atļauts iziet pirms tā nomirst. Piemēram, pakete ar TTL=16 var iet caur 16 maršrutizētājiem, lai nonāktu galapunkttā pirms to izmet, 
# 8 biti, kas satur *protokola* apzīmējumu (TCP, UDP, ICMP, utt.)
# 16 biti, kas satur *headera kontrolsummu* - skaitli, ko izmanto kļūdas labošanai,
# 32 biti, kas satur *avota IP adresi*,
# 32 biti, kas satur *galamērķa adresi*.

Pēc tā var tikt pievienoti dažāda garuma neobligātie karodziņi, kas var mainīties atkarībā no izmantotā protokola (tos gan lieto reti). Pēc tam seko paketes dati. 

### Piegāde nav garantēta
Vairāki tīkli negarantē pakešu piegādi, to, ka nav dublikātu un pakešu ierašanos noteiktā secībā, piemēram, UDP protokols no Interneta protokolu komplekta. Ir tomēr iespējams izveidot transporta protokolu virs pakešu servisa, kas var garantēt visas šīs 3 lietas, šāda protokola piemērs ir TCP. Gan TCP gan UDP ir piemēri ceturtajam jeb transporta slānim septiņu slāņu OSI modelī.

Paketes hederis norāda datu tipu, paketes numuru, kopējo pakešu skaitu kā arī sūtītāja un saņēmēja IP adreses. Terminu kadrs dažreiz lieto, lai apzīmētu paketi - tieši tādu, kādu to pārraida pa fizisko sakaru kanālu (kanāla slāņa protokola paketi). Pakešu izmēri var būt mainīgi, viena protokola ietvaros (piem IP pakešu garums var būt no dažiem desmitiem baitu līdz ≈64k), bet freimu izmērs ir fiksēts (piem. ethernet datu freima izmērs ir 1500 baitu un nemainās).

### Bojātās paketes izmet
Paketes hederis (piem. IP) vai treileris (piem. ethernet) satur kontrolsummu (*checksum*). Kontrolsumma var būt aprēķināta visai paketei, vai arī tikai hederim. Kontrolsummas aprēķināšana tikai hederim prasa mazāk skaitļošanas resursu. Paketes, kurām neatbilst kontrolsumma, izmet (iznīcina) tuvākā *node* (IP gadījumā - tuvākais rūteris, UDP un ethernet gadījumā - saņēmējdators). Dažu protokolu paketes satur kļūdu labošanas kodu (*eror correction code*), kas ļauj izlabot ierobežota lieluma kļūdas. IP protokolos lietotās kontrolsummas var neatrast kļūdu 1 kļūdainā paketē no ≈32000.

Izmestās paketes ir datu zudumi, tās vai nu pārsūta vēlreiz, vai arī rēķinās ar datu zudumiem.

## Atsauces

* Dean, Tamara (2006). Network+ Guide to Networks. Boston, Massachusetts: Thomson Course Technology.