netstat -s输出解析(一)


当执行以下命令查看netstat统计信息来源时,发现一个重要的来源是/proc/net/snmp接口的输出信息
因此在刨根问底分析源码的过程中,找到了这个接口对应的RFC2012文档。本wiki就记录下
相关的解读,以便后续更加透彻的立即netstat的统计信息。

# strace -e open netstat -s

注:netstat -s的另一个重要的数据来源是/proc/net/netstat下的信息,但鉴于
该接口信息量较大,因此会单独独立整理。


snmp4_tcp_list数组元素解析

netstat -s的Tcp类选的数据均来自内核中定义的snmp4_tcp_list数组。
snmp4_tcp_list数组的每一个成员都是一个snmp_mib结构体

struct snmp_mib {
    const char *name;
    int entry;
};

snmp4_tcp_list数组就是/proc/net/snmp接口输出的TCP部分内容

名称 描述 Linux 3.10实现
RtoAlgorithm 用于计算RTO的算法 RTO算法遵循RFC2698,对应值为1.
RtoMin 限定RTO的最小值 使用常量HZ/5限定,即200ms
RtoMax 限定RTO的最大值 使用常量120HZ限定,即120s
MaxConn TCP流数量的上限 并不会在协议栈层限制,默认值为-1
ActiveOpens CLOSE => SYN-SENT次数
可理解为主动建联数
在tcp_connect()函数中计数
相当于SYN包的发送次数(但不包含重传次数)
PassiveOpens LISTEN => SYN-RECV次数
可理解为被动建联数
实现上则是在三次握手成功后,
建立tcp_sock结构体后才加1
在tcp_create_openreq_child()函数中调用
AttemptFails SYN-SENT => CLOSE次数
加上SYN-RECV => CLOSE次数
加上SYN-RECV => LISTEN次数
建联失败的次数
回CLOSE部分在tcp_done()函数中计数,
回LISTEN部分在tcp_check_req()中计数
EstabResets ESTABLISHED => CLOSE次数
加上CLOSE-WAIT => CLOSE次数
这些情况,基本都是reset导致的
在tcp_set_state()函数中,如果之前的状态是
TCP_CLOSE_WAIT或TCP_ESTABLISHED就加1
CurrEstab ESTABLISHED和CLOSE-WAIT
状态的TCP流数
在tcp_set_state()中处理
实现体现的是进入ESTABLISHED之后
进入CLOSE之前的TCP流数
InSegs 所有收到的TCP包
即使是个错误包
在tcp_v4_rcv()和tcp_v6_rcv()中计数
OutSegs 所有发送出去的TCP包
包括新数据包、重传数据包
、syn包、synack包和reset包
tcp_v4_send_reset()中统计reset包
tcp_v4_send_ack()中统计SYN-RECV和TIME-WAIT状态下发送的ACK包
tcp_v6_send_response()中统计ipv6相应数据
tcp_make_synack()中统计发送的SYNACK包

tcp_transmit_skb()中统计所有的其他包
RetransSegs 所有重传出去的TCP包 tcp_v4_rtx_synack()和tcp_v6_rtx_synack()中
统计重传的SYNACK包,
tcp_retransmit_skb()中统计其他重传包
InErrs 所有收到的有问题的TCP包数量
比如checksum有问题
tcp_validate_incoming()中统计seq有问题的包
tcp_rcv_established()、tcp_v4_do_rcv()、tcp_v4_rcv()、
tcp_v6_do_rcv()、tcp_v6_rcv()中根据checksum来判断出错误包
OutRsts 发送的带RST标记的TCP包数量 在tcp_v4_send_reset()、tcp_send_active_reset()、
tcp_v6_send_response()中统计
InCsumErrors checksum有问题的数据包数量 是3.10相对于2.6.32新增的内容,算是细化InErrs统计

snmp4_tcp_list统计结果实例一则

# cat /proc/net/snmp |grep Tcp  /* 适当调整了输个格式,以增加可读性 */
Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails
Tcp: 1            200    120000 -1      818674494   564859834    83498657

EstabResets CurrEstab InSegs       OutSegs      RetransSegs InErrs   OutRsts   InCsumErrors
38663863    4790      213696000469 253602471635 2134386615  18675977 171550781 125433

参考资料

RFC 2012: SNMPv2 Management Information Base for the Transmission Control Protocol using SMIv2