在Linux的日常维护过程中,会经常用到下面的命令:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

它会显示例如下面的信息:

除了ESTABLISHED,可以看到连接数比较多的几个状态是:FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECV和LAST_ACK;下面的文章就这几个状态的产生条件、对系统的影响以及处理方式进行简单描述。

TCP状态

TCP状态如下图所示:

可能有点眼花缭乱?再看看这个时序图

下面看下大家一般比较关心的三种TCP状态

SYN_RECV

服务端收到建立连接的SYN没有收到ACK包的时候处在SYN_RECV状态。有两个相关系统配置:

1,net.ipv4.tcp_synack_retries :INTEGER

默认值是5

对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。通常我们不对这个值进行修改,因为我们希望TCP连接不要因为偶尔的丢包而无法建立。

2,net.ipv4.tcp_syncookies

一般服务器都会设置net.ipv4.tcp_syncookies=1来防止SYN Flood***。假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟)。

这些处在SYNC_RECV的TCP连接称为半连接,并存储在内核的半连接队列中,在内核收到对端发送的ack包时会查找半连接队列,并将符合的requst_sock信息存储到完成三次握手的连接的队列中,然后删除此半连接。大量SYNC_RECV的TCP连接会导致半连接队列溢出,这样后续的连接建立请求会被内核直接丢弃,这就是SYN Flood***。

能够有效防范SYN Flood***的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood***的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

观测服务上SYN_RECV连接个数为:7314,对于一个高并发连接的通讯服务器,这个数字比较正常。

CLOSE_WAIT

发起TCP连接关闭的一方称为client,被动关闭的一方称为server。被动关闭的server收到FIN后,但未发出ACK的TCP状态是CLOSE_WAIT。出现这种状况一般都是由于server端代码的问题,如果你的服务器上出现大量CLOSE_WAIT,应该要考虑检查代码。

TIME_WAIT

根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态。TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒。TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。

为什么需要TIME_WAIT?TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。

和TIME_WAIT状态有关的系统参数有一般由3个,本厂设置如下:

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_fin_timeout,默认60s,减小fin_timeout,减少TIME_WAIT连接数量。

net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

linux关闭established状态,有关ESTABLISHED,CLOSE_WAIT,TIME_WAIT等连接状态相关推荐

  1. linux netstat Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

    在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告. Netstat ...

  2. wifi连接状态android,判断android设备wifi连接状态

    添加访问权限(AndroidManifest.xml文件里) Java代码(MainActivity.java文件) package com.example.androidtest; import a ...

  3. EEG微状态预测并发fMRI动态功能连接状态

    前言 静息态功能磁共振成像(rs-fMRI)测量的大脑功能连接在多个时间尺度上有所不同,并确定了循环的动态功能连接(dFC)状态.这些发现与不同的认知和病理状态有关,有可能作为疾病的生物标志物,但它们 ...

  4. 如何查看mysql连接状态_MySQL如何查看连接数与连接状态

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  5. 计算机端口 closewait,TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

  6. 详解linux netstat输出的网络连接状态信息

    本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考. 全部系列分为五篇文章,本博文为第一篇: 目录:一.生产服务器netstat tcp连接状态................... ...

  7. iptables防火墙的连接状态

    前言 在前面的文中讲过了iptables防火墙连接状态中的ESTABLISHED状态(http://waringid.blog.51cto.com/65148/512140).除了这个状态之外,ipt ...

  8. linux socket netstat 状态 LISTENING、ESTABLISHED、SYN_SENT、CLOSE_WAIT、TIME_WAIT、FIN_WAIT2 分别是什么意思?

    文章目录 LISTENING状态 ESTABLISHED状态 CLOSE_WAIT TIME_WAIT SYN_SENT状态 FIN_WAIT2状态 运行我们的hikflow_demo程序后,用net ...

  9. TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

最新文章

  1. javaScript 的小技巧
  2. c++数据结构中 顺序队列的队首队尾_数据结构 3.3 顺序队
  3. Codeforces Beta Round #9 (Div. 2 Only)【未完结】
  4. Linux centos 6.7防火墙打开MySQL 3306端口
  5. tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
  6. java socket windows linux,socket在windows下和linux下的区别
  7. 谁能给我讲讲原理——视频弹幕游戏!!
  8. 单个基因集富集分析泡泡图绘制
  9. ASP.NET Web API的Controller是如何被创建的?
  10. Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fitting行人检测ECCV2018
  11. 为什么发音要浊化(sp、st、sk)
  12. 计算机的开机键的英语,每次开机出现英文(按任意键),才能进入电脑,好烦...
  13. 五大主流浏览器及其内核简要介绍
  14. 使用aspose方式使excel,ppt,word进行在线预览。(无水印)
  15. 如何控制项目边界,与客户项目负责人结成同盟军
  16. strtok函数及其实现
  17. C# 将字符串(符合xml格式)与XML互转
  18. Service注入不进去
  19. 圆柱容器,横放计算液体体积
  20. 学习笔记(34):MATLAB基础入门课程-乘方

热门文章

  1. Qt的日常编程过程中遇见的问题和使用
  2. 项目成本计算:活动成本和资源成本
  3. 计算机无法访问计算机共享文件夹,教程分享:教您如何轻松解决计算机无法访问共享文件夹的问题!...
  4. 【亲身实践已解决】Windows无法启动MongoDB Server,错误:1053:服务没有及时响应启动或控制请求
  5. win10允许应用使用麦克风和照相机
  6. 二叉树(递归)遍历流程图怎么画?
  7. 男人最帅的42个瞬间!
  8. 【报告分享】构建直播电商全新生态闭环-浙商证券(附下载)
  9. 【设计模式六大原则】:单一职责原则-带你走梦幻西游(一)
  10. article标准用法