当前位置: 首页 > news >正文

如何追查一个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博客

2. 在传输层 如果是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  

3. 在传输层 如果是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 那基本就是这个导致的。

4. 在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

6. 再网卡层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

7. 在进入每个协议栈前 会有一个缓存队列,比如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  

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

   => ifconfig eth0 去查看 mtu 大小

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • urllib的使用
  • opencv学习:图像视频的读取截取部分图像数据颜色通道提取合并颜色通道边界填充数值计算图像融合
  • 14-- 二重积分
  • ubuntu系统Docker常用命令
  • 【Python】爬虫实战01:获取豆瓣Top250电影信息
  • 信创学习笔记(四),信创之数据库DB思维导图
  • NoSql选择题解
  • ubuntu 物理内存爆炸而不使用虚拟内存的问题
  • 速部署 HBase 测试环境
  • C# 设计一个可变长度的数据通信协议编码和解码代码。
  • 快速排序及归并排序的实现与排序的稳定性
  • 业务终端动态分配IP-DHCP技术、DHCP中继技术
  • Go语言中GC(垃圾回收回收机制)三色标记与混合写屏障
  • 智能手术新时代:Apple Vision Pro在医疗领域的突破性应用
  • 【计算机网络】学习指南及导论
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • es6--symbol
  • HTML5新特性总结
  • iOS | NSProxy
  • Java|序列化异常StreamCorruptedException的解决方法
  • java中具有继承关系的类及其对象初始化顺序
  • MD5加密原理解析及OC版原理实现
  • Octave 入门
  • 将 Measurements 和 Units 应用到物理学
  • 那些被忽略的 JavaScript 数组方法细节
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何实现 font-size 的响应式
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 一、python与pycharm的安装
  •  一套莫尔斯电报听写、翻译系统
  • 一些css基础学习笔记
  • ​如何在iOS手机上查看应用日志
  • #{}和${}的区别?
  • #mysql 8.0 踩坑日记
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.ajax,axios,fetch三种ajax请求的区别
  • $forceUpdate()函数
  • (003)SlickEdit Unity的补全
  • (1) caustics\
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (篇九)MySQL常用内置函数
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (算法二)滑动窗口
  • (转)scrum常见工具列表
  • (转)大型网站架构演变和知识体系
  • ****三次握手和四次挥手
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .Net Core与存储过程(一)
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)