20

Going through the man page of tcpdump, it seems kernel can drop the packets if the buffer is full. I was wondering if:

  1. that size is configurable and/or
  2. where can I see the size for my distro?

From the man page (for easy reference):

packets ``dropped by kernel'' (this is the number of packets that were dropped, due to a lack of buffer space, by the packet capture mechanism in the OS on which tcpdump is running, if the OS reports that information to applications; if not, it will be reported as 0).

1 Answer 1

30

Tcpdump has the option -B to set the capture buffer size.  The value is then passed to libpcap (library used by tcpdump to do the actual packet capturing) via the pcap_set_buffer_size() function.  tcpdump(1) (tcpdump's man page) says that the capture buffer size is specified in units of KiB (1024 bytes); the source seems to confirm this.

pcap_set_buffer_size(3pcap) (pcap_set_buffer_size's man page) does not specify the default buffer size (which is used if this function is not called), but again, from the libpcap source, this seems to be 2 MiB,  at least on Linux (but is most likely system dependent).

With regard to packet buffering and dropping, you should also pay attention to setting the snaplen (-s) parameter appropriately.  From tcpdump(1):

-s snaplen
--snapshot-length=snaplen

    Snarf snaplen bytes of data from each packet rather than the default of 655351 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 655351, for backwards compatibility with recent older versions of tcpdump.

    ________________
    1 Recent versions of the man page say 262144 rather than 65535 (both places).

This means that with a fixed buffer size, you can increase the number of packets that fit into the buffer (and thus not being dropped) by decreasing the snaplen size.

3
  • 3
    I know this is an old thread (and I like this answer), but when you cite sources on GitHub, please point to the current commit (as the master branch can change), e.g.: github.com/mcr/tcpdump/blob/….
    – bruno nery
    Jul 30, 2012 at 20:25
  • @brunonery That is not a problem with Stack Exchange sites, where we actually encourage users to improve answers, even if the post itself is quite old. (Unlike forums where it is frowned upon.)
    – Léo Lam
    Apr 3, 2015 at 20:24
  • 1
    fixed the outdated links
    – Eli Heady
    Jan 11, 2016 at 17:42

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .