인터페이스에서 tcpdump 패킷이 삭제되는 이유는 무엇입니까?

인터페이스에서 tcpdump 패킷이 삭제되는 이유는 무엇입니까?

Windows 7 호스트에서 Virtual Box를 통해 Ubuntu 14.04를 사용하고 있습니다. NIC는 USB-이더넷 어댑터입니다.

이것mantcpdump의 경우"커널 패킷 삭제"의 원인은 설명하지만 "인터페이스 패킷 삭제"의 원인은 설명하지 않습니다.

인터페이스가 패킷을 삭제하는 이유를 설명할 수 있는 사람이 있습니까? 아니면 패킷 손실의 원인을 어떻게 알 수 있나요?

답변1

지적했듯이 "인터페이스에 의해 삭제된 패킷" 카운터에 대한 문서에는 아무것도 없습니다. 따라서 소스 코드 파기가 필요합니다.

~에서tcpdump의 소스 코드, 인터페이스 드롭 카운터는 다음에서 추출됩니다 stats.ps_ifdrop.

if (stats.ps_ifdrop != 0) {
    if (!verbose)
        fputs(", ", stderr);
    else
        putc('\n', stderr);
    (void)fprintf(stderr, "%u packet%s dropped by interface\n",
        stats.ps_ifdrop, PLURAL_SUFFIX(stats.ps_ifdrop));

~에서인간 pcap_stats:

ps_ifdrop
    number of packets dropped by the network interface or its driver.

그리고로부터libpcap 소스 코드:

 *  "ps_ifdrop" is supported. It will return the number
 *  of drops the interface reports in /proc/net/dev,
 *  if that is available.

그래서tcpdump "인터페이스 삭제 패킷" 카운터는 캡처 /proc/net/dev중에 삭제된 것으로 기록된 패킷 에 해당합니다.tcpdump.

필드 의미 /proc/dev/net설명여기

하락을 더 잘 이해하기 위해 먼저 다음 통계를 살펴보았습니다.

  • ethtool -S <interface>
  • grep '' /sys/class/net/<interface>/statistics/*

답변2

일반적으로 이는 컴퓨터가 너무 바빠서 들어오는 패킷을 처리할 수 없고 인터페이스에 패킷을 넣을 공간이 없기 때문입니다. 드라이버가 인터페이스에 대한 버퍼를 제공하지 않을 수 있고, 인터럽트가 너무 오랫동안 차단될 수 있으며, 심각한 리소스 부족 등이 발생할 수 있습니다.

운영 체제 구현 및 하드웨어 성능이 향상되면서 이런 일이 더 이상 발생하지 않지만 초기에는 디스크 드라이브가 메모리 버스를 묶을 수 있거나 운영 체제가 인터페이스 버퍼를 제공해야 하는 등의 실제 문제였습니다. 서비스의 수신 인터럽트 부분(잘못 설계된 하드웨어)입니다.

관련 정보