2013-03-15 12 views
5

Ten od wielu lat mnie dręczy.Limity czasu ARP. Dlaczego naprawiono okresowy?

Podstawowe pytanie: Czy jest jakiś powód, dla którego ARP ma być z ustalonymi limitami czasu na wpisy pamięci podręcznej ARP?

Wykonuję dużo pracy w czasie rzeczywistym. Obecnie wykonujemy większość naszych komunikatów między systemami na dedykowanych łączach UDP/IP. To w przeważającej mierze działa niezawodnie w czasie rzeczywistym, ale na jeden punkt: limity czasu wejścia ARP.

Sposób typowe implementacje zrobić ARP jest następujący:

  • Gdy klient prosi, aby wysłać pakiet IP do adresu IP z nieznanego adresu MAC, zamiast wysyłać że pakiet IP, stos wysyła Żądanie ARP. Jeśli górna warstwa (TCP) ponownie wysyła, nie ma problemu. Ale ponieważ używamy UDP, oryginalna wiadomość jest tracona. W momencie uruchomienia jest to OK, ale w środku działania jest to Zła rzecz ™.
  • (Dynamiczny) Pozycje tablicy ARP są okresowo usuwane z tabeli ARP, nawet jeśli właśnie otrzymaliśmy pakiet z tego systemu milisekundę temu. Oznacza to, że model Bad Thing ™ dzieje się regularnie w naszym systemie.

Oczywistym rozwiązaniem (którego używamy religijnie) jest sprawienie, by wszystkie wpisy ARP były statyczne. Jest to jednak królewska PITA (szczególnie w systemach RTOS, gdzie znalezienie adresu MAC interfejsu nie zawsze jest kwestią kilku prostych kliknięć GUI).

Kiedy napisaliśmy własny stos IP, rozwiązałem ten problem, nigdy (nigdy) nie przerywając wpisów w tablicy ARP. Ma to oczywiste wady. Bardziej niezawodnym i całkowicie rozsądnym rozwiązaniem może być odświeżenie limitu czasu wejścia, gdy tylko pojawi się pakiet z tego samego zestawu MAC/IP. W ten sposób wejście uzyskałoby tylko limit czasu, gdyby nie komunikowało się ze stackiem w tym czasie.

Ale teraz używamy stosu IP naszego dostawcy i wracamy do głupich limitów czasu ARP. Mamy wystarczająco dużo dźwigni w stosunku do tego dostawcy, że mógłbym skłonić ich do zastosowania mniej uciążliwego schematu. Jednak uniwersalność tego algorytmu limitu czasu martwego w mózgu prowadzi mnie do przekonania, że ​​może to być wymagana część implementacji.

To jest pytanie. Czy to zachowanie jest jakoś wymagane?

+1

Powiedziałbym, że zachowanie upuszczenia pakietu i wykonanie procedury ARP jest dość złe. na przykład Windows buforuje tylko 1 pakiet podczas arp, podczas gdy wiele innych OS robi bardziej rozsądną rzecz i buforuje pakiety w normalnym buforze gniazd podczas arp. – nos

+0

@nos - Wychodzące lub przychodzące? Z tego co wiem, wychodzące pakiety * TCP * są buforowane (ponieważ tak działa TCP, aby zapewnić niezawodność). Wychodzące pakiety UDP są po prostu odrzucane. –

+0

Dowolny wychodzący pakiet IP (dla miejsca docelowego), czy to TCP czy UDP. Oczywiście, protokół TCP wykryje i ponownie przetransmituje upuszczone pakiety. – nos

Odpowiedz

3

RFC1122 Requirements for Internet Hosts omawia to.

 2.3.2.1 ARP Cache Validation 

     An implementation of the Address Resolution Protocol (ARP) 
     [LINK:2] MUST provide a mechanism to flush out-of-date cache 
     entries. If this mechanism involves a timeout, it SHOULD be 
     possible to configure the timeout value. 

     ... 

     DISCUSSION: 
      The ARP specification [LINK:2] suggests but does not 
      require a timeout mechanism to invalidate cache entries 
      when hosts change their Ethernet addresses. The 
      prevalence of proxy ARP (see Section 2.4 of [INTRO:2]) 
      has significantly increased the likelihood that cache 
      entries in hosts will become invalid, and therefore 
      some ARP-cache invalidation mechanism is now required 
      for hosts. Even in the absence of proxy ARP, a long- 
      period cache timeout is useful in order to 
      automatically correct any bad ARP data that might have 
      been cached. 

Sieci mogą być bardzo dynamiczne; Serwery DHCP mogą przypisać ten sam adres IP do różnych komputerów, gdy wygasną stare czasy dzierżawy (unieważniając bieżące dane ARP), mogą wystąpić konflikty IP, które nie zostaną zauważone, dopóki nie zostaną okresowo wysłane żądania ARP itp.

Udostępnia także mechanizm sprawdzania, czy host nadal znajduje się w sieci. Wyobraź sobie, że przesyłasz wideo przez UDP do pewnego adresu IP 192.168.0.5. Jeśli na zawsze buforujesz adres MAC tego komputera, będziesz nadal spamował pakiety UDP, nawet jeśli host przestanie działać. Wykonywanie żądania ARP co jakiś czas spowoduje zatrzymanie strumienia z powodu nieosiągalnego błędu miejsca docelowego, ponieważ nikt nie odpowiedział adresem MAC dla tego adresu IP.

+0

Po wykonaniu [LINK: 2] (http://tools.ietf.org/html/rfc826.html) z twojej odpowiedzi, znalazłem sugestię dotyczącą dokładnego algorytmu, o którym mówię (co do Wiem, nie ma implementacji stosu). Tak myślę, że to jest moja odpowiedź. –

+0

Z [RFC 826] (http://tools.ietf.org/html/rfc826.html) "A może odbiór pakietu od hosta powinien zresetować limit czasu w pozycji adresu adresu URL używany do przesyłania pakietów do tego host, jeśli żaden pakiet nie jest odbierany z hosta przez odpowiedni czas, wpis o adresie jest zapomniany. " –

+1

@ T.E.D. Tak, możesz to zrobić. Wiele systemów operacyjnych to robi i ma pozytywny feedback od przychodzących pakietów do pamięci podręcznej ARP. – nos

2

Powstał z braku zaufania do protokołów routingu, szczególnie w świecie innym niż Ethernet (w szczególności sieci CHAOS MIT). Chris Moon, jeden z wczesnych "ARPAnautów", był o tym konkretnie cytowany w oryginalnym ARP RFC.

Możesz, oczywiście, utrzymywać pamięć podręczną ARP innych użytkowników z wyprzedzeniem, aktywnie wysyłając własne ogłoszenia ARP. Większość warstw Ethernetu akceptuje nieodpłatne odpowiedzi ARP w swoich pamięciach podręcznych bez prób korelowania ich z wcześniej wysłanymi żądaniami ARP.

+0

Ciekawe, nie myślałem o tym rozwiązaniu, oczywiście niektóre systemy operacyjne mają irytującą tendencję do programowania programistycznie adresów MAC, więc muszę sprawdzić, jak radzą sobie z nimi adresy MAC –

+0

OOC, can Zwykle robisz to dla ** siebie **? Rozumiem przez to rozgłaszanie odpowiedzi ARP (być może na sprzężenie zwrotne) z komendą innego użytkownika MAC/IP w celu zachowania tego wpisu z powodu przekroczenia limitu czasu z twojego własnego stołu. Deterministyczny link UDP opiera się na jednej maszynie, która jest uznawanym wzorcem na łączu, druga maszyna nie może mówić, chyba że master zażąda, więc inny system nie może tak naprawdę wysyłać własnych ARP według własnego harmonogramu. –

+1

Jeśli twój system operacyjny i sterowniki sieciowe nie przeszkadzają ci, tak, możesz: [Wikipedia: ogłoszenia ARP] (http://en.wikipedia.org/wiki/Address_Resolution_Protocol#ARP_announcements) –