Rozmiar bufora do przechwytywania pakietów w przestrzeni jądra?

16

Przechodząc przez stronę podręcznika tcpdump, wydaje się, że jądro może upuścić pakiety, jeśli bufor jest pełny. Zastanawiałem się czy:

  1. ten rozmiar jest konfigurowalny i / lub
  2. gdzie mogę zobaczyć rozmiar mojej dystrybucji?

Ze strony podręcznika (dla łatwego odniesienia):

pakiety `` upuszczane przez jądro '' (jest to liczba pakietów, które zostały upuszczone z powodu braku miejsca w buforze przez mechanizm przechwytywania pakietów w systemie operacyjnym, na którym działa tcpdump, jeśli system operacyjny zgłasza te informacje aplikacjom; jeśli nie, zostanie zgłoszony jako 0).

Zaraz
źródło

Odpowiedzi:

27

Tcpdump ma opcję -Bustawienia rozmiaru bufora przechwytywania. Wartość jest następnie przekazywana do libpcap (biblioteka używana przez tcpdump do faktycznego przechwytywania pakietów) poprzezpcap_set_buffer_size() funkcji. Strona podręcznika Tcpdump nie określa, w których jednostkach rozmiar bufora jest określony przez -B, ale ze źródła wydaje się, że jest to KiB.

strona podręcznika użytkownika pcap_set_buffer_size() nie określa domyślnego rozmiaru bufora (który jest używany, jeśli ta funkcja nie jest wywoływana), ale ponownie, ze źródła libpcap , wydaje się, że jest to 2 MiB, przynajmniej na Linuksie (ale najprawdopodobniej zależy od systemu).

Jeśli chodzi o buforowanie i upuszczanie pakietów, należy również zwrócić uwagę na odpowiednie ustawienie -sparametru snaplen ( ).man tcpdump:

-s     Snarf  snaplen bytes of data from each packet rather than the
default of 65535 bytes.  Packets truncated because of a limited snapshot
are indicated in the output with ``[|proto]'', where proto is the name of
the protocol level at which the truncation has occurred. Note that  taking
larger  snapshots both increases the amount of time it  takes  to
process packets and, effectively, decreases the amount of packet buffering.
This may cause packets to be lost. You should limit snaplen to the
smallest number that will capture the protocol information you're
interested in. Setting snaplen to 0 sets it to the default of 65535, for
back-wards compatibility with recent older versions of tcpdump.

Oznacza to, że przy ustalonym rozmiarze bufora można zwiększyć liczbę pakietów, które pasują do bufora (a tym samym nie są upuszczane), zmniejszając rozmiar migawki.

Petr Uzel
źródło
2
Wiem, że to stary wątek (i podoba mi się ta odpowiedź), ale kiedy cytujesz źródła w GitHub, wskaż bieżące zatwierdzenie (ponieważ gałąź master może się zmienić), np .: github.com/mcr/tcpdump/blob/ ... .
bruno nery
@brunonery Nie stanowi to problemu w witrynach Stack Exchange, w których zachęcamy użytkowników do poprawiania odpowiedzi, nawet jeśli sam post jest dość stary. (W przeciwieństwie do forów, na których spotyka się to z niechęcią.)
Léo Lam
naprawiono nieaktualne linki
Eli Heady