Настройка кэша 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 может привести к снижению производительности. Это происходит по следующей причине:
- Текущий отправляемый пакет должен ждать, пока в сети не будет найден адрес ARP.
- Из кэша ARP должна быть удалена еще одна запись ARP. Если нужны все адреса, то в случае, когда на адрес хоста, который был удален, были отправлены пакеты, требуется еще один адрес.
- Может произойти переполнение очереди вывода ARP, что приведет к потере пакетов.
Параметры arpqsize, arptab_bsiz и arptab_nb являются параметрами перезагрузки, так как при их изменении необходимо перезагрузить систему. Это связано с тем, что при изменении значений указанных параметров изменяются таблицы, создаваемые при загрузке системы или при загрузке TCP/IP.
Параметр arpt_killc определяет время ожидания (в минутах) перед удалением записи ARP. По умолчанию значение параметра arpt_killc равно 20 минутам. Записи ARP удаляются из таблицы каждые arpt_killc минут. Это позволяет отслеживать возможные изменения 48-разрядного адреса хоста, например, при замене сетевого адаптера. Эта процедура гарантирует, что из кэша удаляются все устаревшие записи, например, записи, которые могли бы помешать установить соединение с таким хостом из-за использования старого адреса. При увеличении этого времени сокращается время, затрачиваемое системой на поиск ARP, но при этом может увеличиться время хранения устаревших адресов хоста. arpt_killc - это динамический параметр, поэтому его можно изменять в процессе работы, не перезагружая систему.
# netstat -p arp
arp:
6 пакетов отправлено
0 пакетов удалено
? (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 запись.