2020年8月11日 | 由 梁金荣 | 800字 | 阅读大约需要2分钟 | 归档于 内核网络 |

原文:http://kerneltravel.net/blog/2020/network_ljr6/

1. 前言

熟悉数据包的接收流程,有助于帮助我们明白在内核哪些地方可以监控和修改数据包,帮助我们明白什么情况下数据包可能会被丢弃等。本文先简单介绍数据包的收包流程,然后使用dropwatch工具收集并查看Linux内核网络中丢包的数量和位置,使用perf监控Linux内核网络丢弃的数据包。

2. 数据包收包过程

2.1 数据包收包宏观过程:

  • 首先网络报文通过物理网线发送到网卡
  • 网络驱动程序会把网络中的报文读出来放到 ring buffer 中,这个过程使用 DMA(Direct Memory Access)将数据包映射到内存中,且不需要 CPU 参与
  • 内核从 ring buffer 中读取报文进行处理,执行 IP 和 TCP/UDP 层的逻辑,最后把报文放到应用程序的 socket buffer 中
  • 应用程序从 socket buffer 中读取报文进行处理

2.2 数据包收包较详细过程:

由以上可以看到,在Linux内核网络中,发生丢包的地方特别多,下面就使用两个工具来监控Linux内核网络中的丢包数据。

3. dropwatch工具

下面将安装并使用dropwatch工具,来收集并查看Linux内核网络中丢包的数量和位置。

3.1 安装dropwatch

sudo apt-get install -y libnl-3-dev libnl-genl-3-dev binutils-dev libreadline6-dev

git clone https://github.com/pavel-odintsov/drop_watch.git

进入/drop_watch/src目录后执行make:

3.2 使用dropwatch

dropwatch安装完成后使用以下命令运行:

sudo ./dropwatch -l kas

使用以下命令开始收集丢包信息:

start

可以看到丢包的数量和丢包发生的位置都已经被收集并显示出来了。

4. perf

下面将使用perf监控Linux内核网络丢弃的数据包,如果还没有安装perf,请先按一下步骤安装:

根据提示,安装所需的依赖,要注意的是,内核版本不同,安装命令略有差异:

sudo apt install linux-tools-5.3.0-62-generic

sudo apt install linux-cloud-tools-5.3.0-62-generic

perf的用法帮助信息:

下面用perf监控丢弃的数据包,使用 perf 监视 kfree_skb 事件:

sudo perf record -g -a -e skb:kfree_skb
sudo perf script

结果如下:

可以看到,使用 perf 监视 kfree_skb 事件,找到了数据包丢弃的地方。

LINUX内核网络丢包监控相关推荐

  1. Linux内核网络丢包查看工具dropwatch的安装和使用

    本文将安装并使用dropwatch工具,来收集并查看Linux内核网络中丢包的数量和位置. 安装 sudo apt-get install -y libnl-3-dev libnl-genl-3-de ...

  2. Linux下网络丢包故障定位

    Linux下网络丢包故障定位 | syxdevcode博客转载: 云网络丢包故障定位全景指南 硬件网卡丢包Ring Buffer溢出 如图所示,物理介质上的数据帧到达后首先由NIC(网络适配器)读取, ...

  3. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  4. Linux内核网络数据包发送(二)——UDP协议层分析

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  5. Linux内核网络数据包发送(一)

    Linux内核网络数据包发送(一) 1. 前言 2. 数据包发送宏观视角 3. 协议层注册 4. 通过 socket 发送网络数据 4.1 `sock_sendmsg`, `__sock_sendms ...

  6. Linux内核网络数据包发送(四)——Linux netdevice 子系统

    Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...

  7. Linux内核网络数据包处理流程

    Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO. ...

  8. 【博客573】linux内核层丢包排查方法汇总

    linux丢包排查方法汇总 1.排查网卡丢包 命令1: ifconfig xxx ifconfig eth0 eth0 Link encap:Ethernet HWaddr AC::3D:A9::0D ...

  9. linux 检测网络丢包率,网络问题解决思路,Linux 知识点,测试丢包率,抓包及分析...

    近期接触的项目涉及到语音传输,经常遇到信令传输的异常,或通话网络不稳定,需要抓包分析原因,故接触到这一块知识. ping 简单的连通测试 ping 45.32.79.140 -c1000 -s1024 ...

最新文章

  1. 006 Spark中的wordcount以及TopK的程序编写
  2. 搜狗CEO王小川:AI领域存在泡沫 但留下的是珍珠
  3. 强势的老板--项目管理
  4. js 闭包及其相关知识点理解
  5. Linux系统用户环境变量大全,linux系统和用户环境变量的配置文件
  6. python一条语句分析几个常用函数和概念
  7. sklearn模型的训练(下)
  8. Kettle能做什么?
  9. java gui 组件_Java GUI4:深入了解GUI组件
  10. jzoj4743-积木【状压dp】
  11. 继承20161223
  12. 链接选项 rpath 的原理和应用
  13. 以太坊PoA共识引擎算法介绍(3)
  14. 2021-02-23 天地图图层类型总结
  15. 上海.NET俱乐部聚会筹备进展
  16. 动态包含与静态包含的区别
  17. ooffice为保护计算机,office已检测到此文件存在问题编辑此文件可能会损害您的计算机!...
  18. 磁芯电流探头降额功率的主要原因是什么?
  19. Jenkins Bitbucket Java 部署
  20. 入侵防御系统特征库升级

热门文章

  1. C#中Guid.ToString (String)五种格式,以及将32位的GUID转为16位及其他格式
  2. SQL 索引超详细解析
  3. Spotfire在文本区域添加自定义JavaScript代码的最佳实践
  4. 【Spring学习】过滤器和拦截器
  5. 三国佚事——巴蜀之危 全送错信件问题
  6. mac pro系统升级导致的黑屏解决方案
  7. linux0.11移植到凌动电脑,华硕EPC1005PE 新凌动N450的11小时惊喜
  8. 计算机关机整人,怎么发个软件让他人电脑自动关机?顺便帮帮讲解 谢谢 整人的 ......
  9. python:实现计算电阻Calculate resistance(附完整源码)
  10. Bugku CTF每日一题 乌云邀请码