当前位置: 首页 > article >正文

Linux 简述基于 TCP 连接状态分析网络排障


本文提供一套系统化的 Linux 网络排障方案,重点关注 TCP 连接状态分析,结合常用网络工具和系统日志,帮助高效定位和解决网络故障。

一、 故障诊断流程

有效的网络排障需要遵循清晰的步骤:

  1. 现象描述:  准确描述故障现象,包括:发生时间、持续时间、影响范围(哪些服务受影响)、错误信息(例如应用程序报错、系统日志错误)、用户反馈等。  越详细越好,例如,是所有连接都中断,还是特定类型的连接?连接中断是突然的还是逐渐的?

  2. 信息收集: 使用以下工具收集必要信息:

  • netstat -antp: 显示所有活动的网络连接,包括进程信息。

  • netstat -s: 显示网络统计信息,例如发送和接收的数据包数量、错误数量等。

  • netstat -nat | awk '/tcp/ {print $6}' | sort | uniq -c: 统计 TCP 连接的各个状态数量。

  • ss -t -a:  更现代化的 netstat 命令,提供更详细的信息。

  • 系统日志:  /var/log/syslog/var/log/messages 等,查找与网络相关的错误信息。  关注时间戳,与故障现象进行关联。

  • 网络连接状态: 使用 netstat 命令及其各种选项,例如:

  • 套接字信息: 使用 lsof -i :<port> 命令查看指定端口的套接字状态,以及相关的进程信息。

  • 路由表: 使用 ip route showroute -n 命令查看路由表,检查路由是否正确。

  • 网络接口状态: 使用 ip addr showifconfig 命令查看网络接口状态,例如 IP 地址、子网掩码、MTU 等。

  • 网络抓包: 使用 tcpdumpWireshark 进行网络抓包,分析网络数据包,定位问题发生的位置和原因。  需要根据具体情况选择合适的过滤器,例如指定端口、协议、IP 地址等。

  1. 问题分析:  根据收集的信息,结合 TCP 连接状态,分析问题可能的原因。  例如:
  • 大量 TIME_WAIT 状态:  可能需要调整内核参数 net.ipv4.tcp_tw_reusenet.ipv4.tcp_tw_recycle (谨慎使用,尤其在 NAT 环境下)。

  • 大量 CLOSE_WAIT 状态:  表明应用程序没有正确关闭连接,需要检查应用程序代码。

  • 大量 SYN_RECV 状态:  可能受到 SYN flood 攻击。

  • 大量 SYN_SENT 状态:  可能目标服务器不可达或网络问题。

  • 连接超时 (ETIMEDOUT):  网络延迟过高或网络中断。

  • 连接重置 (ECONNRESET):  连接被对方强制关闭,可能是对方程序崩溃或网络故障。

  • 连接被拒绝 (ECONNREFUSED):  目标服务未运行或防火墙阻止连接。

  1. 解决方案实施:  根据分析结果,采取相应的解决方法。  这可能包括:
  • 重启服务:  重启网络服务、应用程序或服务器。

  • 配置调整:  修改网络配置、防火墙规则、应用程序配置等。

  • 内核参数调整:  调整内核参数,例如 tcp_tw_reusetcp_tw_recycletcp_keepalive_* 等 (需谨慎操作)。

  • 安全加固:  如果怀疑受到攻击,采取相应的安全措施,例如启用防火墙、入侵检测系统等。

  • 代码修复:  如果问题源于应用程序,则需要修复代码。

  1. 结果验证:  实施解决方案后,再次使用网络命令和日志检查,验证问题是否已解决。

  2. 文档记录:  详细记录故障现象、诊断过程、解决方案和最终结果,方便后续排查类似问题。

二、 TCP 连接状态详解

理解 TCP 连接状态对于网络排障至关重要。下表总结了常见的 TCP 连接状态及其含义:

状态说明常见问题
CLOSED初始状态,连接关闭。
LISTEN服务器监听状态,等待客户端连接。监听端口过多,资源占用过高
SYN_SENT客户端已发送 SYN 请求,等待服务器确认。网络问题,服务器不可达
SYN_RECV服务器已收到 SYN 请求,等待客户端确认。SYN flood 攻击
ESTABLISHED连接已建立,可以进行数据传输。连接假死,应用程序错误
FIN_WAIT_1客户端请求关闭连接,等待服务器确认。网络问题,服务器无响应
FIN_WAIT_2客户端已收到服务器确认,等待服务器关闭请求。网络问题,服务器无响应
CLOSE_WAIT服务器已收到客户端关闭请求,但尚未关闭连接,等待应用程序关闭连接。应用程序未正确关闭连接,资源泄漏
CLOSING双方同时尝试关闭连接。网络问题,数据包丢失
LAST_ACK服务器已发送 FIN,等待客户端确认。网络问题,客户端无响应
TIME_WAIT连接关闭,等待 2MSL 时间后完全释放资源。TIME_WAIT 连接过多,可能需要调整内核参数 (谨慎操作,尤其在 NAT 环境下)

三、  常用网络工具详解

  • netstat:  显示网络连接、路由表、接口统计、伪装信息以及多播统计信息。  -a 显示所有连接;-n 以数字形式显示地址和端口;-p 显示进程信息;-t 显示 TCP 连接;-u 显示 UDP 连接;-l 显示监听端口。

  • ss:  更现代化的工具,提供更全面的信息,并且性能更高效。  -t 显示 TCP 连接;-u 显示 UDP 连接;-l 显示监听端口;-a 显示所有连接。

  • tcpdump:  强大的网络抓包工具,可以捕获和分析网络数据包。  需要 root 权限。  可以使用各种过滤器来精确定位需要分析的数据包。

  • Wireshark:  图形化的网络分析工具,可以更直观地分析 tcpdump 抓取的 pcap 文件。

  • traceroute / traceroute6:  追踪数据包到达目标主机所经过的路由器。  traceroute6 用于 IPv6。

  • ping / ping6:  测试网络连通性,测量网络延迟和丢包率。 ping6 用于 IPv6。

  • mtr:  多功能网络诊断工具,结合了 pingtraceroutenslookup 的功能。

四、  内核参数调整 (谨慎操作)

调整内核参数可以优化 TCP 连接的管理,但需要谨慎操作,不当的调整可能导致系统不稳定。  以下是一些常用的内核参数:

  • net.ipv4.tcp_max_tw_buckets:  TIME_WAIT 套接字的最大数量。  增加此值可以减少 TIME_WAIT 连接过多导致的问题。

  • net.ipv4.tcp_tw_reuse:  允许重用 TIME_WAIT 套接字。  设置为 1 可以加快端口释放速度。

  • net.ipv4.tcp_tw_recycle:  快速回收 TIME_WAIT 套接字。  设置为 1 可以加快端口释放速度,但可能导致问题,尤其是在 NAT 环境下。

  • net.ipv4.tcp_keepalive_time:  TCP keepalive 探测的间隔时间。

  • net.ipv4.tcp_keepalive_intvl:  TCP keepalive 探测包之间的间隔时间。

  • net.ipv4.tcp_keepalive_probes:  TCP keepalive 探测的次数。

五、  案例分析

假设应用服务器出现连接中断,用户无法访问。  排障步骤:

  1. 现象描述: 用户报告无法访问应用服务器,应用程序日志显示连接错误。

  2. 信息收集:

  • 系统日志显示没有明显的网络错误。

  • netstat -antp 显示大量 CLOSE_WAIT 状态的连接。

  • 应用程序日志显示连接中断错误。

  1. 问题分析:  大量 CLOSE_WAIT 连接表明应用程序没有正确关闭连接。

  2. 解决方案实施:  检查应用程序代码,确保正确关闭连接。  重新部署应用程序。

  3. 结果验证:  重新测试,确认问题已解决。


http://www.kler.cn/news/354768.html

相关文章:

  • 【C语言】函数的声明与定义
  • Windows 和 Ubuntu通讯的网络设置
  • 无技能,学历不高?想要找一份高薪工作,通信网优肯定适合你
  • 影楼即将倒闭!!!!stable diffusion comfyui制作:AI人像摄影专业工作流
  • python string中提取中文字符处理之后插入回原string
  • 【python爬虫基础】年轻人的第一个爬虫程序
  • C++简单多状态dp:按摩师、打家劫舍II、删除并获得点数、粉刷房子
  • 2024全新UI网址发布页源码带黑夜模式
  • WebSocket介绍和入门案例
  • xavier 在tensorflow pytorch中的应用,正太分布和均匀分布的计算公式不一样
  • 串的模式匹配算法_BF算法
  • 【实战案例】SpringBoot项目中异常处理通用解决方案
  • 单片机原理与应用——嵌入式系统中的核心控制器
  • MySQL从入门到跑路
  • 干货|antd组件库Table组件开启虚拟列表的影响
  • 深度解析RLS(Recursive Least Squares)算法
  • 【Spring篇】初识之Spring的入门程序及控制反转与依赖注入
  • 如何利用被动DNS(Passive DNS)加强网络安全
  • STM32学习笔记---RTC
  • 中级注册安全工程师《安全生产法律法规》真题及详解