nux下netstat --timers / -o详解及keepalive相关

第一列,一般有一下几种状态;

keepalive - #表示是keepalive的时间计时

on - #表示是重发(retransmission)的时间计时

off - #表示没有时间计时

timewait - #表示等待(timewait)时间计时

第二列,

(576.47/0/0) -> (a/b/c)

a - #计时时间值(当第一列为keepalive的时候,a代表keepalive计时时间;当第一列为on的时候,a代表重发(retransmission)的时间计时;当第一列为timewait的时候,a代表等待(timewait)的时间计时)

b - #已经产生的重发(retransmission)次数

c - #keepalive已经发送的探测(probe)包的次数

注:

1、keepalive的最大时间值跟tcp_keepalive_time的值有关系,tcp_keepalive_time的值,linux默认为7200秒,即2小时,代表的意思为:建立连接后,如果7200秒内连接没有任何数据交互传输,那么服务器将发送探测(probe)包。这里的探测(probe)包也相当于心跳一样。

2、探测(probe)包的相关内核参数跟tcp_keepalive_intvl和tcp_keepalive_probes有关系,tcp_keepalive_probes代表总共发送探测(probe)包的个数(默认为9个),tcp_keepalive_intvl代表发送一个探测(probe)包后,多少秒没有收到回复,则再发送个探测(probe)包,也代表了之前发送的探测(probe)包超时失效(默认为75秒)。再所有的探测(probe)包都发完之后还是没收到回应,那么服务器会主动端口这个连接(长连接)。所以一般如果第二列的c为0的话,a的范围在0 ~ 7200之间,7200为tcp_keepalive_time的值,比如keepalive (178.06/0/0);如果c不为0,但是不可能大于tcp_keepalive_probes的值的,那么a的范围在0 ~ 75, 75为tcp_keepalive_intvl的值。比如keepalive (18.06/0/2)。

3、这里再说一下keepalive的工作原理

若在一个给定连接上,7200秒之内无任何活动,服务器便向客户端发送一个探测段。(我们将在下面的例子中看到探测段的样子。)客户端主机必须是下列四种状态之一:

1) 客户端主机依旧活跃(up)运行,并且从服务器可到达。从客户端TCP的正常响应,服务器知道对方仍然活跃。服务器的TCP为接下来的两小时复位存活定时器,如果在这两个小时到期之前,连接上发生应用程序的通信,则定时器重新为往下的两小时复位,并且接着交换数据。

2) 客户端已经崩溃,或者已经关闭(down),或者正在重启过程中。在这两种情况下,它的TCP都不会响应。服务器没有收到对其发出探测的响应,并且在75秒之后超时。服务器将总共发送10个这样的探测,每个探测75秒。如果没有收到一个响应,它就认为客户端主机已经关闭并终止连接。

3) 客户端曾经崩溃,但已经重启。这种情况下,服务器将会收到对其存活探测的响应,但该响应是一个复位,从而引起服务器对连接的终止。

4) 客户端主机活跃运行,但从服务器不可到达。这与状态2类似,因为TCP无法区别它们两个。它所能表明的仅是未收到对其探测的回复。

4、等待(timewait)时间计时,第二列的a值,最大为60,这里说一下为什么为60,这里存在一个MSL(Maximum Segment Lifetime)的概念,tcp如果在time_wait状态下,会保持两倍MSL的时间值,然后连接才会断开,当然存在time_wait这种状态的话,那么肯定是主动关闭tcp连接那一方,这个如果了解tcp的四次握手概念就知道是为啥了。RFC793定义了MSL为2分钟,Linux设置成了30s,所以linux系统上,time_wait的值最大为60s。所以第一列为timewait时,第二列只有a有值,b、c都为0,比如

timewait (48.32/0/0)。

5、如果State列为CLOSE_WAIT状态是,Timer列多为off (0.00/0/0),这又是为何,因为CLOSE_WAIT的是属于被动关闭那一方,这个是没有超时(timeout)设置的,所以也就不用计时了。CLOSE_WAIT除非你杀进程,CLOSE_WAIT是不会自动消失的。一个CLOSE_WAIT会维持至少2个小时的时间。当然不消失意味着占着资源呢,这里就是占着FD。

6、第一列为on的情况,第二列一般的a,b是有值的,代表重发时间计时和重发的次数,比如on (3.93/4/0),但是也有可能第二列的c也有值,比如:on (2.28/5/2),这种情况,一般都是从keepalive状态转化为on的状态的,而且在on的状态下,第二列的c的值是不会变的,因为c代表着是keepalive的已经发送的探测(probe)包的次数。

netstat -anop|more 查看网络队列的更多相关文章

  1. netstat 和 lsof 查看网络状态

    netstat和lsof都是linux下的工具,可以用于查看系统的网络状态. netstat netstat可以打印 网络连接,路由表,接口统计数据,还有多播和masquerade连接相关的东西(不熟 ...

  2. Linux下用netstat查看网络状态、端口状态(转)

    转:http://blog.csdn.net/guodongdongnumber1/article/details/11383019 在linux一般使用netstat 来查看系统端口使用情况步.  ...

  3. 在Linux下用netstat查看网络状态、端口状态

    在Linux下用netstat查看网络状态.端口状态 在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实 ...

  4. Linux下用netstat查看网络状态、端口状态

    在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的 netstat命 ...

  5. linux查看网络链接状况命令netstat

    linux查看网络链接状况命令 netstat 参数如下: -a 显示所有socket,包括正在监听的. -c 每隔1秒就重新显示一遍,直到用户中断它. -i 显示所有网络接口的信息,格式同“ifco ...

  6. Linux使用netstat查看网络状态

    查看本机的网络状态.使用netstat查看网络状态.显示系统端口使用情况.UDP类型的端口.TCP类型的端口.只显示所有监听端口.只显示所有监听tcp端口. 命令使用举例 命令 说明 netstat ...

  7. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

  8. iostat iotop 查看硬盘的读写、 free 查看内存的命令 、netstat 命令查看网络、tcpdump 命令

    iostat 命令 查看硬盘的使用情况: iostat iostat -x iotop 命令: 若没安装先安装: yum install iotop -y free 命令,用于查看内存的使用量: fr ...

  9. FreeBSD查看网络情况

    FreeBSD查看网络情况 记录一下FreeBSD下常用的统计当前系统网络连接状态的一些命令: 1)统计80端口连接数 netstat -nat|grep -i "80"|wc - ...

随机推荐

  1. win10激活方法 windows 10 最简单的激活方法

      1.首先,要用管理员权限打开cmd命令行窗口,可以搜索框中输入“cmd”,在出现的“命令行提示符”,图标上右击“以管理员身份运行”.   2.为了让其它激活工具的密钥清除,先卸载密钥,在命令行输入 ...

  2. 【shell】sed后向引用替换文本

    要求如下: 原文 <server name="92服" port="10092" os="android" hidden=" ...

  3. CSP-S2019游记&拆塔记

    不是拆广州塔 Day -inf 四套NOI模拟降智 Day0 拆了一发新新 本来想复习小圆脸结果拆了3h最后还没带任意门 没有帘子可还行 第一天由于没发现被子可以抽出来就没睡好 Day1 8:30开考 ...

  4. Codecombat 游戏攻略(计算机科学三)2

    第33关 逻辑之路 判断secretB 非真,走上面:否则,走下面(这里面要先自己进行逻辑判断)if…else语句或者这样用(不用自己进行判断) // 如果 secretB 非真,走上面:否则,走下面 ...

  5. luogu P1181 数列分段Section I x

    P1181 数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出 ...

  6. 【技术分享:python 应用之一】如何使用 Python 对 Excel 做一份数据透视表

    客户这边,其中有一张如同上图所示的数据汇总表,然而需求是,需要将这张表数据做一个数据透视表,最后通过数据透视表中的数据,填写至系统数据库.拿到需求,首先就想到肯定不能直接用设计器去操作 Excel,通 ...

  7. Java数据结构之排序---选择排序

    简单选择排序的介绍: 从给定的序列中,按照指定的规则选出某一个元素,再根据规定交换位置后达到有序的目的. 简单选择排序的基本思想: 假定我们的数组为int [] arr = new int[n],第一 ...

  8. http中post 和 get 请求方法区别

    前言 做Web开发就一定会涉及到浏览器和服务器的交互,所以了解浏览器和服务器交互的方式就尤为重要.从接触B/S开始就已经接触到了get和post,但是对它们的了解确实不深入.在后来不断的做项目过程中, ...

  9. 程序员心髓:移动应用API设计10大技巧

    移动App与基于Web/云服务发生对话是很常见的事情,最简单的可能仅仅只是检索数据,但也可能包含发送数据.用户授权和管理.而这也就验证了为移动应用建立API的重要性,为此,我们特总结了10大移动API ...

  10. substring()方法是如何工作

    1.substring()方法做了什么? substring(beginIndex,endIndex)方法返回一个从beginIndex到endIndex-1的字符串 String x = " ...