Що відбувається, коли кеш ARP переповнюється?


14

Щонайменше в одній реалізації існує жорсткий обмеження на потужність таблиці ARP. Що станеться, коли кеш ARP заповнений і пакет запропонований з пунктом призначення (або next-hop), який не кешований? Що відбувається під кришкою, і який вплив на якість обслуговування?

Наприклад, маршрутизатори Brocade NetIron XMR і Brocade MLX мають максимум налаштованої ip-arpсистеми . Значення за замовчуванням у цьому випадку - 8192; розмір підмережі / 19. З документації незрозуміло, чи це інтерфейс або весь маршрутизатор, але для цього питання ми можемо припустити, що це за один інтерфейс.

Мало хто з мережників спеціально налаштував би підмережу / 19, але це не так. Ми переносили основний маршрутизатор із моделі Cisco на Brocade. Однією з багатьох відмінностей між Cisco та Brocade є те, що Cisco приймає статичні маршрути, визначені як вихідним інтерфейсом, так і адресою наступного переходу, але Brocade наполягає на тому чи іншому. Ми відкинули наступну адресу і зберегли інтерфейс. Пізніше ми дізналися про помилку наших способів і змінили від інтерфейсу до наступного переходу, але, здавалося, все працювало спочатку.

+----+ iface0    +----+
| R1 |-----------| R2 |---> (10.1.0.0/16 this way)
+----+.1       .2+----+
      10.0.0.0/30

До міграції R1 був Cisco і мав наступний маршрут.

ip route 10.1.0.0 255.255.0.0 iface0 10.0.0.2

Після міграції R1 був Brocade і мав наступний маршрут.

ip route 10.1.0.0 255.255.0.0 iface0

R2 - маршрутизатор Cisco, а маршрутизатори Cisco виконують проксі ARP за замовчуванням. Це (неправильно) конфігурація у виробництві, яка встановлює передумови для переповнення кешу ARP.

  1. R1 отримує пакет, призначений для мережі 10.1.0.0/16.
  2. На основі маршруту статичного інтерфейсу, R1 ARP для пункту призначення на iface0
  3. R2 визнає, що він може дістатися до пункту призначення, і відповідає ARP за допомогою власного MAC.
  4. R1 кешує результат ARP, який поєднує IP у віддаленій мережі з MAC R2.

Це відбувається для кожного окремого місця призначення в 10.1.0.0/16. Отже, незважаючи на те, що / 16 належним чином підмережа за межами R2, і є лише два вузли на ланцюзі, що примикає до R1 і R2, R1 зазнає перевантаження AR-кешу, оскільки це змушує R2 поводитись так, ніби всі 65k адреси підключені безпосередньо.

Причина, яку я задаю цьому питанню, полягає в тому, що я сподіваюся, що це допоможе мені зрозуміти повідомлення про проблеми з мережевими послугами (через кілька днів), що призвело нас, врешті-решт, до переповненого кешу ARP. В дусі моделі StackExchange я намагався перекрити це, на що, на мою думку, чітке, конкретне питання, на яке можна відповісти об'єктивно.

EDIT 1 Щоб бути зрозумілим, я запитую про частину шару клею між каналом передачі даних (шар 2) та мережею (рівень 3), а не таблицею переадресації MAC всередині шару зв'язку даних. Хост або маршрутизатор будує першу для зіставлення IP-адрес на MAC-адреси, тоді як комутатор будує другий для зіставлення MAC-адрес у порти.

EDIT 2 Хоча я ціную зусилля, до яких відповіли респонденти, щоб пояснити, чому деякі реалізації не піддаються переповненню кешу ARP, я вважаю, що для цього питання важливо вирішити ті, які є. Питання полягає в тому, "що станеться, коли", а не "чи сприйнятливий постачальник X ". Зараз я зробив свою частину, описуючи конкретний приклад.

EDIT 3 Ще одне питання, це не "як я запобігти переповненню кешу ARP?"


ви шукаєте інформацію про таблицю mac-адреси або переповнення таблиці ARP?
Майк Пеннінгтон

Ви можете, будь ласка, детальніше розглянути, як ви думаєте, що таблиця арп переповниться? це пов’язано з реальною проблемою чи чисто гіпотетичною? так чи інакше, нам потрібні деталі щодо того, на який точний сценарій ми відповідаємо
Майк Пеннінгтон,

@MikePennington Це справжня проблема. Кеш ARP може переповнюватися, якщо, наприклад, велика кількість IP-адрес або діють так, ніби вони є, на одному посиланні.
neirbowj

Cisco IOS не кешує ARP на маршрутизаторі, якщо ARP не отримується з підмережі, налаштованої на маршрутизаторі. Коли я кажу "справжня проблема", я маю на увазі проблему, з якою у вас виникає ... не проблема, яку ви можете уявити,
Майк Пеннінгтон,

Дякую, що переформулювали питання, тому що коли я думаю про перемикачі (шар 2), у вас немає таблиці ARP. ARP пов'язаний з TCP / IP, і перемикач рівня 2 не робить такого думки, але коли ви потрапляєте в третій рівень комутації, у вас може бути таблиця ARP. Однак, якщо я правильно пам’ятаю, інтерфейс на комутаторі рівня 3 повинен мати IP-адресу для відображення в таблиці ARP. Не зрозумів спочатку, що ти говорив, гостя рано вранці на мене грубо. Програміст в мені думає, що після заповнення таблиці ARP він буде або
руйнуватися

Відповіді:


4

Редагувати 2 :

Як ви вже згадували ...

ip route 10.1.0.0 255.255.0.0 iface0

Змушує Brocade прокси-арп для кожного пункту призначення в 10.1.0.0/16 так, як ніби він безпосередньо підключений до нього iface0.

Я не можу відповісти на реалізацію кеша ARP Brocade, але я просто зазначу просте рішення вашої проблеми ... налаштуйте свій маршрут по-іншому:

ip route 10.1.0.0 255.255.0.0 CiscoNextHopIP

Тим самим ви забороняєте Brocade від ARP-ing протягом усіх 10.1.0.0/16 (зауважте, можливо, вам знадобиться перенумерувати зв'язок між R1 та R2, щоб бути поза 10.1.0.0/16, в залежності від реалізації Брокади речей) .


Оригінальна відповідь :

Я очікую, що у більшості, а то й у всіх реалізаціях існує жорсткий обмеження на потужність таблиці ARP.

Маршрутизатори процесорів Cisco IOS обмежені лише кількістю DRAM в маршрутизаторі, але це, як правило, не буде обмежуючим фактором. Деякі перемикачі (наприклад, Catalyst 6500) мають жорстке обмеження на таблиці суміжності (яке корелює з таблицею ARP); Sup2T має 1 мільйон суміжностей .

Отже, що відбувається, коли кеш ARP заповнений і пакет запропонований з пунктом призначення (або next-hop), який не кешований?

Маршрутизатори процесора Cisco IOS не мають місця в таблиці ARP, оскільки ці ARP зберігаються в DRAM. Припустимо, ви говорите про Sup2T. Подумайте про це так, припустимо, у вас був Cat6500 + Sup2T і ви налаштували всіх можливих власників, технічно це

4094 total Vlans - Vlan1002 - Vlan1003 - Vlan1004 - Vlan1005 = 4090 Vlans

Припустимо, ви робите кожен Vlan a / 24 (так що це 252 можливих ARP), і ви пакуєте кожну Vlan повну ... тобто 1 мільйон записів ARP.

4094 * 252 = 1,030,680 ARP Entries

Кожен з цих ARP споживав би певну кількість пам'яті в самій таблиці ARP плюс таблицю суміжності IOS. Я не знаю, що це, але скажімо, загальна накладні витрати ARP - 10 байт ...

Це означає, що ви зараз витратили 10 МБ на накладні витрати ARP; це все ще не так вже й багато місця ... якби у вас було так мало пам’яті, ви побачили б щось подібне %SYS-2-MALLOCFAIL.

Завдяки такій кількості ARP та чотиригодинному тайм-ауту ARP, вам доведеться обслуговувати майже 70 ARP в секунду в середньому; більш імовірно, що обслуговування 1 мільйона записів ARP вичерпає процесор маршрутизатора (потенційно повідомлення CPUHOG).

У цей момент ви можете почати підстрибувати суміжності протоколу маршрутизації та мати IP-адреси, які просто недоступні, оскільки процесор маршрутизатора був занадто зайнятий ARP для IP.


2

Тільки фактичний досвід, який я мав з цим явищем, був на перемикачах C3550 (ліміт MAC 2-8k, залежно від шаблону sdm) і там він випав із таблиці найдавніший запис.


1
Це здається, що ви говорите про таблицю пересилання MAC, а не кеш ARP. Будь ласка, дивіться мою редакцію.
neirbowj

1
Я бачу вашу думку. Однак у цьому конкретному випадку ефект був таким самим, як ці комутатори також були завершенням L3 для ряду дуже великих IP-підмереж. Врешті-решт вирішується заміною вимикачів. На L2 перемикач затоплює кадри, він не може кешувати MAC, але на L3 він повинен скидати старіші записи ARP та / або ARP для кожного пакету, що швидко вичерпає процесор на них.

2

Для IOS та JunOS та інших комерційних стеків, які ви просто повинні перевірити, це не дуже складно.

Але для linux , freebsd, netbsd, openbsd, uIP, lwIP та, ймовірно, багатьох інших реалізацій ви можете просто перевірити їх вихідний код на поведінку.

У Linux вам потрібно встановити прапорець 'net / core / susjedbour.c' (почати з рядка 'if (записи> = tbl-> gc_thresh3' || ') та' net / ipv4 / arp.c '.
У Linux ви, схоже, мають три повні рівні

  1. gc_thresh1 - нічого не робиться, поки це не вдалося
  2. gc_thresh2 - це може бути вражено миттєво
  3. gc_thresh3 - цей розмір не можна перевищувати

Коли gc_thresh3 намагається перевищити, він намагається змусити запуск сміття виконувати, якщо тільки він не був запущений недавно. Схоже, збирання сміття видаляє записи, на які вже не згадується, тому не означає найдавніших чи новіших, однак, перевищення gc_staletime, здається, є одним із способів перенаправлення запису, який знову перекладається на найдавніший запис.
Якщо збирання сміття неможливо виконати, новий запис просто не додається. Всі ці інтервали gc_threshN та періодичного збору сміття можна налаштувати.
Код - це агностик сімейства адрес (ipv4, ipv6), тому таблиці IPv6 ND і IPv4 ARP обробляються точно таким же кодовим шляхом, а не дублюючим шляхом.


1

Це дозволить зберегти IP-адресу в таблиці та залежно від реалізації слід видалити найстаріший запис. Вплив на продуктивність залежить, якщо це нечасті випадки, які не мають великого впливу, але це вектор атаки, тому хтось може надіслати багато арп, які впливають на використання процесора


1

Комутатор перейде на ARP для цього IP-адреси призначення, щоб отримати його MAC-адресу (яка також заповнила таблицю CAM відповіді). Запит ARP транслюється у всі порти. Для цього потрібен процесор і включає ARP Inputпроцес. Якщо запити ARP відповідають одному IP-адресу, через часто переповнення таблиці ARP, комутатор повинен обмежувати швидкість ARP один раз на дві секунди. Якщо запити до випадкових IP-адрес досить часто, ЦП може спринцюватися тим, що ЦП задіяний і в запитах ARP, і у відповідях.


Де ви знайшли межу "раз на дві секунди"?
Марко Марзетті

«ARP запити на той же IP - адреса , є швидкість обмежується одним запиту кожні дві секунд» - cisco.com/en/US/products/hw/routers/ps359 / ...
generalnetworkerror

Це не специфічне значення для C7500? Наприклад, C6500 може використовувати команду "mls qos protokol arp police <bps>" або CoPP.
Марко Марзетті

1

Після атак, які я дізнався про комутатори Cisco 3550, 3560 тощо, ви можете перетворити їх на гігантський концентратор, як тільки ви перевантажите ліміт MAC-адреси. Комутатори мають встановлений ліміт MAC-адреси (близько 6000), який можна зберігати, і як тільки ця межа буде досягнута, вона витісне всі дані з її інтерфейсів. Не можу згадати, якщо це стосується пакетів 802.1q, тому що мені це вже давно не доводилося робити. Можливо, доведеться запустити мою мережеву лабораторію вдома, щоб це дізнатися.


Здається, ви також говорите про таблицю переадресації MAC, а не кеш ARP. Будь ласка, дивіться мою редакцію.
neirbowj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.