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?
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
@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. –
Dowolny wychodzący pakiet IP (dla miejsca docelowego), czy to TCP czy UDP. Oczywiście, protokół TCP wykryje i ponownie przetransmituje upuszczone pakiety. – nos