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

Linux TCP MIB统计汇总

概述

  • 在 linux >= 4.7 才将所有TCP丢包收敛到 函数 tcp_drop

指标详解

cat /proc/net/netstat

格式化命令

cat /proc/net/netstat | awk '(f==0) {name=$1; i=2; while ( i<=NF) {n[i] = $i; i++ }; f=1; next} (f==1){ i=2; while ( i<=NF){ printf "%s%s = %d\n", name, n[i], $i; i++}; f=0}'

LINUX_MIB_LISTENDROPS

Listen 状态下的Socket丢包。主要统计是SYN、SYNACK的ACK的丢包

1、tcp_conn_request()->tcp_listendrop()

Drop Reason:

  • 1.1全队列满(全队列tcp_max_syn_backlog)
  • 1.2 没开syncookie下、半队列长度大于 3/4 的 tcp_max_syn_backlog、并且src之前没有连接记录(tcp_metrics)
  • 1.3 没开syncookie下、半队列满
  • 1.4 本机到src端没有路由

2、tcp_v4_conn_request()->tcp_listendrop()

Drop Reason:

  • 2.1 SYN的 地址是 多播&广播

3、tcp_v4_syn_recv_sock()->tcp_listendrop()

Drop Reason:

  • 3.1 收到SYN ACK时发现全队列已满

3.2 本机到src端没有路由

LINUX_MIB_LISTENOVERFLOWS

全队列满,主要是应用程序来不及accept()

  • 1、tcp_conn_request

LINUX_MIB_LISTENDROPS的1.1

  • 2、tcp_v4_syn_recv_sock

LINUX_MIB_LISTENDROPS的3.1

LINUX_MIB_TCPOFOMERGE

非丢包,乱序的包有重叠,丢包

例如

packet1 seq 1 end seq 100

packet2 seq 200 end seq 300

packet3 seq 400 end seq 500

当 packet4 到达时,如果 packet seq < 300, end seq < 300,那么 就和 packet2 重叠了。

重叠情况还有好多,不一一例举

LINUX_MIB_TCPRCVCOALESCE

非丢包,乱序的包部分重叠统计

例如

packet1 seq 1 end seq 100

packet2 seq 200 end seq 201

当 packet3 到达时,如果 packet3 为seq 101 end seq <200 ,那么 内核会将 packet1和packet3合并为一个skb

LINUX_MIB_TCPRCVQDROP

see next

LINUX_MIB_OFOPRUNED

see next

LINUX_MIB_PRUNECALLED

但 sk_rmem_alloc > SO_RCVBUF时,尝试利用sk_buffer 其他字段的空间存储应用数据。常见于应用程序来不及read(),导致recv buffer满。

linux - 一个 TCP 接收缓冲区问题的解析 - 187J3X1 - SegmentFault 思否

LINUX_MIB_RCVPRUNED

SO_RCVBUF满了,并且 prune失败后,丢包。

LINUX_MIB_TCPOFODROP

SO_RCVBUF满了,尝试丢弃cache的重传报文。

LINUX_MIB_TCPRCVQDROP

同上

  • tcp_try_rmem_schedule()

LINUX_MIB_TCPZEROWINDOWDROP

0窗口时收到的报文,丢包

LINUX_MIB_TCPREQQFULLDROP

半连接队列满了,丢包

LINUX_MIB_TCPREQQFULLDOCOOKIES

半连接队列满了并且 sysctl_tcp_syncookies 设置 为 1 ,sysctl_tcp_syncookies 设置为2。触发了syncookie。

前者,通常可能是 大量SYN包建立连接并且来不及三次握手

LINUX_MIB_TCPTIMEOUTS

SYN ACK的重传次数

TCP_MIB_ATTEMPTFAILS

SYN_SENT 和 SYN_RECV状态下,连接失败。常见于建链失败。

tcp_done

LINUX_MIB_TCPABORTONTIMEOUT

连接超时、例如等待对端的ACK, 0窗口探测, fastopen的SYNACK没收到ACK, 重传超时, keepalive 超时.

http://www.lryc.cn/news/63690.html

相关文章:

  • 记录 docker linux部署jar
  • 【Linux】教你用进程替换制作一个简单的Shell解释器
  • onMeasure里如何重置只有1个子view一行满屏, 若有多个自适应一行
  • Postman创建项目 对接口发起请求处理
  • 在Vue3项目中js-cookie库的使用
  • 【论文笔记】Attention和Visual Transformer
  • 独立IP服务器和共享IP服务器有什么区别
  • Java8
  • nn.conv1d的输入问题
  • js判断是否为null,undefined,NaN,空串或者空对象
  • Java每日一练(20230501)
  • 从零开始学习Web自动化测试:如何使用Selenium和Python提高效率?
  • fastdfs环境搭建
  • 有什么牌子台灯性价比高?性价比最高的护眼台灯
  • 信息系统项目管理师 第9章 项目范围管理
  • 【Android入门到项目实战-- 8.2】—— 使用HTTP协议访问网络
  • Go官方指南(五)并发
  • VS快捷键大全 | 掌握这些快捷键,助你调试快人一步
  • 【刷题】203. 移除链表元素
  • C++11学习- CPU多核与多线程、并行与并发
  • docker登录harbor、K8s拉取镜像报http: server gave HTTP response to HTTPS client
  • Redis在linux下安装
  • 这里有你想知道的那些卖家友好型跨境电商平台!
  • 架构中如何建设共识
  • 力扣(LeetCode)1172. 餐盘栈(C++)
  • 详细说一下DotNet Core 、DotNet5、DotNet6和DotNet7的简介和区别
  • 基于MBD的控制系统建模与仿真软件工具集
  • QML动画分组(Grouped Animations)
  • 探索未来的数字人生:全景VR数字人
  • 计算机基础 -- 硬件篇