networking - 为什么在ifconfig下不抓包?

标签 networking linux-kernel network-programming linux-device-driver ethernet

为了在我的 Linux 机器上模拟丢包,我提供了以下几行。

# for randomly dropping 10% of incoming packets:
iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP

# and for dropping 10% of outgoing packets:
iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP

之后我运行 ping some_ip_address,当我终止它时,可以看到行

100 packets transmitted, 84 received, 16% packet loss, time 99137ms

但是当我运行 ifconfig 命令时,我看到 packet drop filled 仍然是零

      RX packets:16007 errors:0 dropped:0 overruns:0 frame:0
      TX packets:16207 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000

在这里,您可以看到 Rx 和 Tx 数据包行中的 Dropped 字段仍然为零。

谁能告诉我为什么在 ifconfig 下没有捕获丢包?

最佳答案

这是因为 iptables 和 ifconfig 统计指的是协议(protocol)栈中的不同层。 ifconfig 统计信息用于 NIC(物理层和 MAC 层),而 iptables 规则在 NIC 接收到帧并将其传送到内核(INPUT)或在数据包传送到协议(protocol)栈中的第 2 层(用于 OUTPUT)之前执行。

关于networking - 为什么在ifconfig下不抓包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113846/

相关文章:

android - 为什么在库和内核层之间有一个额外的层(HAL)?

linux - dma_mmap_coherent() 映射内存的零拷贝用户空间 TCP 发送

c - MAC地址在C代码中的表示

javascript - Safari AJAX 错误 - 无法加载资源

java - Java非阻塞socket的flush操作

android - 创建TCP套接字时无法识别Android主机名

linux - 是否可以将内核消息从特定进程传输到文件

c - gethostbyaddr : Success 上出现错误

java - 什么是 TCP 协议(protocol)中的同步错误?

linux - 关闭代理内的套接字