Настройка кэша ARP

ARP (протокол преобразования адресов) - это протокол, применяемый для преобразования 32-разрядных IP-адресов IPv4 в 48-разрядный адрес адаптера хоста, используемый протоколом передачи данных.

Преобразование адресов выполняется прозрачно для системы. Однако, система поддерживает кэш 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) адреса хостов. Это значение по умолчанию будет работать для систем, которые одновременно обмениваются данными не более чем с 1043 системами в сети IP. Если сервер связан более чем с 1043 системами в сети, то таблица ARP будет слишком мала, вследствие чего будет снижена производительность. Операционная система должна удалить запись из кэша и заменить ее новым адресом. Это приводит к тому, что пакеты TCP или UDP будут ждать в очереди, пока протокол ARP не поменяет информацию об адресах. Параметр arpqsize определяет, сколько таких ожидающих пакетов может поставить в очередь слой ARP, пока не будет получен ответ на запрос ARP. При переполнении очереди ARP отправляемые пакеты TCP или UDP будут потеряны.

Частое обновление кэша ARP может привести к снижению производительности. Это происходит по следующей причине:

  1. Текущий отправляемый пакет должен ждать, пока в сети не будет найден адрес ARP.
  2. Из кэша ARP должна быть удалена еще одна запись ARP. Если нужны все адреса, то в случае, когда на адрес хоста, который был удален, были отправлены пакеты, требуется еще один адрес.
  3. Может произойти переполнение очереди вывода ARP, что приведет к потере пакетов.

Параметры arpqsize, arptab_bsiz и arptab_nb являются параметрами перезагрузки, так как при их изменении необходимо перезагрузить систему. Это связано с тем, что при изменении значений указанных параметров изменяются таблицы, создаваемые при загрузке системы или при загрузке TCP/IP.

Параметр arpt_killc определяет время ожидания (в минутах) перед удалением записи ARP. По умолчанию значение параметра arpt_killc равно 20 минутам. Записи ARP удаляются из таблицы каждые arpt_killc минут. Это позволяет отслеживать возможные изменения 48-разрядного адреса хоста, например, при замене сетевого адаптера. Эта процедура гарантирует, что из кэша удаляются все устаревшие записи, например, записи, которые могли бы помешать установить соединение с таким хостом из-за использования старого адреса. При увеличении этого времени сокращается время, затрачиваемое системой на поиск ARP, но при этом может увеличиться время хранения устаревших адресов хоста. arpt_killc - это динамический параметр, поэтому его можно изменять в процессе работы, не перезагружая систему.

Для получения статистики ARP введите команду netstat -p arp. Эта команда выдает следующую информацию: сколько всего запросов ARP было отправлено; сколько пакетов было удалено из таблицы при удалении записи, для того чтобы освободить место для новой записи. Если число удаленных пакетов велико, размер таблицы ARP необходимо увеличить. Ниже приведен пример команды netstat -p arp.
# netstat -p arp

arp:  
     6 пакетов отправлено
     0 пакетов удалено
Команда arp -a позволяет просмотреть содержимое таблицы ARP. Вывод команды содержит информацию о том, какие адреса есть в таблице, как они хэшируются и к каким сегментам относятся.
 ? (10.3.6.1) at 0:6:29:dc:28:71 [ethernet] stored 
                                                   
сегмент:    0     содержит:    0 записей            
сегмент:    1     содержит:    0 записей            
сегмент:    2     содержит:    0 записей            
сегмент:    3     содержит:    0 записей            
сегмент:    4     содержит:    0 записей            
сегмент:    5     содержит:    0 записей            
сегмент:    6     содержит:    0 записей            
сегмент:    7     содержит:    0 записей            
сегмент:    8     содержит:    0 записей            
сегмент:    9     содержит:    0 записей            
сегмент:   10     содержит:    0 записей            
сегмент:   11     содержит:    0 записей            
сегмент:   12     содержит:    0 записей            
сегмент:   13     содержит:    0 записей            
сегмент:   14     содержит:    1 запись            
сегмент:   15     содержит:    0 записей            


...строки пропущены...

В таблице ARP содержится 1 запись.