关于netstat

简介: netstat 命令是 linux 下一个非常有用的命令,顾名思义,其作用是查询当前的网络状态。 以最常用的查询 TCP 连接状态为例 netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 总结各状态大致意义如下: CLOSED: 初始状态。

netstat 命令是 linux 下一个非常有用的命令,顾名思义,其作用是查询当前的网络状态。

以最常用的查询 TCP 连接状态为例

netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c

总结各状态大致意义如下:

CLOSED: 初始状态。
LISTEN: 服务端处于监听状态,可以接受连接。
SYN_SENT: 客户端连接并发送 SYN 报文,进入 SYN_SENT 状态,等待服务端确认。
SYN_RCVD: 服务端接受到了 SYN 报文,当收到客户端的 ACK 报文后,会进入到 ESTABLISHED 状态。
ESTABLISHED: 连接已经建立,进入数据传输状态。
FIN_WAIT_1: 建立连接后,其中一方请求终止连接,等待对方的 FIN 报文。
FIN_WAIT_2: 半连接,有一方要求关闭连接,但另外还告诉对方,我还有数据需要传输,稍后再关闭连接。
TIME_WAIT: 收到了对方的 FIN 报文,并发送出了 ACK 报文,2MSL 后即可回到 CLOSED 可用状态。
CLOSE_WAIT: 等待关闭。
CLOSING: 当发送 FIN 报文后,并未收到对方的 ACK 报文,却收到了 FIN 报文,表示双方都正在关闭连接。
LAST_ACK: 被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报文。

其中 SYN_RECV、ESTABLISHED、TIME_WAIT 是对我们比较有意义的几个状态。

SYN_RECV

表示正在等待处理的请求数。SYN_RECV 过多或居高不下,可以理解为服务器并不能及时处理所有的请求。这时要考虑进行效率优化,或增加更多的服务器;

ESTABLISHED

表示正在进行数据传输的请求数。通常与在线人数和并发相关,可以作为服务器负载能力的一项指标。

TIME_WAIT

表示处理完毕,等待超时结束的请求数。若 TIME_WAIT 过多,可调整内核参数进行优化,若仍无效,则需注意是否遭到了恶意攻击。若有大量的 SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1 等状态存在,而 ESTABLISHED 很少,则可初步判断存在 DDOS 攻击。

关于 TIME_WAIT

主动关闭的一方在发送最后一个 ACK 报文后,就会进入 TIME_WAIT 状态,停留 2MSL(max segment lifetime)。

TCP/IP 协议中如此设计,主要有两个原因:

1. 防止上一次连接中的包,迷路后重新出现,影响新连接。

经过 2MSL,上一次连接中所有的重复包都会消失。

2. 可靠的关闭 TCP 连接。

主动关闭方发送的最后一个 ACK(FIN) 报文,有可能丢失,这时被动方会重新发送 FIN 报文, 如果这时主动方处于 CLOSED 状态 ,就会响应 RST 报文而不是 ACK 报文。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用太多资源,除非受到恶意攻击。

优化 TIME_WAIT

通过调整内核参数,可以缓解 TIME_WAIT 过多的情况。首先打开配置文件:

vi /etc/sysctl.conf

修改以下配置:

# 表示开启 SYN cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭;
net.ipv4.tcp_syncookies = 1

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

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

# 修改系統默认的 TIMEOUT 时间
net.ipv4.tcp_fin_timeout = 1

然后执行以下命令让参数生效:

/sbin/sysctl -p
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
XML Java 数据格式
使用Java + Freemarker 导出word文档
使用Java + Freemarker 导出word文档
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
839 2
智慧电厂AI算法方案
|
机器学习/深度学习 人工智能 监控
AI视频监控在大型商场的智能技术方案
该方案通过目标检测与姿态识别技术(如YOLO、OpenPose),实时监控顾客行为,识别异常动作如夹带物品、藏匿商品等,并结合AI模型分析行为模式,防止偷窃。出口处设置结算验证系统,比对结算记录与视频信息,确保商品全部支付。多角度摄像头和数据交叉验证减少误报,注重隐私保护,提升安保效率,降低损失率,增强顾客信任。
984 15
解决Java中的EOFException异常的方法
解决Java中的EOFException异常的方法
1168 0
|
计算机视觉 Python
opencv 处理图像去噪的几种方法学习
OpenCV 提供了多种图像去噪的方法,以下是一些常见的去噪技术以及相应的 Python 代码示例: 均值滤波:使用像素邻域的灰度均值代替该像素的值。
561 0
|
JavaScript 前端开发 Android开发
安卓自动化 | autox.js
安卓自动化 | autox.js
2759 8
|
消息中间件 监控 Java
使用Java构建微服务架构的最佳实践
使用Java构建微服务架构的最佳实践
|
JavaScript 前端开发 API
Blazor系统教程
基于.net8的Blazor系统教程
625 6

热门文章

最新文章