ARP 高速缓存调整
地址解析协议 (ARP) 用来将 32 位 IPv4 地址映射成数据链路协议要求的 48 位主机适配器地址。
ARP 是由系统透明处理的。 但是,系统维护着一个 ARP 高速缓存,这是一张拥有相关联的 32 位 IP 地址及其 48 位主机地址的表。 您可能需要在连接了大量机器(客户机)的环境中更改 ARP 高速缓存的大小。 这可以使用 no 和 netstat 命令进行。
no 命令配置网络调整参数,并且其 ARP 相关可调参数如下:
- arpqsize = 12
- arpt_killc = 20
- arptab_bsiz = 7
- arptab_nb = 149
ARP 表大小由 arptab_nb 参数定义的大量存储区组成。 每个存储区容纳 arptab_bsiz 参数所定义数量的条目。 缺省值为 149 个存储区,每个存储区中包含 7 个条目,于是该表可容纳 1043 (149 x 7) 个主机地址。 此缺省设置将对 IP 网络上与其他最多 1043 台机器并发通信的系统起作用。 如果服务器在网络上并发连接到的机器数大于 1043,那么 ARP 表将变得过小,从而造成 ARP 表颠簸并导致性能变差。 然后,操作系统必须清除高速缓存中的某个条目,并替换为新地址。 这将要求 TCP 或 UDP 信息包在 ARP 协议交换该信息时排队。 arpqsize 参数确定在接收到某个从 ARP 请求返回的 ARP 响应之前这些等待的信息包中有多少可由 ARP 层排队。 如果 ARP 队列超出限度,那么删除传出的 TCP 或 UDP 信息包。
ARP 高速缓存颠簸可能对性能产生负作用,原因如下:
- 当前传出的信息不得不等待以在网络上进行 ARP 协议查找。
- 另一个 ARP 项必须从 ARP 高速缓存中删除。 如果需要所有地址,那么当有信息包发送到已删除的主机地址时,就需要另一个地址。
- ARP 输出队列可能超出限度,这样会导致删除信息包。
arpqsize、arptab_bsiz 和 arptab_nb 参数全都是重新引导参数,这意味着如果这些参数的值因为这些参数更改了引导时或 TCP/IP 装入时所构建的表而发生变化,就必须重新引导系统。
arpt_killc 参数是指删除某个 ARP 项之前的时间(以分钟为单位)。 arpt_killc 参数的缺省值为 20 分钟。 每当经过 arpt_killc 参数所定义的分钟数,ARP 条目就会从表中删除,以应对主机系统可能更改其 48 位地址的情况,当更换主机系统的网络适配器时,就会发生此情况。 这样可确保高速缓存中的所有旧项都被删除,因为它们会阻止与此类主机的通信,直到删除其旧地址为止。 增加这个时间会减少系统进行的 ARP 查找,但可能导致所包含的旧主机地址的时间更久远。 arpt_killc 参数是动态参数,因而无须重新引导系统即可更改该参数。
# netstat -p arp
arp:
6 packets sent
0 packets purged
? (10.3.6.1) at 0:6:29:dc:28:71 [ethernet] stored
bucket: 0 contains: 0 entries
bucket: 1 contains: 0 entries
bucket: 2 contains: 0 entries
bucket: 3 contains: 0 entries
bucket: 4 contains: 0 entries
bucket: 5 contains: 0 entries
bucket: 6 contains: 0 entries
bucket: 7 contains: 0 entries
bucket: 8 contains: 0 entries
bucket: 9 contains: 0 entries
bucket: 10 contains: 0 entries
bucket: 11 contains: 0 entries
bucket: 12 contains: 0 entries
bucket: 13 contains: 0 entries
bucket: 14 contains: 1 entries
bucket: 15 contains: 0 entries
...lines omitted...
There are 1 entries in the arp table.