arp(7)

Från Wiki.linux.se
Version från den 25 november 2024 kl. 06.22 av Admin (diskussion | bidrag) (→‎Ioctls)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

arp(7)

Namn

arp - Linux ARP-kärnmodul

Beskrivning

Denna kärnprotokollmodul implementerar Address Resolution Protocol (ARP) som definieras i RFC 826. Den används för att konvertera mellan Layer 2-maskinvaruadresser och IPv4-protokolladresser på direkt anslutna nätverk. Användaren interagerar normalt inte direkt med denna modul förutom vid konfiguration; istället tillhandahåller den en tjänst för andra protokoll i kärnan.

En användarprocess kan ta emot ARP-paket genom att använda packet(7)-sockets. Det finns också en mekanism för att hantera ARP-cache i användarutrymmet med hjälp av netlink(7)-sockets. ARP-tabellen kan även styras via ioctl(2) på vilken AF_INET-socket som helst.

ARP-modulen upprätthåller en cache över mappningar mellan maskinvaruadresser och protokolladresser. Cachen har en begränsad storlek, så gamla och mindre frekvent använda poster rensas automatiskt. Poster som är markerade som permanenta tas aldrig bort av denna process. Cachen kan direkt manipuleras med hjälp av ioctl och dess beteende kan anpassas via /proc-gränssnittet som beskrivs nedan.

När en befintlig mappning inte får någon positiv återkoppling efter en tid (se /proc-gränssnittet nedan), betraktas en neighbor-cachepost som föråldrad. Positiv återkoppling kan komma från högre lager, exempelvis en lyckad TCP ACK. Andra protokoll kan signalera framsteg med flaggan MSG_CONFIRM vid sendmsg(2). Om ingen framgång noteras försöker ARP att återuppta mappningen genom att först fråga en lokal ARP-daemon (app_solicit) för en uppdaterad MAC-adress. Misslyckas detta skickas unicast-prober och, i sista hand, ett nytt ARP-broadcast.

Linux lägger automatiskt till en icke-permanent proxy ARP-post när den tar emot en förfrågan för en adress den vidarebefordrar och proxy ARP är aktiverat på den mottagande gränssnittet. Ingen proxy ARP-post läggs till om det finns en avvisande route för målet.

Ioctls

Tre ioctls är tillgängliga på alla AF_INET-sockets. De tar en pekare till en struct arpreq som argument:

``` struct arpreq {

   struct sockaddr arp_pa;      /* Protokolladress */
   struct sockaddr arp_ha;      /* Maskinvaruadress */
   int             arp_flags;   /* Flaggar */
   struct sockaddr arp_netmask; /* Nätmask för protokolladress */
   char            arp_dev[16]; /* Nätverksenhet */

}; ```

De tillgängliga ioctls är:

  • SIOCSARP: Skapar en ARP-mappning.
  • SIOCDARP: Tar bort en ARP-mappning.
  • SIOCGARP: Hämtar en ARP-mappning.

För att skapa eller ta bort ARP-mappningar krävs administratörsrättigheter (CAP_NET_ADMIN) eller ett effektivt UID på 0.

/proc-gränssnitt

ARP stödjer ett antal /proc-gränssnitt för att konfigurera parametrar globalt eller per gränssnitt. Dessa kan nås genom att läsa eller skriva till filer i katalogen `/proc/sys/net/ipv4/neigh/`. Varje nätverksenhet i systemet har en egen katalog under denna. Inställningarna i default-katalogen används för alla nysskapade enheter.

Nedan listas några viktiga parametrar:

  • base_reachable_time_ms: Hur länge en mappning anses giltig utan positiv återkoppling. Standard är 30000 ms.
  • gc_thresh1, gc_thresh2, gc_thresh3: Minimum, mjuk maxgräns och hård maxgräns för antalet poster i ARP-cachen.
  • mcast_solicit: Maximalt antal multicastförsök för att lösa en adress. Standard är 3.
  • retrans_time_ms: Antalet millisekunder innan en förfrågan skickas om. Standard är 1000 ms.

Versioner

  • struct arpreq ändrades i Linux 2.0 för att inkludera medlemmen arp_dev.
  • Stöd för nätverks-proxy ARP-poster (nätmask != 0xffffffff) togs bort i Linux 2.2.

Buggar

  • Vissa timers specificeras i jiffies, vilket kan bero på arkitektur och kärnversion. Se time(7).

Se även

Sidslut

Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man7/arp.7.html


Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till PC Service som har sponsrat Linux.se med webbhotell.