Provided by: manpages-zh_1.6.3.3-1_all bug

NAME

       arp - Linux的ARP核心模塊

描述

       這個核心協議模塊實現RFC826中定義的           Address          Resolution          Protocol
       [譯註:即TCP/IP的第三層到第一層的地址轉換協議],  用於在直接相連的網絡中換第二層硬件地址和
       Ipv4 協議地址之間的轉換。 用戶除非想對其進行配置,否則一般不會直接操作這個模塊。

       實際上,它提供對核心中其它協議的服務。

       用戶進程可以使用  packet(7) 的 sockets,收到 ARP 包(譯註:一譯分組)。 還有一種機制是使用
       netlink(7) sockets,在用戶空間管理 ARP  緩存的機制。  我們也可以通過  ioctl  (2)  控制任意
       PF_INET socket上的 ARP 表

       ARP                     模塊維護一個硬件地址到協議地址映射的緩存。這個緩存有大小限制,所以
       不常用的和舊的記錄(Entry)將被垃圾收集器清除(garbage-collected),
       垃圾收集器永遠不能刪除標爲永久的記錄。我們可以使用ioctls直接操縱緩衝,
       並且其性狀可以用下面定義的 sysctl 調節。

       如果在限定的時間(見下面的sysctl)內,一條現存映射沒有肯定反饋時,
       則認爲相鄰層的緩存記錄失效。          爲了再次向目標發送數據,ARP將首先試着詢問本地arp進程
       app_solicit                   次,獲取更新了的                   MAC(介質訪問控制)地址。
       如果失敗,並且舊的MAC地址是已知的,則發送         ucast_solicit        次的        unicast
       probe。如果仍然失敗,則將向網絡廣播一個新的ARP請求,此時要 有待發送數據的隊列

       如果 Linux 接到一個地址請求,而且該地址指向 Linux 轉發的地址, 並且接收接口打開了代理  arp
       時,Linux 將自動添加一條非永久的 代理 arp 記錄;如果存在拒絕到目標的路由,則不添加代理 arp
       記錄。

IOCTLS

       有三個  ioctl  可以用於所有  PF_INET   的   sockets   中。它們以一個指向   struct   arpreq
       的指針作爲它們的參數。

       struct arpreq
       {
       struct sockaddr arp_pa; /* 協議地址(protocol address)*/
       struct sockaddr arp_ha; /* 硬件地址(hardware address) */
       int arp_flags; /* 標誌(flags) */
       struct sockaddr arp_netmask;
       /* 協議地址的網絡掩碼(netmask of protocol address)*/
       char arp_dev[16];
       };

       SIOCSARP,   SIOCDARPSIOCGARP   可分貝設置、刪除和獲取   ARP  映射。設置和刪除  ARP
       映射是特許操作, 只有擁有 CAP_NET_ADMIN 權限的進程或有效UID爲0的進程可以執行。

       arp_pa  必須是  AF_INET  socket,並且  arp_ha  必須有和  arp_dev.   指定的設備相同的類型。
       arp_dev 是個以null結束的設備名字符串。

       ┌───────────────────────────────────────────────────┐
       │                    arp_flags                      │
       ├────────────────┬──────────────────────────────────┤
       │標誌(flag)      │ 含義(meaning)                    │
       ├────────────────┼──────────────────────────────────┤
       │ATF_COM         │ 查找完成(Lookup complete)        │
       ├────────────────┼──────────────────────────────────┤
       │ATF_PERM        │ 永久記錄(Permanent entry)        │
       ├────────────────┼──────────────────────────────────┤
       │ATF_PUBL        │ 張貼記錄(Publish entry)          │
       ├────────────────┼──────────────────────────────────┤
       │ATF_USETRAILERS │ 要求使用後綴(Trailers requested) │
       ├────────────────┼──────────────────────────────────┤
       │ATF_NETMASK     │ 使用網絡掩碼(Use a netmask)      │
       ├────────────────┼──────────────────────────────────┤
       │ATF_DONTPUB     │ 不回覆(Don't answer)             │
       └────────────────┴──────────────────────────────────┘

       如果設置了  ATF_NETMASK  標誌,那麼  arp_netmask  必須有效。  Linux 2.2 不支持代理網絡 ARP
       記錄,因此,要設成0xffffffff或者0,  以刪除現存代理arp記錄。這裏不使用   現存代理arp記錄。
       ATF_USETRAILERS 已經過時了,不應該繼續使用。

SYSCTLS

       ARP   支持一個   sysctl   接口,可以用以配置全局參數或逐個網絡接口地進行配製。  該  sysctl
       可以通過           /proc/sys/net/ipv4/neigh/*/*           文件或者使用           sysctl(2)
       接口來訪問。系統中每個接口都在                                  /proc/sys/net/ipv4/neigh/.
       中有自己的目錄。`default'目錄中的設置用於所有新建的設備。                           sysctl
       相關的時間是以秒爲單位,除非特別聲明過.

       anycast_delay
              對 IPv6 相鄰請求信息的回覆的最大延遲時間; 目前還不支持 anycast。缺省值爲1秒。

       app_solicit
              這是在使用多路廣播探測(multicast                                         probe)前,
              經過網絡連接送到用戶間隙ARP端口監控程序的探測(probe)  最大數目(見   mcast_solicit
              )。 缺省值爲0。

       base_reachable_time
              一旦發現相鄰記錄,至少在一段介於     base_reachable_time/2和3*base_reachable_time/2
              之間的隨機時間內,該記錄是有效的。如果收到上層協議的肯定反饋,
              那麼記錄的有效期將延長。 缺省值是30秒。

       delay_first_probe_time
              發現某個相鄰層記錄無效(stale)後,發出第一個探測要等待的時間。 缺省值是5秒。

       gc_interval
              收集相鄰層記錄的無用記錄的垃圾收集程序的運行週期,缺省爲30秒。

       gc_stale_time
              決定檢查一次相鄰層記錄的有效性的週期。
              當相鄰層記錄失效時,將在給它發送數據前,再解析一次。 缺省值是60秒。

       gc_thresh1
              存在於ARP高速緩存中的最少層數,如果少於這個數, 垃圾收集器將不會運行。缺省值是128。

       gc_thresh2
              保存在                      ARP                      高速緩存中的最多的記錄軟限制。
              垃圾收集器在開始收集前,允許記錄數超過這個數字 5 秒。 缺省值是 512。

       gc_thresh3
              保存在      ARP     高速緩存中的最多記錄的硬限制,     一旦高速緩存中的數目高於此,
              垃圾收集器將馬上運行。缺省值是1024。

       locktime
              ARP 記錄保存在高速緩存內的最短時間(jiffy數),  以防止存在多個可能的映射(potential
              mapping)時,  ARP  高速緩存系統的顛簸 (經常是由於網絡的錯誤配置而引起)。 缺省值是 1
              秒。

       mcast_solicit
              在把記錄標記爲不可抵達的之前,
              用多路廣播/廣播(multicast/broadcast)方式解析地址的最大次數。 缺省值是3。

       proxy_delay
              當接收到有一個請求已知的代理    ARP    地址的   ARP   請求時,   在迴應前可以延遲的
              jiffy(時間單位,見BUG)數目。 這樣,以防止網絡風暴。缺省值是0.8秒。

       proxy_qlen
              能放入代理 ARP 地址隊列(proxy-ARP addresses)的數據包最大數目。缺省值是64。

       retrans_time
              重發一個請求前的等待 jiffy(時間單位,見BUG)的數目。缺省值是1秒。

       ucast_solicit
              詢問ARP端口監控程序前,試圖發送單探測(unicast  probe)的次數。  (見  app_solicit).
              缺省值是3秒。

       unres_qlen
              每個沒有被其它網絡層解析的地址,在隊列中可存放包的最大數目。缺省值是3.

BUGS

       時鐘設置的時間單位   jiffy,跟硬件體系有關。   在   Alpha   上,一個   jiffy   是   1/1024
       秒,而在其它機器上,是 1/100 秒。

       目前還沒有辦法從用戶空間發送肯定反饋。 這意味着在用戶空間實現的面向連接的協議 (connection
       oriented   protocols)將產生大量的   ARP   通訊。   因爲ndisc將重新探測MAC地址。內核   NFS
       的實現也存在同樣的問題。

       這個手冊頁主要講 IPv4 規範並且共享 IPv4 和 IPv6 的功能.

版本

       Linux 2.0中的 struct arpreq, 添加了  arp_dev  ,同時  ioctl  數目也改變了。在  Linux  2.2
       中將不再支持舊的ioctl。

       在     Linux    2.2    中,取消了對網絡代理    arp    記錄(網絡掩碼不是0xffffffff)的支持。
       這個功能被內核設置的一個自動代理     arp     取代,這個自動代理      arp      用於所有位於
       其它接上的可到達的主機(如果該接口的轉發和代理 arp 打開了)。

另見

       ip(7)

       RFC826 瞭解 ARP 描述.
       RFC2461 描述了IPv6使用的近鄰查找以及基本算法

[中文版維護人]

       Alan Yao <Alan_Yao@163.net>

[中文版最新更新]

       2000/10/23

《中國linux論壇man手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh