インターフェイスでtcpdumpパケットがドロップされるのはなぜですか?

インターフェイスでtcpdumpパケットがドロップされるのはなぜですか?

Windows 7ホストでVirtual Boxを介してUbuntu 14.04を使用しています。 NICはUSB-Ethernetアダプタです。

これ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

通常、これはコンピュータが忙しくて着信パケットを処理できず、インターフェイスにパケットを入れるスペースがないためです。ドライバがインターフェイスにバッファを提供していない可能性があり、割り込みが長時間ブロックされている可能性があり、重大なリソース不足などが発生する可能性があります。

オペレーティングシステムの実装とハードウェアのパフォーマンスが向上したため、これは発生しなくなりましたが、最初はディスクドライブがメモリバスを束ねたり、オペレーティングシステムがインターフェイスバッファを提供する必要があるなどの実際の問題でした。サービスの受信割り込み部分(誤って設計されたハードウェア)。

関連情報