如何追查一个packet在linux 系统哪里丢失

要想追一个包在系统哪里丢失了, 就要了解 一个应用层的包在送出时 要经历那些 检查点 和被丢掉的点。

  1. 在传输层,如果是 tcp 包 会有contrack 的 buf 的限制 可能会导致 packets 的丢失。

=> 检查办法:查看dmesg日志有报错:kernel: nf_conntrack: nf_conntrack: table full, dropping packet , cat /proc/net/nf_conntrack.

nf_conntrack 的作用时记录tcp 的 连接状况表。

Linux系统nf_conntrack连接跟踪机制简介_nf conntrack-CSDN博客

  1. 在传输层 如果是tcp 每个系统都有tcp 的最大连接数 (tcp_max_syn_backlog 是 Linux 系统中用于控制 TCP 三次握手期间半连接(SYN_RCVD 状态)的最大队列长度的参数。在 TCP 三次握手过程中,服务器在收到客户端的 SYN 包后,会将对应的半连接放入一个队列中,等待完成三次握手的过程。当这个队列满了之后,新的连接请求将会被丢弃,这可能会导致客户端连接超时或者请求失败。为了避免这种情况,可以通过调整 tcp_max_syn_backlog 参数来增加该队列的长度,从而允许更多的半连接在队列中等待完成握手)

=> 检查方法: cat /proc/sys/net/ipv4/tcp_max_syn_backlog

  1. 在传输层 如果是tcp 每个系统的session 的time_wait 都不同,这样导致packets 的先手顺序乱了 导致丢包 ( 这个问只在当系统开启了tcp_tw_recycle时有) 该配置项可用于快速回收处于TIME_WAIT状态的socket以便重新分配。默认是关闭的,必要时可以开启该配置。但是开启该配置项后,有一些需要注意。

=>我们可以查看cat /proc/sys/net/ipv4/tcp_max_tw_buckets 最大条数, 然后如果cat /proc/sys/net/ipv4/tcp_rw_recycle 开启时, 我们可以用netsta -at | grep "TIME_WAIT" | wc -n 来统计有多少半连接, 然后 在抓包 如果会的RST 那基本就是这个导致的。

  1. 在IP层packets 要经过 iptable 的过滤。

=>iptables -nvL 查看所有 规则

iptables -A INPUT -j LOG --log-prefix="iptables-" 然后 dmesg 查看 iptables 的包的匹配情况。

5.在ip 层还有的系统开启了反向路由检查rp_filter, 当 source 不能再 本地从收报的口路由出去时就drop。

= > 反向路由也还是一种保护机制, 就是我必须能把source 地址从我的端口送出去。

cat /proc/sys/net/ipv4/conf/all/rp_filter

https://www.cnblogs.com/lipengxiang2009/p/7446388.html

  1. 再网卡层nic,由于现在都使用dma 技术 所以 nic 的ring buffer 满的时候 就会drop packets

=> cat /proc/net/dev 其中的fifo 就是指的时ring buffer full 的drop count

ethtool -g eth0

ethtool -G eth0 rx 4096 tx 4096 更改ring buffer

ifconfig 中的overruns 也是统计ring buffer 满了drop 的count

  1. 在进入每个协议栈前 会有一个缓存队列,比如ip->tcp , 每个cpu 都有一个 协议栈缓存队列,当队列满了时 就会drop packets。 也就是软中断 响应不够。

=>通过查看 /proc/net/softnet_stat 可以确定是否发生了 netdev backlog 队列溢出

每一行代表每个 CPU 核的状态统计,从 CPU0 依次往下;每一列代表一个 CPU 核的各项统计:第一列代表中断处理程序收到的包总数;第二列即代表由于 netdev_max_backlog 队列溢出而被丢弃的包总数。

查看这个队列大小 cat /proc/sys/net/core/netdev_max_backlog

  1. MTU 设置 不合理 导致的packets drop

=> ifconfig eth0 去查看 mtu 大小

由于 mtu 设置不和里导致 分片和重组 变得很多导致cpu 和一些buf 满了, 导致performance 低。

网络问题 多用ethtoool,ifconfig 工具, /proce/sys/net 下是一些 设定,proc/net 下多是一些统计信息

reference:https://zhuanlan.zhihu.com/p/692288382

相关推荐
qq_4798754344 分钟前
X-Macros(1)
linux·服务器·windows
笨笨聊运维2 小时前
CentOS官方不维护版本,配置python升级方法,无损版
linux·python·centos
jun_bai3 小时前
python写的文件备份网盘程序
运维·服务器·网络
爱吃牛肉的大老虎3 小时前
网络传输架构之gRPC讲解
网络·架构
Warren983 小时前
Python自动化测试全栈面试
服务器·网络·数据库·mysql·ubuntu·面试·职场和发展
HIT_Weston3 小时前
39、【Ubuntu】【远程开发】拉出内网 Web 服务:构建静态网页(二)
linux·前端·ubuntu
欢喜躲在眉梢里3 小时前
CANN 异构计算架构实操指南:从环境部署到 AI 任务加速全流程
运维·服务器·人工智能·ai·架构·计算
云飞云共享云桌面4 小时前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
福尔摩斯张4 小时前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
骆驼10244 小时前
手机热点和无线路由器在 IPv6 工作模式上的区别
网络·ipv6