ifconfig RX数据包输出中的“ errors:”,“ dropped:”,“ overruns:”和“ frame:”字段之间有什么区别?


11

有人可以详细说明输出中各个RX packets字段之间的区别ifconfig吗?

例如,假设我跑步ifconfig并看到以下内容:

eth0      Link encap:Ethernet  HWaddr AA:BB:CC:DD:EE:FF  
          inet addr:1.1.1.1  Bcast:1.1.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:202723544 errors:0 dropped:4959 overruns:0 frame:37
          TX packets:158354057 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4261083782 (3.9 GiB)  TX bytes:1224803677 (1.1 GiB)
          Interrupt:83 Memory:f6bf0000-f6c00000 

errors: dropped: overruns和之间有什么区别frame:

在这一点上,我的猜测(基于一些模糊的谷歌搜索)是​​,frame:当nic分析传入的帧时,这与CRC故障特别相关,并且errors:是一个更广泛的泛型类别。再说一次……如果是这样,我希望这两个字段都显示数字。

Answers:


17

该信息记录不充分。我会告诉你我的经验。

  • frame 仅计算未对齐的帧,这意味着长度不能被8整除的帧。由于该长度不是有效帧,因此将其丢弃。

  • 同时errors计算CRC错误,太短的帧和太长的帧。

  • overruns 计算由于缓冲区已满且内核无法清空缓冲区而导致FIFO溢出的次数。

  • 最后,dropped对未配置IPv6的接口进行计数,例如意外的VLAN标记或接收IPv6帧。


谢谢。我发现博客文章也有类似的发现。blog.hyfather.com/blog/2013/03/04/ifconfig
Mike B

您是怎么知道的,您的来历在哪里?我很好奇,是因为我自己在寻找这些答案,除了博客或诸如此类的帖子,似乎找不到其他答案。有手册页或官方文档吗?
mdo123

8

我知道这是一个有1年历史的问题,但是在Google上是第1个问题,所以也许我可以加5美分。

首先,我不知道此帧字段上的mod 8规则...是驱动程序规则还是内核规则?

根据我的经验,这些数字是相当通用的,可以从ethtool(如果驱动程序支持)例如(从watch命令中)获得更多信息。

Every 1s: ethtool -S eth1 | grep rx_ && echo  && ifconfig eth1                                                   1970-01-01 00:21:07

 rx_octets: 12635134290
 rx_frames: 8488675
 rx_broadcast_frames: 103
 rx_multicast_frames: 0
 rx_pause_frames: 0
 rx_64_byte_frames: 113
 rx_65_127_byte_frames: 47
 rx_128_255_byte_frames: 186340
 rx_256_511_byte_frames: 1
 rx_512_1023_byte_frames: 0
 rx_1024_1518_byte_frames: 8302174
 rx_greater_than_1518_byte_frames: 0
 rx_undersized_frames: 0
 rx_oversize_frames: 0
 rx_jabbers: 0
 rx_frame_check_sequence_errors: 0
 rx_length_field_frame_errors: 0
 rx_symbol_errors: 0
 rx_alignment_errors: 0
 rx_resource_errors: 283
 rx_overruns: 132
 rx_ip_header_checksum_errors: 0
 rx_tcp_checksum_errors: 0
 rx_udp_checksum_errors: 0

eth1      Link encap:Ethernet  HWaddr AA:BB:CC:DD:20:16  
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a8bb:ccff:fedd:2016/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:8488675 errors:415 dropped:4 overruns:132 frame:283
          TX packets:647464 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3892403548 (3.6 GiB)  TX bytes:62273943 (59.3 MiB)
          Interrupt:147 Base address:0xc000 

根据驱动程序的不同,字段中的字段也可能不同ethtool,这些 ifconfig字段也可以指向尺寸过大/过大的框架。

如果您的NIC和驱动程序支持,则可以(或应该)执行以下操作:

ifdown eth1 && modprobe -r macb && modprobe macb && ifup eth1 && ethtool -offload  eth1  rx off  tx off && ethtool -K eth1 gso off && ethtool --show-offload eth1

为了获取更多信息(使信息在ethtool中显示)。我在这里使用Macb驱动程序...所以请检查ethtool您的驱动程序。

ethtool -i eth1

这就是帮助我通常理解正在发生什么的原因。

有时没有错误,但数据包已损坏……这更多是物理问题或驱动程序问题……有时,嗅探器显示一切正确,但到达驱动程序/内核后却出现问题(这是上述情况)其实)。

可以从中获得更多信息netstat -s,或者将其放入脚本中(对于小型嵌入式系统):

awk '(f==0) { i=1; while ( i<=NF) {n[i] = $i; i++ }; f=1; next} (f==1){ i=2; while ( i<=NF){ printf "%s = %d\n", n[i], $i; i++}; f=0}'  /proc/net/netstat

因为netstat -s可能不可用。


1
感谢您的单挑ethtool -S
kostix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.