netstat与ss指令都是用来查看网络连接相关的,我们逐个介绍,希望日后工作中能够有所帮助。
一、netstat
1、netstat:默认展示所有的socket连接。稍后介绍相关信息的含义。
2、netstat -r:展示内核的路由表信息,基本用不到
# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default ip-10-0-9-1.cn- 0.0.0.0 UG 0 0 0 eth0 10.0.9.0 * 255.255.255.0 U 0 0 0 eth0 instance-data.c * 255.255.255.255 UH 0 0 0 eth0
3、netstat -s:展示所有网络连接的统计信息
#netstat -s ... Tcp: 16191169 active connections openings 10934749 passive connection openings 3346431 failed connection attempts 10319 connection resets received 19 connections established 88563173741 segments received 29491875182 segments send out 7005211 segments retransmited 14121 bad segments received. 1540388 resets sent ...
4、netstat -n:可选参数,使用数字的地址而不是host名称。
# netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 10.0.9.187:10050 10.0.2.200:21883 TIME_WAIT tcp 0 0 10.0.9.187:10050 10.0.2.200:50356 TIME_WAIT tcp 0 0 10.0.9.187:39730 10.4.4.246:80 ESTABLISHED tcp 0 0 10.0.9.187:10050 10.0.2.200:11943 TIME_WAIT tcp 0 0 10.0.9.187:10050 10.0.2.200:9444 TIME_WAIT
5、netstat -p:可选参数,展示PID信息。
# netstat -ntp Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 10.0.9.187:10050 10.0.2.200:13726 TIME_WAIT - tcp 0 0 10.0.9.187:39730 10.4.4.246:80 ESTABLISHED 27995/falcon-agent tcp 0 0 10.0.9.187:10050 10.0.2.200:58501 TIME_WAIT - tcp 0 0 10.0.9.187:10050 10.0.2.200:63373 TIME_WAIT - tcp 0 0 10.0.9.187:10050 10.0.2.200:34973 TIME_WAIT - tcp 0 0 10.0.9.187:10050 10.0.2.200:40180 TIME_WAIT - tcp 0 0 10.0.9.187:22 10.0.1.200:28820 ESTABLISHED 40671/sshd
6、netstat -l:可选参数,只展示处于“listening”状态的连接,通常用于判断ServerSocket服务是否正常。比较遗憾的是,对于其他“state”类型没有单独的可选参数。
# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3173/sshd tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 3416/zabbix_agentd tcp 0 0 :::8080 :::* LISTEN 5903/java tcp 0 0 :::22 :::* LISTEN 3173/sshd tcp 0 0 :::29433 :::* LISTEN 37507/java tcp 0 0 :::10050 :::* LISTEN 3416/zabbix_agentd tcp 0 0 :::45379 :::* LISTEN 37507/java tcp 0 0 :::1988 :::* LISTEN 27995/falcon-agent tcp 0 0 :::5445 :::* LISTEN 37507/java
7、netstat -a:可选参数,展示listening和non-listening状态的所有sockets。默认就是“-a”。比如“netstat -ntp”与“netstat -antp”一样。
如果我们希望获取某个外部地址的所有TCP连接、或者“ESTABLISHED”状态的连接,我们可以结合grep:"netstat -antp | grep '10.0.1.33' | grep 'ESTABLISHED' "等等。
字段值描述:
1)Recv-Q:接收队列,此socket上(已到达本地buffer)尚未进程接收的字节数。此值通常0,或者极少数情况短暂非0,如果持续大于0,则表示连接的处理进程处理效率较低或者出现瓶颈或者BUG;这种情况通常发生在集中式网络代理服务组件上,比如nginx、网关服务等,并发较高时易出现问题。有时候“拒绝服务”攻击也可能导致此问题(denial-of-service)。
2)Send-Q:发送队列,此socket上等待发送的字节数。此值通常为0,或者极少数情况短暂非0;如果此值持续大于0,则表示可能远端接收和处理能力不足、或者网络带宽受限,我们可以通过此值判断导致连接IO延迟较高的原因。究竟是处理能力不足还是带宽受限,我们可以在两端同时检测,如果远端Recv-Q很高则极大可能是处理能力不足,如果远端Recv-Q为0 可以初步判断网络带宽不足。
3)State:连接状态,TCP/UDP等各种协议有所不同。“LISTEN”表示侦听状态,等待accept新的连接(需要指定-l可选参数是才打印);“ESTABLISHED”已建立连接;“TIME_WAIT”等待关闭的连接;“CLOSE_WAIT”远端已关闭则正在等待关闭确认;“CLOSED”已关闭。贴上经典的TCP连接状态迁移图:
我们都知道,只要尚未关闭(非CLOSED)状态的连接均会占用一个FD,系统所能支持的FD个数数有限的(ulimit),达到阈值则不能再继续创建新的连接。“ESTABLISHED”和“CLOSED”两种状态我们没有必要干预;其中“TIME_WAIT”和“CLOSE_WAIT”两种中间状态,通常在服务器上出现较多,特别是HTTP类型的服务,这两种状态都潜在表示连接已不可用,但是却无法及时销毁,占用了很多的FD。比如nginx或者网关系统上,出现大量的上述状态的连接。
TIME_WAIT是连接的一端主动关闭连接(调用close(),FIN_WAIT1)时收到远端FIN响应之后处于的一种状态,此状态将会保持2MSL(默认为 2 * 60秒)时长后有操作系统自动回收并将连接设置为CLOSED状态。在此期间,SOCKET端口将一直无法释放;大家都知道,对于TCP、HTTP连接的Client端,总是占用一个本地端口,一个机器上所能支持的端口总数是有限制的(65535),所以并发的请求Server虽然你调用了close方法,但是系统级别这些连接仍然没有物理释放,当超过阈值时就无法再发送新的连接请求了,这也是我们常遇到的“不能创建连接”的问题,不过空闲一段时候后又可以继续请求。之所有TIME_WAIT(和CLOSE_WAIT)这个状态,主要是考虑哪些尚未发出或者已发出尚未达到的数据包能够良好的被处理(忽略但不会在网络层出错)。我们的解决问题的出发点,就是如何降低MSL的时长:
## 打开时间戳控制,此值为1时reuse、recycle才会生效,此处为关闭 net.ipv4.tcp_timestamps = 0 ## 开启TCP TW状态socket回收,默认开启 ## 有文章表示此值需要关闭,在多级NAT网络时,同一个源IP可能会是 ## NAT后的很多机器,这些机器的timstamp递增性无法保证,服务器会拒绝非底层请求的连接。 ##(除非都开启timestamp)或者负载均衡与WEB之间没有NAT组件 net.ipv4.tcp_tw_recycle = 1 ## tw状态是否可以被重用TCP底层协议栈支持可重用。 net.ipv4.tcp_tw_reuse = 1 ## timeout时间,MSL时长 net.ipv4.tcp_fin_timeout = 12 ## TW状态的连接数超过此值将会被清理,默认值是20000 net.ipv4.tcp_max_tw_buckets = 20000
由此可见,TIME_WAIT状态的连接过多,会有一定的影响,但是本身并不是什么过错,因为这是TCP机制的一种策略。
CLOSE_WAIT是反应在远端的一种连接状态,处于CLOSE_WAIT状态的连接通常应该不会很多,Socket接收到FIN尚未发送自己的FIN之前处于这种状态。出现大量CLOSE_WAIT的原因,通常是本地SOCKET未能良好处理连接异常错误导致。比如Socket中已经没有数据可以接收(-1)或者已经出错的情况下仍然未执行close操作导致,主要是代码异常,我们需要慎重排查。原则上,SOCKET通信(包括HTTP)在网络数据读取结束(-1)或者有IO异常时应该总是调用相应的CLOSE方法。
private String process(HttpUriRequest request) throws Exception { CloseableHttpResponse response = null; try { response = httpClient.execute(request); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode != 200) { request.abort(); throw new RuntimeException("HttpClient error, status=" + statusCode + ",message:" + statusLine.getReasonPhrase()); } HttpEntity entity = response.getEntity(); String result = null; if (entity != null) { result = EntityUtils.toString(entity, charset); } EntityUtils.consume(entity); return result; } finally { if (response != null) { response.close(); } } }
二、ss指令
ss指令很有用,跟netstat差不多,我们有时候可以综合使用这两个指令,各取所好吧。
1、ss -a :展示所有socket,基本同“netstat -a”。
2、ss -l:展示所有listen状态的socket,基本同“netstat -l”。
3、ss -o:额外展示Timer信息,基本同“netstat -o”。
4、ss -p:额外展示进程id,基本同“netstat -p”。
5、ss -4:展示IPV4的socket。
6、ss -6:展示IPV6的socket。
7、ss -t:展示TCP的socket,同“netstat -t”;-u表示udp。
8、ss -s:展示统计信息,比较有用,相对于netstat需要综合其他管道才能计算结果。
# ss -s Total: 321 (kernel 1224) TCP: 85 (estab 27, closed 48, orphaned 0, synrecv 0, timewait 48/0), ports 0 Transport Total IP IPv6 * 1224 - - RAW 0 0 0 UDP 4 4 0 TCP 37 20 17 INET 41 24 17 FRAG 0 0 0
参考:
1、https://cloud.tencent.com/developer/article/1004354
2、https://linux.die.net/man/8/netstat
3、https://ieevee.com/tech/2017/07/19/tcp-tw-recycle.html
4、http://blog.51cto.com/benpaozhe/1767612
5、http://blog.51cto.com/cangzihu/1888622
6、https://blog.csdn.net/libaineu2004/article/details/78886182
7、http://man.linuxde.net/ss
8、https://www.cnblogs.com/sunxucool/p/3449068.html
相关推荐
11. 网络配置与管理:介绍了网络基础设置,包括ifconfig、route、netstat、ss等网络相关命令。 12. 系统服务与启动:讲解了chkconfig、update-rc.d等服务管理命令,以及系统启动流程。 13. Linux发行版与核心版本...
6. **网络与网络服务**:如`ping`测试网络连通性,`ifconfig`查看网络接口信息,`netstat`显示网络连接状态,`ss`更现代的网络连接查看工具。 7. **系统信息与性能监控**:`top`和`htop`实时查看系统资源使用情况,...
在较新版本的Linux中,也可以用`ss`命令代替`netstat`,例如`ss -tuln | grep 8080`。 除了这些基础命令,还有更多Linux命令值得学习,如文件和目录操作的`cd`, `ls`, `mkdir`, `rm`, `cp`, `mv`;文件内容查看和...
- `ss`:更现代的替代netstat,提供更详细的网络连接信息。 - `top`/`htop`:实时监控系统资源使用情况。 - `ps`:报告当前系统中进程的状态。 - `df`/`du`:查看磁盘空间使用情况。 4. **包管理和更新**: - ...
Linux命令行界面是通过输入指令与系统交互的方式,每个命令都有其特定的功能。例如,`ls`用于列出目录内容,`cd`用于切换目录,`pwd`显示当前工作目录,`touch`创建新文件,`rm`删除文件或目录,`mkdir`创建新目录...
这些只是网络命令行工具的一小部分,实际上还有很多其他命令和工具,如**arp**、**iptables**、**ntpq**、**ss**等,它们各自针对不同的网络需求。掌握这些命令的使用不仅能提高工作效率,还能增强对网络运行机制的...
5. **网络和网络服务**:`ifconfig`(配置网络接口)、`ping`(测试网络连通性)、`netstat`(查看网络状态)以及`ss`(更现代的替代netstat的工具)。对于嵌入式系统,了解如何配置网络接口和检查网络服务状态至关...
- **网络指令**:掌握常用的网络诊断工具,如`ping`, `traceroute`, `netstat`, `ss`, `tcpdump`等。 - **网络协议**:理解HTTP、FTP、SMTP、POP3等协议的工作原理及其应用场景。 - **DNS解析**:了解DNS工作流程,...
Linux系统提供强大的网络管理工具,如`ifconfig`(查看或配置网络接口)、`ping`(检查网络连接)、`netstat`(查看网络状态)和`ss`(替代netstat的现代工具)。此外,`iptables`用于防火墙规则设置,`ssh`实现安全...
- 使用 `netstat -tuln` 或 `ss -tuln` 命令查看端口占用情况,确认目标端口未被其他程序占用。 3. **权限调整:** - 如果需要绑定 80 或 443 端口,则需要以 root 用户身份运行 Nginx。 #### 七、SSL/TLS 相关...
它是一个强大的工具,允许用户通过简单的文本指令与操作系统进行交互,执行各种任务,而无需图形化界面。这篇博文“linux command”可能详细介绍了Linux命令行的使用方法和常见命令。 Linux命令主要分为以下几大...
- **端口号查看**:使用 `netstat -tuln` 或 `ss -tuln` 来查看端口占用情况。 这些基本命令是 Linux 系统管理员日常工作中经常使用的工具和技术,掌握它们对于管理和维护 Linux 系统至关重要。
### Shell命令大全知识点详解 #### 一、线上查询及帮助命令 ...以上是根据“shell命令大全”这一主题总结的详细知识点,覆盖了从基础命令到高级命令的各个方面,希望对学习和使用Shell命令有所帮助。
在安装完成后,可以直接启动NTP服务器使用 `/etc/init.d/ntpd start` 命令,并使用 `netstat –tunlp` 命令查看状态。 NTP服务器的配置 NTP服务器的配置文件位于 `/etc/ntp.conf`,其中包含了NTP服务器的各种配置...
### DOS环境下关机快捷命令与相关操作指令详解 #### 标题解读: - **标题**:“windows.txt”:从这个标题来看,文档主要关注的是Windows系统下的内容。 #### 描述解读: - **描述**:“dos环境下快捷 命令...