/proc/net/dev中各个字段的含义是什么?

32

/proc/net/dev文件在Linux中的形式如下:

[me@host ~]$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

字段droperrs是什么意思?

errs数据包中,有一些数据包也算在drop数据包中吗?

为什么一个数据包会被认为是errs,是因为它遭受了校验和错误吗?

为什么会丢弃一个数据包?是因为系统缓冲区不足还是因为NIC上出现了突发流量?

这两个字段是否考虑了那些被定向到另一个主机的数据包(例如当NIC处于混杂模式时)?


这些数字会在某个时刻重置吗?这些数字是终身数字吗? - humble_wolf
4个回答

23
你可以查看源代码库中的net/core/dev.c文件来了解它的含义:
seq_printf(seq, "%6s:%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu "
       "%8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
       dev->name,
       stats->rx_bytes,
       stats->rx_packets,
       stats->rx_errors,
       stats->rx_dropped + stats->rx_missed_errors,
       stats->rx_fifo_errors,
       stats->rx_length_errors + stats->rx_over_errors +
        stats->rx_crc_errors + stats->rx_frame_errors,
       stats->rx_compressed,
       stats->multicast,
       stats->tx_bytes,
       stats->tx_packets,
       stats->tx_errors,
       stats->tx_dropped,
       stats->tx_fifo_errors,
       stats->collisions,
       stats->tx_carrier_errors + stats->tx_aborted_errors +
        stats->tx_window_errors + stats->tx_heartbeat_errors,
       stats->tx_compressed);

所以:

  • 接收错误指任何类型的无效数据包,例如无效长度或无效校验和
  • 发送错误包括:
    • 载波错误
    • 中止错误
    • 窗口错误
    • 心跳错误
      (不管它们意味着什么)

是的,我认为“丢弃”意味着设备因缓冲区空间不足而丢弃了一个数据包。


你认为接收丢包和发送丢包有什么区别? - Anand Singh Kunwar
1
我猜每个都有一个缓冲区,当缓冲区满时就会丢弃数据包。接收丢失是指当系统或应用程序处理传入数据包的速度太慢时(例如系统过载或应用程序处理数据包的速度比到达速度慢),会发生这种情况。发送丢失是指网络卡或网络处理输出数据包的速度太慢。 - Mikel
是的,我猜想也是类似的情况。你知道有什么来源可以确定这一点吗? - Anand Singh Kunwar
这些数字会在某个时刻重置吗?这些数字是终身数字吗? - humble_wolf
在最近的内核中,这个文件位于 net/core/net-procfs.c https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/net/core/net-procfs.c - Paul Tobias

15
根据 http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html ,每个列的含义如下:

bytes:接口传输或接收的所有数据字节数。

packets:接口传输或接收的数据包总数。

errs:设备驱动程序检测到的传输或接收错误总数。

drop:设备驱动程序丢弃的数据包总数。

fifo:FIFO 缓冲区错误数量。

frame:数据帧错误数量。

colls:接口检测到的冲突次数。

compressed:设备驱动程序传输或接收的压缩数据包数量。(在 2.2.15 内核中似乎未使用。)

carrier:设备驱动程序检测到的载波丢失数量。

multicast:设备驱动程序传输或接收的多播帧数量。


1
链接现在指向O'Reiley网站。这个替代品可以是这个 - Veverke

0

由于近六个月没有人回答,我觉得可以自由地推测:

我认为errsdrops不重叠。我还认为errs是校验和其他坏数据在接收到的数据包中(即不足以构成整个数据包)。此外,我相信drops只适用于发送的数据包 - 系统怎么会知道其他地方丢失了数据包呢?


1
你说得对,它们似乎没有重叠。"drops" 可以适用于两者。例如,如果这台计算机上的一个应用程序以 1 Gb/s 的速度发送数据,而你只有一个 10 Mb/s 的网卡。你也可以猜测这种情况可能发生,因为 "drops" 出现在输出的接收和发送部分。 - Mikel

0
从来没有想过有一天我可能会有一些发言权。
在我修好我的笔记本电脑之前,我使用各种安卓应用程序。我碰巧正在使用糟糕的Termux,并发现了这个(我会让专业人士来解释):
ifconfig
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
    inet 192.168.87.31  netmask 255.255.255.0  broadcast 192.168.87.255
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 3000  (UNSPEC)

(我觉得这是正确的格式吧?)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接