.\" 版权所有:1999 Matthew Wilcox。发布任何修改拷贝时,必须包含此处原文, .\" 并将修改人和修改日期,加在这里 .\" 中文版版权所有 Alian Yao, BitBIRD www.linuxforum.net 2000 .\" 修改1:June 1999 Andi Kleen .TH ARP 7 "3 Jun 1999" "Linux Man Page" "Linux 程序员手册" .SH NAME arp \- Linux的ARP核心模块 .SH 描述 这个核心协议模块实现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 ", " SIOCDARP " 和 " SIOCGARP 可分贝设置、删除和获取 ARP 映射。设置和删除 ARP 映射是特许操作, 只有拥有 .B CAP_NET_ADMIN 权限的进程或有效UID为0的进程可以执行。 .I arp_pa 必须是 .B AF_INET socket,并且 .I arp_ha 必须有和 .IR arp_dev . 指定的设备相同的类型。 .I arp_dev 是个以null结束的设备名字符串。 .TS tab(:) allbox; c s l l. \fIarp_flags\fR 标志(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) .TE .PP 如果设置了 .B ATF_NETMASK 标志,那么 .I arp_netmask 必须有效。 Linux 2.2 不支持代理网络 ARP 记录,因此,要设成0xffffffff或者0, 以删除现存代理arp记录。这里不使用 现存代理arp记录。 .B ATF_USETRAILERS 已经过时了,不应该继续使用。 .SH 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 "/2和3*" base_reachable_time /2 之间的随机时间内,该记录是有效的。如果收到上层协议的肯定反馈, 那么记录的有效期将延长。 缺省值是30秒。 .TP .B delay_first_probe_time 发现某个相邻层记录无效(stale)后,发出第一个探测要等待的时间。 缺省值是5秒。 .TP .B gc_interval 收集相邻层记录的无用记录的垃圾收集程序的运行周期,缺省为30秒。 .TP .B gc_stale_time 决定检查一次相邻层记录的有效性的周期。 当相邻层记录失效时,将在给它发送数据前,再解析一次。 缺省值是60秒。 .TP .B gc_thresh1 存在于ARP高速缓存中的最少层数,如果少于这个数, 垃圾收集器将不会运行。缺省值是128。 .TP .B gc_thresh2 保存在 ARP 高速缓存中的最多的记录软限制。 垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。 缺省值是 512。 .TP .B gc_thresh3 保存在 ARP 高速缓存中的最多记录的硬限制, 一旦高速缓存中的数目高于此, 垃圾收集器将马上运行。缺省值是1024。 .TP .B locktime ARP 记录保存在高速缓存内的最短时间(jiffy数), 以防止存在多个可能的映射(potential mapping)时, ARP 高速缓存系统的颠簸 (经常是由于网络的错误配置而引起)。 缺省值是 1 秒。 .TP .B mcast_solicit 在把记录标记为不可抵达的之前, 用多路广播/广播(multicast/broadcast)方式解析地址的最大次数。 缺省值是3。 .TP .B proxy_delay 当接收到有一个请求已知的代理 ARP 地址的 ARP 请求时, 在回应前可以延迟的 jiffy(时间单位,见BUG)数目。 这样,以防止网络风暴。缺省值是0.8秒。 .TP .B proxy_qlen 能放入代理 ARP 地址队列(proxy-ARP addresses)的数据包最大数目。缺省值是64。 .TP .B retrans_time 重发一个请求前的等待 jiffy(时间单位,见BUG)的数目。缺省值是1秒。 .TP .B ucast_solicit 询问ARP端口监控程序前,试图发送单探测(unicast probe)的次数。 (见 .IR app_solicit ). 缺省值是3秒。 .TP .B unres_qlen 每个没有被其它网络层解析的地址,在队列中可存放包的最大数目。缺省值是3. .SH 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 "[中文版维护人]" .B Alan Yao .SH "[中文版最新更新]" .B 2000/10/23 .SH "《中国linux论坛man手册页翻译计划》:" .BI http://cmpp.linuxforum.net .SH "跋" .br 本页面中文版由中文 man 手册页计划提供。 .br 中文 man 手册页计划:\fBhttps://github.com/man-pages-zh/manpages-zh\fR