linux系统 TCP NON_ESTABLISHED 如何排查
时间: 2023-11-03 22:06:43 浏览: 212
1. 使用netstat命令查看当前TCP连接状态,包括非建立状态的连接:
```
netstat -ant | grep -i "non_established"
```
2. 使用tcpdump命令捕获网络数据包,分析数据包中的TCP头部信息,查看非建立状态的连接是否存在异常:
```
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != (tcp-syn|tcp-ack)' -nn
```
3. 使用strace命令跟踪进程的系统调用,查看进程在建立TCP连接时是否存在异常:
```
strace -e connect,accept,recvfrom,sendto -p <PID>
```
4. 使用lsof命令查看当前打开的文件和网络连接,查看是否存在异常的TCP连接:
```
lsof -iTCP -n -P | grep -i "non_established"
```
5. 使用iptables命令查看当前的防火墙规则,查看是否存在防火墙拦截了非建立状态的TCP连接:
```
iptables -L -n -v
```
相关问题
linux系统查看连接数
### 查看当前 TCP 连接数
为了在 Linux 系统中查看当前的 TCP 连接数,可以使用多种方法。以下是几种常用的方法:
#### 方法一:使用 `netstat` 命令
可以通过执行如下命令来统计不同状态下的 TCP 连接数目:
```bash
netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a,S[a]}'
```
这条命令会输出各个状态下(例如 ESTABLISHED, TIME_WAIT 等)的连接计数[^3]。
#### 方法二:利用 `ss` 工具
对于较新的 Linux 发行版,推荐使用更高效的 `ss` 命令替代 `netstat` 来获取同样的信息:
```bash
ss -s
```
这将给出一个关于套接字使用的概览报告,其中包括总的 TCP 和 UDP 的连接情况以及其他有用的信息。
如果只想得到特定类型的连接数量,则可采用下面的方式:
```bash
ss -tnlp | wc -l
```
此命令返回监听中的 TCP 端口总数;而要计算所有活动的非监听态 (non-listening state) 的 TCP 连接,可以用:
```bash
ss -tan | grep -v LISTEN | wc -l
```
#### 方法三:通过 `/proc/net/tcp*` 文件读取
另一种方式是从系统的 procfs 中直接读取数据文件的内容来进行分析:
```bash
cat /proc/net/tcp | wc -l
```
注意这里的结果可能比实际值多1因为包含了表头行。因此有时需要减去这个偏移量获得精确数值。
以上就是一些常用的查询 Linux 下 TCP 当前连接数目的手段。每种方法都有各自的优点,在不同的场景下可以选择最适合的一种或组合起来使用以满足需求。
阅读全文
相关推荐


















