您现在的位置是:首页 >技术教程 >Linux TCP MIB统计汇总网站首页技术教程
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
", 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 超时.