ARP 7
目录
- NAME arp
- 描述 这个核心协议模块实现RFC826中定义的 Address Resolution Protocol [译注:即TCP/IP的第三层到第一层的地址转换协议], 用于在直接相连的网络中换第二层硬件地址和 Ipv4 协议地址之间的转换。 用户除非想对其进行配置,否则一般不会直接操作这个模块。 实际上,它提供对核心中其它协议的服务。 用户进程可以使用 .BR packet (7) 的 sockets,收到 ARP 包(译注:一译分组)。 还有一种机制是使用 .BR netlink (7) sockets,在用户空间管理 ARP 缓存的机制。 我们也可以通过 .B ioctl (2) 控制任意 .B PF_INET socket上的 ARP 表 ARP 模块维护一个硬件地址到协议地址映射的缓存。这个缓存有大小限制,所以 不常用的和旧的记录(Entry)将被垃圾收集器清除(garbage-collected), 垃圾收集器永远不能删除标为永久的记录。我们可以使用ioctls直接操纵缓冲, 并且其性状可以用下面定义的 sysctl 调节。 如果在限定的时间(见下面的sysctl)内,一条现存映射没有肯定反馈时, 则认为相邻层的缓存记录失效。 为了再次向目标发送数据,ARP将首先试着询问本地arp进程 .B app_solicit 次,获取更新了的 MAC(介质访问控制)地址。 如果失败,并且旧的MAC地址是已知的,则发送 .B ucast_solicit 次的 unicast probe。如果仍然失败,则将向网络广播一个新的ARP请求,此时要 有待发送数据的队列 如果 Linux 接到一个地址请求,而且该地址指向 Linux 转发的地址, 并且接收接口打开了代理 arp 时,Linux 将自动添加一条非永久的 代理 arp 记录;如果存在拒绝到目标的路由,则不添加代理 arp 记录。 .SH IOCTLS 有三个 ioctl 可以用于所有 .B PF_INET 的 sockets 中。它们以一个指向 .B struct arpreq 的指针作为它们的参数。 .nf .ta 4 20 33 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]; }; .fi .BR SIOCSARP
- SYSCTLS ARP 支持一个 sysctl 接口,可以用以配置全局参数或逐个网络接口地进行配制。 该 sysctl 可以通过 .B /proc/sys/net/ipv4/neigh/*/* 文件或者使用 .BR sysctl (2) 接口来访问。系统中每个接口都在 /proc/sys/net/ipv4/neigh/. 中有自己的目录。`default'目录中的设置用于所有新建的设备。 sysctl 相关的时间是以秒为单位,除非特别声明过. .TP .B anycast_delay 对 IPv6 相邻请求信息的回复的最大延迟时间; 目前还不支持 anycast。缺省值为1秒。 .TP .B app_solicit 这是在使用多路广播探测(multicast probe)前, 经过网络连接送到用户间隙ARP端口监控程序的探测(probe) 最大数目(见 .IR mcast_solicit )。 缺省值为0。 .TP .B base_reachable_time 一旦发现相邻记录,至少在一段介于 .IR base_reachable_time
- BUGS 时钟设置的时间单位 jiffy,跟硬件体系有关。 在 Alpha 上,一个 jiffy 是 1/1024 秒,而在其它机器上,是 1/100 秒。 目前还没有办法从用户空间发送肯定反馈。 这意味着在用户空间实现的面向连接的协议 (connection oriented protocols)将产生大量的 ARP 通讯。 因为ndisc将重新探测MAC地址。内核 NFS 的实现也存在同样的问题。 这个手册页主要讲 IPv4 规范并且共享 IPv4 和 IPv6 的功能. .SH 版本 Linux 2.0中的 .B struct arpreq, 添加了 .I arp_dev ,同时 ioctl 数目也改变了。在 Linux 2.2 中将不再支持旧的ioctl。 在 Linux 2.2 中,取消了对网络代理 arp 记录(网络掩码不是0xffffffff)的支持。 这个功能被内核设置的一个自动代理 arp 取代,这个自动代理 arp 用于所有位于 其它接上的可到达的主机(如果该接口的转发和代理 arp 打开了)。 .SH 另见 .BR ip (7) .PP RFC826 了解 ARP 描述. .br RFC2461 描述了IPv6使用的近邻查找以及基本算法 .SH
- [中文版最新更新]
- 《中国linux论坛man手册页翻译计划》:
- 跋
ARP
NAMEæè¿°
IOCTLS
SYSCTLS
BUGS
çæ¬
å¦è§
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·
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, SIOCDARP å SIOCGARP å¯åè´è®¾ç½®ãå é¤åè·å ARP æ å°ã设置åå é¤ ARP æ å°æ¯ç¹è®¸æä½ï¼ åªææ¥æ CAP_NET_ADMIN æéçè¿ç¨æææUID为0çè¿ç¨å¯ä»¥æ§è¡ã
arp_pa å¿é¡»æ¯ AF_INET socketï¼å¹¶ä¸ arp_ha å¿é¡»æå arp_dev. æå®ç设å¤ç¸åçç±»åã arp_dev æ¯ä¸ªä»¥nullç»æç设å¤åå符串ã

å¦æè®¾ç½®äº 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