क्या होता है जब ARP कैश ओवरफ्लो हो जाता है?


14

कम से कम एक कार्यान्वयन में एआरपी तालिका की क्षमता पर एक कठिन सीमा है। क्या होता है जब एआरपी कैश भरा हुआ होता है और एक गंतव्य (या अगले-हॉप) के साथ एक पैकेट पेश किया जाता है जिसे कैश नहीं किया जाता है? हुड के नीचे क्या होता है, और सेवा की गुणवत्ता पर क्या प्रभाव पड़ता है?

उदाहरण के लिए, ब्रोकेड नेटरॉन एक्सएमआर और ब्रोकेड एमएलएक्स राउटर में एक विन्यास ip-arpप्रणाली अधिकतम है । उस स्थिति में डिफ़ॉल्ट मान 8192 है; / 19 सबनेट का आकार। प्रलेखन से यह स्पष्ट नहीं है कि यह प्रति इंटरफ़ेस या पूरे राउटर के लिए है, लेकिन इस प्रश्न के उद्देश्य के लिए, हम इसे प्रति इंटरफ़ेस के अनुसार मान सकते हैं।

कुछ नेटवर्क उद्देश्य पर एक इंटरफ़ेस पर / 19 सबनेट कॉन्फ़िगर करेंगे, लेकिन ऐसा नहीं हुआ। हम एक सिस्को मॉडल से एक ब्रोकेड के लिए एक कोर राउटर को माइग्रेट कर रहे थे। सिस्को और ब्रोकेड के बीच कई अंतरों में से एक यह है कि सिस्को स्थैतिक मार्गों को स्वीकार करता है जो एक आउटबाउंड इंटरफ़ेस और अगले-हॉप पते दोनों के साथ परिभाषित होते हैं, लेकिन ब्रोकेड एक या दूसरे पर जोर देता है। हमने अगला-हॉप पता गिरा दिया और इंटरफ़ेस रखा। बाद में, हमने अपने तरीकों की त्रुटि सीखी, और इंटरफ़ेस से अगले-हॉप पते पर बदल दिया, लेकिन सब कुछ शुरू में काम कर रहा था।

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

माइग्रेशन से पहले, आर 1 एक सिस्को था, और उसके पास निम्न मार्ग था।

ip route 10.1.0.0 255.255.0.0 iface0 10.0.0.2

माइग्रेशन के बाद, आर 1 एक ब्रोकेड था, और उसके पास निम्न मार्ग था।

ip route 10.1.0.0 255.255.0.0 iface0

R2 एक सिस्को राउटर है, और सिस्को राउटर डिफ़ॉल्ट रूप से प्रॉक्सी एआरपी करते हैं । उत्पादन में यह (गलत) कॉन्फ़िगरेशन है जो एआरपी कैश ओवरफ्लो होने के लिए चरण निर्धारित करता है।

  1. R1 को 10.1.0.0/16 नेटवर्क के लिए नियत पैकेट प्राप्त होता है।
  2. स्थैतिक इंटरफ़ेस मार्ग के आधार पर, गंतव्य के लिए आर 1 एआरपी iface0
  3. आर 2 पहचानता है कि यह गंतव्य तक पहुंच सकता है, और एआरपी को अपने स्वयं के मैक के साथ प्रतिक्रिया करता है।
  4. R1 ARP परिणाम को कैश करता है जो R2 के मैक के साथ एक दूरस्थ नेटवर्क में एक आईपी को जोड़ता है।

यह 10.1.0.0/16 में हर अलग गंतव्य के लिए होता है। नतीजतन, भले ही / 16 आर 2 से परे ठीक से नेट-नेटेड हो, और आर 1 और आर 2 से सटे लिंक पर केवल दो नोड हैं, आर 1 एआरपी कैश ओवरलोड से ग्रस्त है क्योंकि यह आर 2 को व्यवहार करने के लिए प्रेरित करता है जैसे कि 65k पते सीधे जुड़े हुए हैं।

मैं यह सवाल पूछ रहा हूं, क्योंकि मुझे उम्मीद है कि यह नेटवर्क सेवा की परेशानी की रिपोर्ट (बाद के दिनों) को समझने में मदद करेगा जिसने हमें आखिरकार, एआरपी कैश को बह निकला। StackExchange मॉडल की भावना में, मैंने यह डिस्टिल करने की कोशिश की कि मेरा मानना ​​है कि यह एक कुरकुरा, विशिष्ट प्रश्न है जिसका उत्तर निष्पक्ष रूप से दिया जा सकता है।

EDIT 1 स्पष्ट होने के लिए, मैं डेटा लिंक (परत 2) और नेटवर्क (परत 3) के बीच गोंद परत के हिस्से के बारे में पूछ रहा हूं, डेटा लिंक परत के भीतर मैक अग्रेषण तालिका नहीं। एक होस्ट या राउटर, पूर्व के आईपी पते को मैक पते पर बनाता है, जबकि एक स्विच पोर्ट के मैक एड्रेस को बाद में बनाता है।

EDIT 2 हालांकि मैं उस प्रयास की सराहना करता हूं जिसमें उत्तरदाता यह बताने के लिए गए हैं कि कुछ कार्यान्वयन ARP कैश ओवरफ़्लो के अधीन क्यों नहीं हैं, मुझे लगता है कि इस प्रश्न के लिए यह महत्वपूर्ण है कि जो हैं। सवाल "क्या होता है जब", नहीं "विक्रेता एक्स अतिसंवेदनशील है"। मैंने एक ठोस उदाहरण का वर्णन करके अपना भाग अब कर लिया है।

EDIT 3 एक और सवाल यह नहीं है कि "मैं ARP कैश को ओवरफ्लो होने से कैसे रोकूं?"


क्या आप मैक-एड्रेस टेबल या एआरपी टेबल के अतिप्रवाह के बारे में जानकारी की तलाश कर रहे हैं?
माइक पेनिंगटन

क्या आप इस बारे में विस्तार से बता सकते हैं कि आपको कैसे लगता है कि आर्क टेबल ओवरफ्लो होगी? क्या यह वास्तविक समस्या से संबंधित है, या विशुद्ध रूप से काल्पनिक है? किसी भी तरह से, हमें इस बात का विवरण चाहिए कि हम किस सटीक परिदृश्य पर प्रतिक्रिया दे रहे हैं
माइक पेनिंगटन

@MikePennington यह एक वास्तविक समस्या है। उदाहरण के लिए, ARP कैश ओवरफ्लो कर सकता है, यदि बड़ी संख्या में IP हैं, या कार्य करते हैं जैसे कि वे एक ही लिंक पर मौजूद हैं।
नीरभोज

सिस्को IOS एक राउटर पर ARP को कैश नहीं करता है जब तक कि राउटर पर कॉन्फ़िगर किए गए सबनेट से ARP को सॉर्ट नहीं किया जाता है। जब मैं एक "वास्तविक समस्या" कहता हूं, तो मेरा मतलब है कि एक समस्या जो आपको हो रही है ... समस्या यह नहीं है कि आप इमेजिंग कर सकते हैं
माइक पेनिंगटन

प्रश्न को फिर से लिखने के लिए धन्यवाद क्योंकि जब मैं स्विच (परत 2) के बारे में सोचता हूं तो आपके पास कोई एआरपी तालिका नहीं है। ARP को TCP / IP के साथ करना होता है और एक लेयर 2 स्विच ऐसा कोई विचार नहीं करता है, लेकिन जब आप लेयर थ्री स्विचिंग में आते हैं तो आपके पास ARP टेबल हो सकती है। हालाँकि, अगर मुझे सही ढंग से याद है कि लेयर 3 स्विच के इंटरफ़ेस में ARP टेबल में दिखाने के लिए IP एड्रेस होना चाहिए। वास्तव में समझ में नहीं आया कि आप पहली बार में क्या कह रहे थे, अतिथि सुबह जल्दी ही मुझसे रूबरू हो रहे हैं। मुझ में प्रोग्रामर सोचता है कि एक बार एआरपी तालिका भरी हुई है या तो यह दुर्घटनाग्रस्त हो जाएगी, ओवरराइट कर देगा, या किसी भी नए एआरपी प्रविष्टियों को छोड़ देगा समर्थक
SysEngT

जवाबों:


4

2 संपादित करें :

जैसा आपने उल्लेख किया था...

ip route 10.1.0.0 255.255.0.0 iface0

ब्रोकेड को 10.1.0.0/16 में हर गंतव्य के लिए प्रॉक्सी-एआरपी के लिए मजबूर करता है जैसे कि वह सीधे जुड़ा हुआ था iface0

मैं ब्रोकेड के एआरपी कैश कार्यान्वयन के बारे में प्रतिक्रिया नहीं दे सकता, लेकिन मैं आपकी समस्या का आसान समाधान बताता हूं ... अपने मार्ग को अलग तरीके से कॉन्फ़िगर करें:

ip route 10.1.0.0 255.255.0.0 CiscoNextHopIP

ऐसा करने से, आप ब्रोकेड को एआरआर-आईएनजी से 10.1.0.0/16 के लिए रोकते हैं (नोट करें, आपको ब्रोकेड की चीजों के कार्यान्वयन के आधार पर आर 1 और आर 2 के बीच लिंक को 10.1.0.0/16 से बाहर करने की आवश्यकता हो सकती है। ।


मूल उत्तर :

मुझे उम्मीद है कि अधिकांश, या सभी में, कार्यान्वयन, एआरपी तालिका की क्षमता पर एक कठिन सीमा है।

सिस्को IOS CPU राउटर केवल राउटर में DRAM की मात्रा द्वारा सीमित हैं, लेकिन यह आमतौर पर एक सीमित कारक नहीं है। कुछ स्विच (जैसे कैटलिस्ट 6500) की बगल की मेज पर एक कठिन सीमा है (जो एआरपी तालिका से संबंधित है); Sup2T में 1 मिलियन आसन्नताएँ हैं

तो, क्या होता है जब एआरपी कैश भरा होता है और एक गंतव्य (या अगले-हॉप) के साथ एक पैकेट पेश किया जाता है जो कैश नहीं होता है?

सिस्को IOS CPU रूटर्स ARP तालिका में स्थान से बाहर नहीं चलते हैं, क्योंकि उन ARPs को DRAM में संग्रहीत किया जाता है। मान लेते हैं कि आप Sup2T के बारे में बात कर रहे हैं। इसे इस तरह से समझें, मान लें कि आपके पास Cat6500 + Sup2T था और आपने सभी Vlans संभव को तकनीकी रूप से कॉन्फ़िगर किया है, जो है

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

मान लें कि आप प्रत्येक Vlan को 24 / बनाते हैं (ताकि 252 ARP संभव हो), और आप प्रत्येक Vlan को पूर्ण रूप से पैक करें ... यह 1 मिलियन ARP प्रविष्टियाँ है।

4094 * 252 = 1,030,680 ARP Entries

उन ARPs में से हर एक ARP तालिका में ही, साथ ही IOS आसन्न तालिका में एक निश्चित मात्रा में मेमोरी का उपभोग करेगा। मुझे नहीं पता कि यह क्या है, लेकिन मान लीजिए कि कुल ARP ओवरहेड 10 बाइट्स हैं ...

इसका मतलब है कि आपने अब ARP ओवरहेड के लिए 10MB खा लिया है; यह अभी भी बहुत अधिक स्थान नहीं है ... यदि आप स्मृति में कम थे, तो आपको कुछ ऐसा दिखाई देगा %SYS-2-MALLOCFAIL

कई एआरपी और चार घंटे के एआरपी टाइमआउट के साथ, आपको औसतन लगभग 70 एआरपी प्रति सेकंड सेवा करनी होगी; यह अधिक संभावना है कि 1 मिलियन एआरपी प्रविष्टियों पर रखरखाव राउटर के सीपीयू (संभावित सीपीयूएचओजी संदेशों) को सूखा देगा।

इस बिंदु पर, आप रूटिंग प्रोटोकॉल आसन्नताओं को उछालना शुरू कर सकते हैं और ऐसे आईपी हैं जो केवल पहुंच से बाहर हैं क्योंकि राउटर सीपीयू आईपी के लिए एआरपी में बहुत व्यस्त था।


2

केवल वास्तविक अनुभव जो मुझे हो रहा था, वह C3550 स्विच (2-8k MAC सीमा, sdm टेम्पलेट पर निर्भर करता है) पर था और वहां उसने टेबल से सबसे पुरानी प्रविष्टि को गिरा दिया।


1
ऐसा लगता है कि आप मैक फ़ॉरवर्डिंग टेबल की बात कर रहे हैं, एआरपी कैश की नहीं। कृपया मेरा संपादन देखें।
नीरभोज

1
में तुम्हारी बात समझ रहा हूँ। हालांकि, इस विशेष मामले में, प्रभाव समान था क्योंकि ये स्विच बहुत बड़े आईपी सबनेट की संख्या के लिए एल 3 समाप्ति भी थे। आखिरकार स्विच को बदलकर हल किया गया। L2 पर स्विच फ्लड फ़्रेम्स के लिए यह मैक को कैश नहीं कर सकता है, लेकिन L3 पर इसे हर पैकेट के लिए पुराने ARP प्रविष्टियों और / या ARP को छोड़ना होगा जो उन पर CPU को जल्दी से समाप्त कर देगा।

2

IOS और JunOS और अन्य वाणिज्यिक स्टैक्स के लिए आपको बस परीक्षण करना है, यह बहुत कठिन नहीं है।

लेकिन linux , freebsd, netbsd, openbsd, uIP, lwIP और शायद कई अन्य कार्यान्वयन के लिए, आप व्यवहार के लिए उनके स्रोत कोड की जांच कर सकते हैं।

लिनक्स में आपको 'नेट / कोर / नेबरहॉस' (लाइन के साथ शुरू) (अगर प्रविष्टियाँ = = tbl-> gc_thresh3 '||') और 'नेट / आईपीवी 4 / arp.c' की जाँच करनी होगी।
लिनक्स में आप प्रतीत होते हैं। तीन पूर्ण स्तर हैं

  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 Inputप्रक्रिया को शामिल किया जाता है। यदि ARP अनुरोध समान IP के लिए हैं, ARP तालिका के अक्सर बहने के कारण, स्विच को ARP को हर दो सेकंड में एक बार सीमित करना चाहिए। यदि अनुरोध अक्सर यादृच्छिक आईपी के लिए पर्याप्त हैं, तो सीपीयू स्पाइक कर सकता है क्योंकि सीपीयू एआरपी अनुरोधों और प्रतिक्रियाओं दोनों में शामिल है।


आपको "हर दो सेकंड में एक बार" सीमा कहां मिली?
मार्को मार्जेटी

"समान IP पते के लिए ARP अनुरोध हर दो सेकंड में एक अनुरोध तक सीमित होते हैं" - cisco.com/en/US/products/hw/routers/ps359/…
generalnetworkerror

क्या यह C7500 का विशिष्ट मूल्य नहीं है? उदाहरण के लिए C6500 "mls qos प्रोटोकॉल arp पुलिस <bps>" कमांड या CoPP का उपयोग कर सकता है।
मार्को मार्जेटी

1

सिस्को 3550, 3560 इत्यादि पर मैंने जो हमले सीखे, उनमें से आप मैक एड्रेस लिमिट को ओवरलोड करने के बाद स्विच कर सकते हैं। स्विच में मैक पते (लगभग 6000) की एक निर्धारित सीमा होती है जिसे संग्रहीत किया जा सकता है, और एक बार यह सीमा पूरी हो जाने के बाद यह आपके इंटरफेस को पूरा डेटा बाढ़ जाएगा। याद नहीं कर सकते कि क्या यह 802.1q पैकेट के लिए जाता है क्योंकि मुझे लंबे समय में ऐसा नहीं करना पड़ा है। यह पता लगाने के लिए मुझे घर पर अपने नेटवर्क लैब को आग लगाना चाहिए।


ऐसा लगता है कि आप भी मैक फ़ॉरवर्डिंग टेबल के बारे में बात कर रहे हैं, एआरपी कैश नहीं। कृपया मेरा संपादन देखें।
नीरभोज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.