测试平台 :NXP LS1043A ARM64
内核版本:
两台设备通过网口eth2 对接。设备1发包,设备2收包,观察两设备 TX RX 包数、字节数。
1、准备数据包
流量仪设置包长1024, 抓取从流量仪发包,wireshark显示length = 1020字节。
1020 bytes on wire,并不是1024,可能流量仪的问题? 先用1020包长吧!
2、设备1 发包:
包数 22964 * 包长1020 = 23423280 bytes
抓包同时 使用 tcpdump 观察:
1020 – 14 = 1006 ,这14字节应该是就是 源地址,目的MAC地址,应该是tcpdump 显示的长度未包括这14字节。
3、设备2 收包:
收到:包数 22964 * (1020 – 14) = 23101784
少的14字节应该是就是源地址,目的MAC地址没有计算进RX bytes
使用tcpdump 查看收包情况
驱动里实际计数情况:
4、结论
关于 TX RX Packets 不管收发,只要没有发生丢包,发端,收端都是一致的。
关于 TX RX Bytes 设备发包时,会将 源、目的MAC地址等14字节的信息计算上,而收包时,不会在 RxBytes上体现。
这也就能解释了 ,使用内核转发时,eth8收包,eth7发包,使用 sar -n DEV 1 1 命令查看网速,
txpck/s rxpck/s 收发速率是对得上的,但是rxKB/s 比 txKB/s 少很多,是什么原因呢?来计算一下
rxKB/s 相比于 txKB/s ,每个包会少计算 14Bytes的MAC地址信息,
(收包速度 267926 )* 14 / 1024 = 3663KB
3663KB + rxKB/s 12035 = 15698 txKB/s
5、X86 CPU 在该情况下 收包情况
X86收包 RxBytes = 包数 22964* (1020 + 4 )= 23515136
看来 X86下 收包的是会将 14字节的 MAC地址信息,还有4字节的其它信息 记录到 RxBytes.