ARP

**ARP** () ir tīkla slāņa protokols, kas nodrošina IP adrešu sasaisti ar kanāla slāņa protokolu adresēm. ARP parasti lieto kopā ar ethernet, jo tā ir visizplatītākā kanāla slāņa tīklu tehnoloģija (variants kopā ar 802.11 būtiski neatšķiras, jo adresēm ir tāds pat garums).

ARP lieto 4 gadījumos:
# Ja divi datori ir pieslēgti pie viena un tā paša tīkla un viens grib nosūtīt paketi otram (te dators, kas sūta paketi mēģina noskaidrot otra datora MAC adresi)
# Ja divi datori ir pieslēgti dažādiem tīkliem un tiem ir jālieto rūteris lai sasniegtu vienam otru (te dators, kas sūta paketi, mēģina noskaidrot rūtera MAC adresi)
# Ja rūterim ir jāpārsūta paketi uz kādu citu datoru, caur citu rūteri (pieslēgtu pie tā paša tīkla) (pirmais rūteris mēģina noskaidrot otrā rūtera MAC adresi)
# Ja rūterim ir jāpiegādā paketi tā paša tīkla datoram (parasti no ārpuses)(rūteris mēģina noskaidrot attiecīgā datora MAC adresi).

Pirmajā gadījumā datori ir pieslēgti pie viena tīkla, pārējos gadījumos dati iet caur rūteri (vai vairāk nekā vienu rūteri).

## Pakešu struktūra
Nosūtāmajām un saņemamajām paketēm ir līdzīga struktūra. Ethernet tīklos ARP paketēm *ether type* lauku ethernet freima hederī uz liek 0x0806 un nosūta uz *broadcast* MAC adresi FF:FF:FF:FF:FF:FF. Šajā tabula *SHA*, *SPA*, *THA* un *TPA* lauki ir parādīti ka būtu 32 bitus gari, lai arī ethernet *SHA* un *THA* ir 48 biti un IPv4 SPA un TPA ir 32 biti.

* ***HTYPE*** (hardware type) - kanāla slāņa protokols (ethernetam šī lauka vērtība ir 1)
* ***PTYPE*** (protocol type) - tīkla slāņa protokols (IPv4 šī lauka vērtība ir 0x0800)
* ***HLEN*** (hardware length) - kanāla slāņa protokola adreses garums (ethernet ir 48 biti (6 baiti))
* ***PLEN*** (protocol length) - tīkla slāņa protokola adreses garums (IPv4 ir 32 biti (4 baiti))
* ***Operation*** - sūtītāja izpildītā operācija (paketes veids)(1 ir pieprasījumiem un 2 ir atbildēm)
* **Sūtītāja MAC adrese** (SHA)(sender hardware address) - paketes nosūtītāja MAC (kanāla slāņa protokola adrese), šī lauka garums ir atkarīgs no šīs adreses garuma, kas dažādiem protokoliem var atšķirties.
* **Sūtītāja IP adrese** (SPA)(sender protocol address) - paketes nosūtītāja IP (tīkla slāņa protokola adrese), šī lauka garums ir atkarīgs no šīs adreses garuma, kas dažādiem protokoliem var atšķirties.
* **Mērķa MAC adrese** (THA)(target hardware address) - saņēmēja MAC (kanāla slāņa protokola adrese), pieprasījumos šis lauks satur nulles, šī lauka garums ir atkarīgs no šīs adreses garuma, kas dažādiem protokoliem var atšķirties.
* **Mērķa IP adrese** (TPA)(target protocol address) - saņēmēja IP (tīkla slāņa protokola adrese), šī lauka garums ir atkarīgs no šīs adreses garuma, kas dažādiem protokoliem var atšķirties.

### Piemērs
Ja dators ar IPv4 adresi 10.10.10.123 (heksadecimālā formā 0A.0A.0A.7B) un MAC adresi 00:09:58:D8:11:22 grib nosūtīt IP paketi uz datoru ar IP adresi 10.10.10.140 (heksadecimālā formā 0A.0A.0A.8C), un nezināmu MAC adresi, tad tam ir jāsūta ARP pieprasījumu lai noskaidrotu to adresi. Ja 10.10.10.140 ir ieslēgts un darbojas, tas saņemtu pieprasījumu un aizsūtītu atbildi. Pieprasījums:

Ja saņēmēja datoram (10.10.10.140) MAC adrese ir 00:09:58:D8:33:AA, tad atbilstošā atbildes pakete būtu šāda:

Šajā gadījumā 10.10.10.140 ir sūtītājs. Atbiles, atšķirībā no pieprasījumiem, nesūta kā *broadcast*, tās sūta tieši, jo visas adreses (atbildes sūtītājam) ir zināmas.

### ARP ''announcements''
Tās ir ARP pieprasījumu paketes, kas satur derīgus SHA un SPA un kuri ir vienādi attiecīgi ar THA un TPA. Šādi pieprasījumi negaida atbildi, tos lieto lai atjaunotu (*update*) visu saņēmēju ARP kešus.

## ARP kešs
Lai pirms katras IP paketes nosūtīšanas nebūtu jāsūta ARP paketi, saņemtās atbildes kādu laiku glabā ARP kešā (ARP cache). Tā ir tabula, kuras ierakstus aizpilda ARP pieprasījumu atbildes. Windowā šo tabulu var apskatīties ar komandu *arp -a*. Piemērs:
 Interface: 10.0.0.150 --- 0x3
   Internet Address      Physical Address      Type
   10.0.0.136            02-ff-d1-c7-ab-f8     dynamic
Ja ir vairāki tīkla interfeisi, tad ir vairākas tabulas, tos identificē pēc IP adresēm. Šajā piemērā IP adrese ir 10.0.0.150. *Internet address* ir zināmās IP adreses (šeit tāda ir tikai viena, bet var būt daudz), *Physical address* ir atbilstošā MAC adrese. *Type* ir ieraksta tips, šajai tabulai manuāli ir iespējams pievienot permanentos ierakstus (normāli tiem ierakstiem derīguma termiņš ir dažas sekundes), kas saglabājas bezgalīgi ilgi. Ja datoram ir jāsūta paketi uz IP adresi, kura atrodas ARP kešā (vienalga dinamiskais vai permanentais ieraksts), tad nav nepieciešams ARP pieprasījums un IP paketi var sūtīt uzreiz. Ja ierakstam atbilstošā MAC adrese neatbilst, tad (ja ir permanentais ieraksts) ir traucētas komunikācijas (ja ir dinamiskais, tad nosūta ARP pieprasījumu). Permanentos ierakstus dažreiz lieto lai cīnītos pret *MAC spoofing* un *ARP cache poisoning* kurus lieto snifošanai switchotos tīklos.