LINUX内核网络丢包监控
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内核网络丢包监控相关推荐
- Linux内核网络丢包查看工具dropwatch的安装和使用
本文将安装并使用dropwatch工具,来收集并查看Linux内核网络中丢包的数量和位置. 安装 sudo apt-get install -y libnl-3-dev libnl-genl-3-de ...
- Linux下网络丢包故障定位
Linux下网络丢包故障定位 | syxdevcode博客转载: 云网络丢包故障定位全景指南 硬件网卡丢包Ring Buffer溢出 如图所示,物理介质上的数据帧到达后首先由NIC(网络适配器)读取, ...
- Linux内核网络数据包发送(三)——IP协议层分析
Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...
- Linux内核网络数据包发送(二)——UDP协议层分析
Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...
- Linux内核网络数据包发送(一)
Linux内核网络数据包发送(一) 1. 前言 2. 数据包发送宏观视角 3. 协议层注册 4. 通过 socket 发送网络数据 4.1 `sock_sendmsg`, `__sock_sendms ...
- Linux内核网络数据包发送(四)——Linux netdevice 子系统
Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...
- Linux内核网络数据包处理流程
Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO. ...
- 【博客573】linux内核层丢包排查方法汇总
linux丢包排查方法汇总 1.排查网卡丢包 命令1: ifconfig xxx ifconfig eth0 eth0 Link encap:Ethernet HWaddr AC::3D:A9::0D ...
- linux 检测网络丢包率,网络问题解决思路,Linux 知识点,测试丢包率,抓包及分析...
近期接触的项目涉及到语音传输,经常遇到信令传输的异常,或通话网络不稳定,需要抓包分析原因,故接触到这一块知识. ping 简单的连通测试 ping 45.32.79.140 -c1000 -s1024 ...
最新文章
- 006 Spark中的wordcount以及TopK的程序编写
- 搜狗CEO王小川:AI领域存在泡沫 但留下的是珍珠
- 强势的老板--项目管理
- js 闭包及其相关知识点理解
- Linux系统用户环境变量大全,linux系统和用户环境变量的配置文件
- python一条语句分析几个常用函数和概念
- sklearn模型的训练(下)
- Kettle能做什么?
- java gui 组件_Java GUI4:深入了解GUI组件
- jzoj4743-积木【状压dp】
- 继承20161223
- 链接选项 rpath 的原理和应用
- 以太坊PoA共识引擎算法介绍(3)
- 2021-02-23 天地图图层类型总结
- 上海.NET俱乐部聚会筹备进展
- 动态包含与静态包含的区别
- ooffice为保护计算机,office已检测到此文件存在问题编辑此文件可能会损害您的计算机!...
- 磁芯电流探头降额功率的主要原因是什么?
- Jenkins Bitbucket Java 部署
- 入侵防御系统特征库升级
热门文章
- C#中Guid.ToString (String)五种格式,以及将32位的GUID转为16位及其他格式
- SQL 索引超详细解析
- Spotfire在文本区域添加自定义JavaScript代码的最佳实践
- 【Spring学习】过滤器和拦截器
- 三国佚事——巴蜀之危 全送错信件问题
- mac pro系统升级导致的黑屏解决方案
- linux0.11移植到凌动电脑,华硕EPC1005PE 新凌动N450的11小时惊喜
- 计算机关机整人,怎么发个软件让他人电脑自动关机?顺便帮帮讲解 谢谢 整人的 ......
- python:实现计算电阻Calculate resistance(附完整源码)
- Bugku CTF每日一题 乌云邀请码