利用命令查看如图服务器
能够发现确实有大量的连接处于syn-recv的状态
网络
2.syn-recv如何产生的呢并发
首先,syn-recv是tcp三次握手的中间状态,是服务端口如应用服务器端口,收到syn包并发送[syn,ack]包所处的状态,这时若是再收到ACK的包,就完成了三次握手,创建起了TCP连接
负载均衡
3.产生大量syn-recv包状态主要有两种可能:tcp
一:客户端或者请求端未能收到服务器的syn_ack包ide
二:客户端或者请求端收到服务器的syn_ack包,可是客户端没有返回服务端ack包spa
分析且如何判断这两种问题:blog
针对第一种问题:能够先从网络层次来判断问题,最简单快速的是ping检测
ci
针对第二种问题:一种多是客户端发送的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_recv状态(半开链接)直到超时。路由
4.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)。