Kích thước bộ đệm để chụp các gói trong không gian kernel?


16

Đi qua trang man của tcpdump, có vẻ như kernel có thể bỏ các gói nếu bộ đệm đầy. Tôi đã tự hỏi nếu:

  1. kích thước đó là cấu hình và / hoặc
  2. Tôi có thể thấy kích thước cho bản phân phối của mình ở đâu?

Từ trang man (để tham khảo dễ dàng):

các gói `` bị bỏ bởi kernel '' (đây là số lượng gói bị bỏ, do thiếu không gian bộ đệm, bởi cơ chế bắt gói trong HĐH mà tcpdump đang chạy, nếu HĐH báo cáo thông tin đó cho các ứng dụng; nếu không, nó sẽ được báo cáo là 0).

Câu trả lời:


27

Tcpdump có tùy chọn -Bđể đặt kích thước bộ đệm chụp. Giá trị này sau đó được chuyển đến libpcap (thư viện được sử dụng bởi tcpdump để thực hiện việc bắt gói thực tế) thông qua pcap_set_buffer_size()chức năng. Trang chủ Tcpdump không chỉ định đơn vị kích thước bộ đệm được chỉ định bằng -B, nhưng từ nguồn có vẻ như đó là KiB.

trang thủ công pcap_set_buffer_size()không chỉ định kích thước bộ đệm mặc định (được sử dụng nếu chức năng này không được gọi), nhưng một lần nữa, từ nguồn libpcap , đây dường như là 2 MiB, ít nhất là trên linux (nhưng rất có thể phụ thuộc vào hệ thống).

Liên quan đến việc đệm và thả gói, bạn cũng nên chú ý cài đặt -stham số snaplen ( ) cho phù hợp. 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.

Điều này có nghĩa là với kích thước bộ đệm cố định, bạn có thể tăng số lượng gói phù hợp với bộ đệm (và do đó không bị loại bỏ) bằng cách giảm kích thước snaplen.


2
Tôi biết đây là một chủ đề cũ (và tôi thích câu trả lời này), nhưng khi bạn trích dẫn nguồn trên GitHub, vui lòng chỉ đến cam kết hiện tại (vì nhánh chính có thể thay đổi), ví dụ: github.com/mcr/tcpdump/blob/ Sầu .
bruno nery

@brunonery Đó không phải là vấn đề với các trang web Stack Exchange, nơi chúng tôi thực sự khuyến khích người dùng cải thiện câu trả lời, ngay cả khi bản thân bài đăng đã khá cũ. (Không giống như các diễn đàn nơi nó được tán thành.)
Léo Lam

đã sửa các liên kết lỗi thời
Eli Heady
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.