
262144
tcpdump에 기본 스냅샷 길이로 매직 넘버가 있는 이유가 궁금합니다 .
--snapshot-length=snaplen Snarf snaplen은 기본값인 262144바이트가 아닌 각 패킷의 데이터 바이트입니다. 제한된 스냅샷으로 인해 잘린 패킷은 ``[|proto]''로 출력에 표시됩니다. 여기서 proto는 잘림이 발생한 프로토콜 수준의 이름입니다. 더 큰 스냅샷을 찍으면 패킷을 처리하는 데 걸리는 시간이 늘어나고, 사실상 패킷 버퍼링 양이 줄어듭니다. 이로 인해 패킷이 손실될 수 있습니다. 또한 더 작은 스냅샷을 찍으면 전송 계층 위의 프로토콜에서 데이터가 삭제되어 중요한 정보가 손실될 수 있습니다. 예를 들어, NFS 및 AFS 요청 및 응답은 매우 크므로 너무 짧은 스냅샷 길이를 선택하면 세부 정보의 대부분을 사용할 수 없습니다. 스냅샷 크기를 기본값 이하로 줄여야 하는 경우, 관심 있는 프로토콜 정보를 캡처할 수 있는 가장 작은 숫자로 snaplen을 제한해야 합니다. snaplen을 0으로 설정하면 최근 이전 버전과의 하위 호환성을 위해 기본값인 262144로 설정됩니다. tcpdump 버전.
참조:매뉴얼 페이지
답변1
https://github.com/the-tcpdump-group/tcpdump/blob/tcpdump-4.9/netdissect.h
/*
* Maximum snapshot length. This should be enough to capture the full
* packet on most network interfaces.
*
*
* Somewhat arbitrary, but chosen to be:
*
* 1) big enough for maximum-size Linux loopback packets (65549)
* and some USB packets captured with USBPcap:
*
* http://desowin.org/usbpcap/
*
* (> 131072, < 262144)
*
* and
*
* 2) small enough not to cause attempts to allocate huge amounts of
* memory; some applications might use the snapshot length in a
* savefile header to control the size of the buffer they allocate,
* so a size of, say, 2^31-1 might not work well.
*
* XXX - does it need to be bigger still?
*/
#define MAXIMUM_SNAPLEN 262144
별로 많지 않습니다. Linux 루프백은 하드웨어 프레임에 의해 제한되지 않으므로 최대 크기가 64k로 상당히 큽니다. 다른 패킷은 훨씬 더 클 수 있으므로 2에서 256k까지 몇 제곱이 됩니다.