ifconfig 下面的一些字段(errors, dropped, overruns)

一台机器经常收到丢包的报警,先看看最底层的有没有问题:

# ethtool  em2 | egrep 'Speed|Duplex'

Speed: 1000Mb/s

Duplex: Full

# ethtool  -S em2 | grep crc rx_crc_errors: 0

Speed, Duplex, CRC 之类的都没问题,基本可以排除物理层面的干扰。

通过 ifconfig 可以看到 overruns 字段在不停的增大:

# for i in `seq 1 10`; do ifconfig em2 | grep RX | grep overruns; sleep 1; done

dropped 出现问题的倒是遇到过几次,overruns 的倒是第一次遇到,再看看下面这个:

# ethtool  -S em2 | grep drop

dropped_smbus: 0

tx_dropped: 0

rx_queue_0_drops: 26649441

rx_queue_1_drops: 26096911

rx_queue_2_drops: 22712954

rx_queue_3_drops: 16581572

rx_queue_4_drops: 27349880

rx_queue_5_drops: 6178622

rx_queue_6_drops: 19882243

rx_queue_7_drops: 18802558

发现数值也在不停的增加。G 了一下,发现这些 errors, dropped, overruns 表示的含义还不大一样。根据 这篇文档 的解释:

# ifconfig em2

em2       Link encap:Ethernet  HWaddr AC:85:3D:A9:03:0D  

inet addr:211.211.211.211  Bcast:211.211.211.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:17141208886 errors:0 dropped:0 overruns:164254181 frame:0

TX packets:14685534428 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:2619578349554 (2.3 TiB)  TX bytes:1479317006067 (1.3 TiB)

Memory:94b00000-94b20000

RX errors: 表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。

RX dropped: 表示数据包已经进入了 Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃。

RX overruns: 表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一,上面那台有问题的机器就是因为 interruprs 分布的不均匀(都压在 core0),没有做 affinity 而造成的丢包。

RX frame: 表示 misaligned 的 frames。

对于 TX 的来说,出现上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error,而 collisions 则表示由于 CSMA/CD 造成的传输中断。

在梳理这些 error/drop/discard 的时候,由于涉及到不同的 NIC 型号,ethtool/netstat 或者是直接从 proc 里面获取到的数据所代表的意思还不完全一样,比如上面通过 ethtool 得到的「丢包」是通过 rx_queue_NUM_drops 这个字段表示的,而通过 netstat 看到的却是 RX-OVR 表示的,一个是 overruns 一个是 dropped,字面意思完全不同:

# netstat -i | column  -t

Kernel  Interface  table

Iface   MTU        Met    RX-OK        RX-ERR  RX-DRP  RX-OVR     TX-OK        TX-ERR  TX-DRP  TX-OVR  Flg

em2     1500       0      17159519100  0       0       164254181  14701510290  0       0       0       BMRU

不管是使用何种工具,最终的数据无外乎是从下面这两个文件获取到的:

  1. /sys/class/net/em2/statistics/
  2. /proc/net/dev

# cat /proc/net/dev | column  -t

Inter-|            Receive      |        Transmit

face               |bytes       packets  errs      drop       fifo  frame  compressed  multicast|bytes  packets      errs  drop  fifo  colls  carrier  compressed

em2:2621515020998  17153788154  0        0         164254181  0     0      0           1480433225509    14696703883  0     0     0     0      0        0

对于上面出现的若干种问题,一方面是做好监控,另外一方面是出现问题的时候及时的想到各种的可能,无外乎那么几种。Google 过程中发现了 stackexchange 上还 没人回答的问题 ,结合上面的,我顺便回答了一下,基本,遵循里面的四点,95% 以上的场景应该能轻松应对。

ref:

http://serverfault.com/questions/561107/how-to-find-out-the-reasons-why-the-network-interface-is-dropping-packets

http://serverfault.com/questions/448768/cat-proc-net-dev-and-ip-s-link-show-different-statistics-which-one-is-lyi

http://www.linuxjournal.com/content/queueing-linux-network-stack

<think>好的,我现在需要帮助用户解读ifconfig命令输出的网络接口配置信息。首先,我得回忆一下自己使用ifconfig的经验,以及相关的知识。根据用户提供的引用内容,引用[1]和[2]都提到了ifconfig的基本用法和输出解释,所以应该基于这些信息来构建回答。 首先,用户的问题是“如何解读ifconfig命令输出的网络接口配置信息”。我需要分步骤解释每个部分的含义,确保结构清晰。根据引用[1]中的示例,比如配置IP地址的部分,输出信息可能包括接口名称、IP地址、子网掩码、广播地址等。而引用[2]提到使用ifconfig -a来查看所有接口,这说明输出中可能有多个接口的信息,比如eth0、lo等。 接下来,我需要考虑用户可能的疑问点。例如,RX和TX数据包代表什么?MTU是什么?还有MAC地址的位置。这些都是ifconfig输出中的关键部分,需要逐一解释。 然后,我需要确保回答符合用户给出的系统级指令,比如使用正确的中文,数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能不需要数学公式,但要注意格式。另外,生成相关问题,可能需要包括如何配置IP、如何启用禁用接口等。 现在,我需要组织回答的结构。首先介绍ifconfig的基本作用,然后详细解释输出中的各个字段,比如接口名称、MAC地址、IPv4地址、子网掩码、广播地址、IPv6地址、MTU、网络指标、数据包统计等。每个部分用简短的说明,并适当举例,比如eth0或lo接口的例子。 同时,要注意引用标记,比如在提到配置IP地址时引用[^1],在提到查看所有接口时引用[^2]。这需要自然地在相关段落末尾添加,确保不破坏语句的流畅性。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如如何配置IP、启用接口、MTU的作用、数据包统计的意义等。这些问题应该与ifconfig的使用和输出解读相关,帮助用户深入理解。 在检查过程中,要确保没有使用任何markdown格式,所有行内代码用反引号包围,段落分隔自然。同时,避免技术错误,比如正确区分RX和TX,正确说明MTU的含义,以及各个地址的格式是否正确。 总结一下,我的回答需要分为以下几个部分: 1. ifconfig命令的简介 2. 输出信息的逐项解释,每个部分详细说明 3. 示例输出和具体字段的说明 4. 相关问题列表 在写作过程中,要确保语言简洁明了,符合中文习惯,并正确引用提供的参考资料。同时,注意用户可能的疑惑点,如网络术语的解释,数据包统计的实际意义等,都需要用通俗易懂的语言进行说明。</think>### ifconfig命令输出解读 要解读`ifconfig`命令输出的网络接口配置信息,需重点关注以下几个部分: --- #### 1. **网络接口标识** - **接口名称**:如`eth0`(以太网接口)、`wlan0`(无线接口)、`lo`(本地环回接口)等。 - **状态**:`UP`表示接口已启用,`RUNNING`表示正在传输数据,`BROADCAST`表示支持广播。 --- #### 2. **网络地址信息** - **MAC地址**:以`ether`或`HWaddr`开头的行,格式为`00:0c:29:xx:xx:xx`,用于局域网通信。 - **IPv4地址**:以`inet`开头,例如`inet 192.168.1.100`。 - **子网掩码**:标注为`netmask 255.255.255.0`,用于划分网络和主机部分[^1]。 - **广播地址**:以`broadcast`开头,如`broadcast 192.168.1.255`[^1]。 - **IPv6地址**:以`inet6`开头,例如`inet6 fe80::20c:29ff:fe12:3456`。 --- #### 3. **网络性能参数** - **MTU(最大传输单元)**:如`mtu 1500`,表示单次传输的数据包最大字节数。 - **网络指标**:`metric`值用于路由优先级判断(较低值优先级更高)。 --- #### 4. **数据包统计** - **接收数据(RX)**: - `RX packets 1000`:已接收的数据包总数。 - `errors 0`:接收错误数。 - `dropped 0`:丢弃的数据包数。 - **发送数据(TX)**: - `TX packets 800`:已发送的数据包总数。 - 类似RX的错误和丢弃统计。 --- #### 示例输出解析 ```bash eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:0c:29:12:34:56 txqueuelen 1000 (Ethernet) RX packets 1234 bytes 987654 (964.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 567 bytes 123456 (120.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ``` - **接口状态**:`UP`(已启用),支持广播和组播。 - **IPv4配置**:IP为`192.168.1.100`,子网掩码`255.255.255.0`。 - **数据包统计**:接收1234个包,发送567个包,无错误或丢包。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值