文档章节

linux下tcp状态是从哪查出来的

tinyhare
 tinyhare
发布于 2016/04/20 15:12
字数 308
阅读 49
收藏 1

linux中,各种tcp连接的状态存储在 /proc/net/tcp 文件中

其中st列就是tcp的各种状态,那么这个值代表什么意思呢? 有网友从内核源码里找到了这个

enum {
    TCP_ESTABLISHED = 1,
    TCP_SYN_SENT,
    TCP_SYN_RECV,
    TCP_FIN_WAIT1,
    TCP_FIN_WAIT2,
    TCP_TIME_WAIT,
    TCP_CLOSE,
    TCP_CLOSE_WAIT,
    TCP_LAST_ACK,
    TCP_LISTEN,
    TCP_CLOSING,    /* Now a valid state */
    TCP_MAX_STATES  /* Leave at the end! */
};

那么各种状态对应的数字就清楚了。

我们以dstat工具为例,看看它是怎么统计的各种tcp状态的数量的。

class dstat_tcp(dstat):
    def __init__(self):
        self.name = 'tcp sockets'
        self.nick = ('lis', 'act', 'syn', 'tim', 'clo')
        self.vars = ('listen', 'established', 'syn', 'wait', 'close')
        self.type = 'd'
        self.width = 4
        self.scale = 100
        self.open('/proc/net/tcp', '/proc/net/tcp6')

    def extract(self):
        for name in self.vars: self.val[name] = 0
        for l in self.splitlines():
            if len(l) < 12: continue
            ### 01: established, 02: syn_sent,  03: syn_recv, 04: fin_wait1,
            ### 05: fin_wait2,   06: time_wait, 07: close,    08: close_wait,
            ### 09: last_ack,    0A: listen,    0B: closing
            if l[3] in ('0A',): self.val['listen'] += 1 
            elif l[3] in ('01',): self.val['established'] += 1 
            elif l[3] in ('02', '03', '09',): self.val['syn'] += 1 
            elif l[3] in ('06',): self.val['wait'] += 1 
            elif l[3] in ('04', '05', '07', '08', '0B',): self.val['close'] += 1

从程序中看到,dstat将11种tcp状态分了5类做了下合并显示出来.

 

 

© 著作权归作者所有

共有 人打赏支持
tinyhare
粉丝 6
博文 19
码字总数 18465
作品 0
东城
运维
私信 提问
Linux-netstat命令小结

netstat命令在面试以及日常开发使用中都会经常出现,所以特地小结一波;首先要知道Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 ,连接,多播成员等等。 常见参数:...

sssssuuuuu666
03/16
0
0
linux下netstat --timers / -o详解及keepalive相关

在linux查看网络连接数或者网络状态,我一般用netstat或者lsof这两种,netstat的话有个时间计时功能,里面涉及到不少tcp/ip协议的知识,今天就来说一说我理解的netstat计时功能。 netstat -a...

在下郑小明
06/26
0
0
从Linux协议栈代码和RFC看西厢计划原理

终于搞定了西厢计划的方案,由于一直无法下载那个内核模块,于是也就只能自己写了,在理解了西厢计划的原理之后,写这个模块并不很费事(其实为了简单不是写模块,而是直接修改内核协议栈代码...

晨曦之光
2012/04/10
363
0
TCP三次握手/四次挥手

TCP 三次握手 TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:...

长平狐
2013/01/06
84
0
ip_conntrack 记录说明

我们先来看看怎样阅读/proc/net/ip_conntrack里的conntrack记录。这些记录表示的是当前被跟踪的连接。如果安装了ip_conntrack模块,cat /proc/net/ip_conntrack 的显示类似: tcp 6 117 SYN_...

红薯
2011/05/23
332
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 压缩解压通用工具包 ZIP TAR GZ

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.i......

MrPei
6分钟前
1
0
Java Generator

以前我以为只有Python才会有generator,看来当时的我才年轻,后来认真研读《Thinking in Java》之后大有感悟,原来Java亦有generator,故做一次记录分享。过程中主要通过具体代码展示笔记简单...

编程SHA
7分钟前
1
0
阿里数据库的极致弹性之路

阿里妹导读:数据库从IOE(IBM小机、Oracle商业DB、EMC存储)一路走来,大家都知道数据库是资源重依赖的软件,对服务器的三大件CPU、内存、磁盘几乎都有要求。数据库作为广泛使用的数据存储系...

阿里云官方博客
8分钟前
1
0
另一个应用时代崛起:见证PWA书写历史

iOS 上的“超级小程序”苹果在春天正式推送的 iOS 11.3 带来了不少重要更新,大家比较熟悉的就是电池管理和关闭降频功能,不过对于很多关注前端技术和 Web App 的用户应该注意到了,苹果 iO...

临江仙卜算子
10分钟前
1
0
Maven使用—拷贝Maven依赖jar包到指定目录

一、导出到默认目录 targed/dependency 从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下,执行如下命令: 1 mvn dependency:copy-dependencies 或在eclipse中,选择项目的p...

丁建祥
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部