커널 공간에서 캡처된 패킷의 버퍼 크기는 무엇입니까?

커널 공간에서 캡처된 패킷의 버퍼 크기는 무엇입니까?

매뉴얼 페이지를 찾아보면 tcpdump버퍼가 가득 차면 커널이 패킷을 삭제할 수 있는 것 같습니다. 다음 사항을 알고 싶습니다.

  1. 크기는 구성 가능하며/또는
  2. 배포 규모는 어디서 확인할 수 있나요?

매뉴얼 페이지에서 (참조하기 쉽도록):

"커널에 의해 삭제된" 패킷(운영 체제가 이 정보를 애플리케이션에 보고하는 경우 버퍼 공간 부족으로 인해 tcpdump를 실행하는 운영 체제에서 패킷 캡처 메커니즘에 의해 삭제된 패킷 수입니다. 그렇지 않은 경우 보고됩니다. 0).

답변1

Tcpdump는 선택적으로 -B캡처 버퍼 크기를 설정할 수 있습니다. 그런 다음 이 값은 이 함수를 통해 libpcap(실제 패킷 캡처를 수행하기 위해 tcpdump에서 사용하는 라이브러리)에 전달됩니다  pcap_set_buffer_size()tcpdump(1)(tcpdump의 매뉴얼 페이지)에는 캡처 버퍼 크기가 KiB(1024바이트)로 지정되어 있다고 나와 있습니다. 원천이것을 확인하는 것 같습니다.

pcap_set_buffer_size(3pcap)(pcap_set_buffer_size에 대한 매뉴얼 페이지)는 기본 버퍼 크기(이 함수가 호출되지 않는 경우 사용됨)를 지정하지 않지만 다시libpcap 소스 코드, 적어도 Linux에서는 2MiB인 것으로 보입니다(그러나 시스템에 따라 다를 가능성이 높음).

-s패킷 버퍼링 및 폐기와 관련하여 snaplen() 매개변수를 적절하게 설정하도록 주의해야 합니다 . ~에서tcpdump(1):

-s snaplen
--snapshot-length=snaplen

    스나프스냅플렌기본값인 65535 1 바이트 대신 패킷당 데이터 바이트 수입니다. 제한된 스냅샷으로 인해 잘린 패킷은 출력에 "[ ]"로 표시됩니다.|protoproto잘림이 발생하는 프로토콜 수준의 이름입니다.

     

    더 큰 스냅샷을 찍으면 패킷을 처리하는 데 필요한 시간이 늘어날 뿐만 아니라 패킷 버퍼링 양도 효과적으로 줄어듭니다. 이로 인해 패킷 손실이 발생할 수 있습니다.
               ︙
            ...제한해야 합니다스냅플렌관심 있는 프로토콜 정보를 캡처할 수 있는 가장 작은 숫자로 표시됩니다. 설정스냅플렌0으로 설정하면 최신 이전 버전과의 호환성을 위해 기본값인 65535 1tcpdump 로 설정됩니다 .

    ________________
    1  최신 버전의 매뉴얼 페이지에는 65535 대신 262144가 나와 있습니다(두 곳).

즉, 고정된 버퍼 크기를 사용하면 버퍼 크기를 줄여 버퍼에 맞는(따라서 삭제되지 않는) 패킷 수를 늘릴 수 있습니다. snaplen크기.

관련 정보