情况:服务器程序在某一时刻,程序端口正常在运行,telnet程序的端口无法打开,但是客户端请求能正常连接;

针对出现这一系列的故障,百思不得其解,然后查日志,数据抓包,然后在处理过程中针对SYN_RECV的相关问题,分享给大家,仅供参考;

等灵异的问题处理完成,再把结果和处理的过程分享给大家;

[stock@localhost ~]$ netstat -an | grep SYN_RECV 如下是显示的一部分

tcp 0 0 222.186.14.x:8080 117.136.1.144:29326 SYN_RECV

tcp 0 0 222.186.14.x:8080 117.136.31.149:31339 SYN_RECV

tcp 0 0 222.186.14.x:8080 117.136.31.149:31403 SYN_RECV

tcp 0 0 222.186.14.x:8080 211.137.119.5:29882 SYN_RECV

tcp 0 0 222.186.14.x:8080 123.151.172.2:16151 SYN_RECV

tcp 0 0 222.186.14.x:8080 1.197.233.48:36075 SYN_RECV

tcp 0 0 222.186.14.x:8080 117.136.8.83:23834 SYN_RECV

tcp 0 0 222.186.14.x:8080 117.136.20.6:48201 SYN_RECV

tcp 0 0 222.186.14.x:8080 117.136.35.16:22842 SYN_RECV

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

ESTABLISHED 500 当前建立的连接是500个

SYN_RECV 307 SYN_RECV同步空闲字符接收到的状态,主要是为了等待第三次握手

[stock@localhost ~]$

根据以上的问题,首先我们来判断SYN_RECV是怎么产生的尼?

SYN_RCVD是TCP三次握手的中间状态,是服务端口如应用服务器端口,收到SYN包并发送[SYN,ACK]包后所处的状态。这时如果再收到ACK的包,就完成了三次握手,建立起TCP连接。

SYN_RCVD包产生的原因主要有两种可能:

第一种可能:客户端或者请求端没有收到服务器的SYN_ACK包,

第二种可能:客户端或者请求端收到服务器的SYN_ACK包,但是客户端没有返回给服务端ACK;

分析且如何切如何判断这两种问题:

针对第一种问题:客户端或者请求端无法收到服务器端发送过来的syn ack数据包,第一种基本可以简单的判断,可以判断网络是否通畅,是否网络有安全设置,如最简单的是使用ping来查看;

针对第二种问题:这种问题少文有点复杂,一种是服务端发送的ACK客户端拒绝接受,比如SYN Flood类型的DOS/DDOS攻击;还有一种可能是,客户端或者请求端收到的SYN,ACK包不合法,一般的SYN包目的服务地址和应答的SYN,ACK包的源地址不同。如果在这种情况下只配置了DNAT而不进行SNAT的服务网络环境下容易出现,主要是由于inbound(SYN包)和outbound([SYN,ACK]包)的包穿越了不同的网关/防火墙/负载均衡器,从而导致[SYN,ACK]路由到互联网的源地址(一般是防火墙的出口地址)与SYN包的目的地址(服务的虚拟IP)不同,这时客户机无法将SYN包和[SYN,ACK]包关联在一起,从而会认为已发出的SYN包还没有被应答,于是继续等待应答包。这样服务器端的连接一直保持在SYN_RCVD状态(半开连接)直到超时。

附:TCP的三次握手,四次端口

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

TCP的四次断开:

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

原文链接:http://www.rsyslog.net/archives/164

正常情况下,出现SYN_SENT的state应该很少,并且短暂

如果一个连接长时间处在SYN_SENT,有可能是没连上,比如端口没有打开

如果发现有很多SYN_SENT出现,那一般有这么几种情况

一是你要访问的网站不存在或线路不好

二是用扫描软件扫描一个网段的机器,也会出出现很多SYN_SENT,另外就是可能中了病毒了,例如中了"冲击波",病毒发作时会扫描其它机器,这样会有很多SYN_SENT出现。

如何制造一个长时间处于SYN_SENT状态的socket?长时间的定义是超过3秒吧, 至少有时间能开个终端,用netstat看一下

比如A发送SYN_SENT给B,假如B是一台电脑,那么在B的防火墙里把TCP相关的端口deny掉。A进入SYN_SENT状态后得不到应答,就会进入RTO状态,在该状态指数退避的后期重传周期可能长达十数秒,应该足够你观测了。

iptables -D INPUT --protocol tcp --sport 22 --tcp-flags ALL SYN,ACK -j DROP

telnet 127.0.0.1 22

通过这样的方式,就可以制造出SYN_SENT状态的socket了。

syn_sent mysql_服务器上出现大量的SYN_RECV或者SYN_SENT状态的TCP连接的问题分析相关推荐

  1. 【案例分析】Linux和Windows在TCP数据包上的差异+网闸兼容问题引发的TCP连接失败故障分析

    1.前言 出于项目保密原因,本文所提及的IP地址并非真实IP地址,其余技术细节均与案例实际环境相同,供学习交流参考. 2.案例背景 我们前段时间接到项目现场工程师电话,对方称他们新上架了一台Linux ...

  2. 服务器上线运行正常但不能上网,网线是好的,插笔记本正常上网,插在服务器上却不能上网的解决方法...

    身为一名资深IT人士(呵呵,请允许我臭美一下下~~),在从事IT工作的运维过程中难免遇到一些棘手的问题.奇葩的问题,到底有多奇葩呢,有时会让你意想不到. 比如说,我今天就再次遇到了以前遇到过的奇葩问题 ...

  3. java 获取服务器上文件,java获取远程服务器上的文件

    java获取远程服务器上的文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei J ...

  4. 读取远程服务器上文件内容,读取远程服务器上的文件

    读取远程服务器上的文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JDK 8 ...

  5. 渗透基础——从Exchange服务器上搜索和导出邮件

    0x00 前言 在渗透测试中,如果我们获得了Exchange服务器的管理权限,下一步就需要对Exchange服务器的邮件进行搜索和导出,本文将要介绍常用的两种方法,开源4个powershell脚本,分 ...

  6. 从服务器上复制文件是出错,对Windows Server文件拷贝错误的排错 | 挨踢茶馆

    有的时候向Windows Server共享拷贝大文件会出现错误.Performance Monitor或者PowerShell命令可以帮助你找到并且修复这些文件拷贝的错误. Server Messag ...

  7. 阿里云服务器上的linux系统开放端口

    阿里云服务器上的linux系统开放端口 防火墙状态查看 开放端口 重启防火墙 查看已开放的端口 阿里云服务器开放安全组 防火墙状态查看 firewall-cmd --state running表示防火 ...

  8. 83998 连接服务器出错_服务端 TCP 连接的 TIME_WAIT 问题分析与解决

    民工哥技术之路 写在开头,大概 4 年前,听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题,但是当时没有去细琢磨:最近又听人说起,是一个新手进行压测过程中,遇到的问题,因此,花点时 ...

  9. go tcp连接_在Go中构建并发TCP服务器样例

    开发一个并发TCP服务器,只使用大约65行Go代码生成随机数. 本文是Mihalis Tsoukalos的Go系列的一部分.阅读第1部分:在Go中创建随机安全密码. TCP和UDP服务器无处不在,通过 ...

  10. 下面是以十六进制格式存储的一个 UDP 首部:~~~TCP连接使用1000字节的窗口值,而上一次的确认号是22001~~那么下一个报文段的序号是否就是 x + 1 呢?在本题中列出的 8 种情况下,画

    5-10 试说明运输层中伪首部的作用 用于计算运输层数据报校验和 5-11 某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报.既然都是数据报,可否跳过UDP而直接 ...

最新文章

  1. 解决vnc灰屏,黑屏,鼠标大黑叉情况
  2. 全差分放大器——共模的意义
  3. java解码p7b证书文件,通过OpenSSL解码X509证书文件
  4. merge into ORA-30926
  5. 阶级斗争的作用_21世纪的阶级斗争
  6. eclipse如何显示行数
  7. java中的泛型(一)
  8. 她很忙怎么关心_老公工作忙怎么关心 抓好三个时间点
  9. VMware密钥激活
  10. AB Micro800编程环境CCW安装
  11. 元宇宙不是 PPT:已经发展到这个地步了
  12. 计算机控制技术实验平台,信号与系统•控制理论及计算机控制技术实验平台
  13. cnpm install Error: EACCES: permission denied
  14. C51语言检测电平变化,单片机引脚上的电平变化
  15. 3.22续上篇详细版本的参数保存方法(使用用户自定义Application来保存全局参数)
  16. 大话主流分布式文件系统!
  17. 电脑卡顿反应慢怎么处理?电脑提速,4个方法!
  18. python easydict 简单使用
  19. int a是神么意思
  20. 程序设计思维月模拟题2-CSP201609-3 炉石传说

热门文章

  1. 狂神说Redis学习笔记
  2. 华东师范大学计算机与电子科技大学比较,报录比
  3. 计算机获取图像的设备有,多媒体计算机获取图像的方法有:使用数码相机、______、数码摄像机、数码摄像头、视频捕捉卡,以及直接在计算机上...
  4. 生活中的十大心理学现象
  5. 23种设计模式之策略模式——小鸭子的故事
  6. 简简单单几行Python代码就能暴力破解网站登录密码,真有这么强吗?
  7. Mac安装移动硬盘win10系统
  8. 我在华为外包一年的经历分享。
  9. 包邮送5本!新书推荐:MLOps实践――机器学习从开发到生产
  10. 腾讯云Ubuntu我的配置