博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
替代netstat ss ip
阅读量:4159 次
发布时间:2019-05-26

本文共 4786 字,大约阅读时间需要 15 分钟。

from: 

什么是netstat?

如果你手头有Linux系统,你直接输入man netstat,就可以得到帮助信息。man对于netstat的解释非常言简意赅,只有一句简短的描述:

“netstat – Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships”

中文意思是:netstat可以用来显示网络连接、路由表、接口统计、伪连接和组播成员。

从这段简短的描述中,我们可以看出,netstat有如上五大作用。

为什么要和netstat说再见?

如果你仔细阅读man netstat的内容,会发现有这样一句话:

“This program is obsolete.”

原来netstat已经是明日黄花了,官方已经不再更新了。它已经被ss命令和ip命令所取代,或许在不久的将来在Linux发行版中就将见不到netstat的身影了。所以,如果还有人在用netstat,你要建议他使用ss和ip。

具体的替代方案,我做了一张简单的示意图:

接下来的文章,就会为大家带来ss命令和ip命令了。

【作者粗心大意?】

ss命令是一个用来查看socket信息的命令,通过man ss可以看到,这是由一位俄罗斯人编写的工具,作者的名字显示是Alexey Kuznetosv

但是,当我google这个名字,或者根据去查看,都发现他的名字本应是Alexey Kuznetsov,区别在于最后的tsov或者tosv。

因为没有学过俄语,所以不知道俄语里是不是本身就允许这样颠倒字母顺序,但是我还是发了封email用英语提醒了一下他,看看是不是因为Alexey粗心大意,连自己的名字都写错了。

如果tsov和tosv是的确是同一个人的话,那么我搜索到的这位便是ss的作者了:

Alexey目前已经不负责ss命令的维护更新,而是在专注于Linux Kernel QoS方面的工作。

【十秒认识ss】

ss是Socket Statistics的缩写。

顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

【和netstat说再见的原因】

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。

天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比netstat要快。)

【用数据说话】

为了让你更坚决的和netstat说再见,列举一些测试数据,以便证明ss的确名不虚传。

当服务器维持3万个socket连接,Admin需要计算具体的连接数量时,不同情况的耗时如下:

netstat -at | wc  耗时 15.60 秒ss -atr     | wc  耗时  5.40 秒(未利用tcp_diag)ss -atr     | wc  耗时  0.47 秒(利用tcp_diag)

【好马配上好鞍】

几乎所有的Linux系统都会默认包含netstat命令,但并非所有系统都会默认包含ss命令。netstat命令是net-tools工具集中的一员:

#rpm -q net-toolsnet-tools-1.60-109.el6.i686

而ss命令是iproute工具集中的一员:

#rpm -qf /usr/sbin/ssiproute-2.6.32-17.el6.i686#rpm -q iprouteiproute-2.6.32-17.el6.i686

如果你无法使用ss命令,那么可能是缺少了iproute,需要安装一下:

yum install iproute iproute-doc

【前浪net-tools和后浪iproute】

net-tools是一套标准的Unix网络工具,用于配置网络接口、设置路由表信息、管理ARP表、显示和统计各类网络信息等等,但是遗憾的是,这个工具自2001年起便不再更新和维护了。

长江后浪推荐前浪。

即将隆重登场的便是iproute,这是一套可以支持IPv4/IPv6网络的用于管理TCP/UDP/IP网络的工具集,这套工具由负责维护和升级,目前的大版本号是2。我们来认识一下Stephen:

从某种意义上说,iproute工具集几乎可以替代掉net-tools工具集,具体的替代方案是这样的:

用途 net-tool(被淘汰) iproute2
地址和链路配置 ifconfig ip addr, ip link
路由表 route ip route
邻居 arp ip neigh
VLAN vconfig ip link
隧道 iptunnel ip tunnel
组播 ipmaddr ip maddr
统计 netstat ss

【版本和帮助】

想获得ss命令的帮助信息和版本信息,都非常简单,你应该可以猜到的:

#ss -h //获得帮助信息,直接man ss会更全面#ss -V //取得版本号,-v也支持ss utility, iproute2-ss091226

【ss选项统计】

ss的选项既不多也不复杂,除去非功能性选项(-h/-v)外,ss共有22个选项。

每一个选项都是既支持短选项(如-s),也支持长选项(如–summary)。

我们不会在这里一一介绍,因为这样既枯燥又乏味,而且不出三分钟,你就会昏昏欲睡了。所以,我们会从实际需求和实际问题出发,这样效果会好些。

【场景一:我想查看当前服务器的网络连接统计】

$ ss -sTotal: 295 (kernel 312)TCP:   48 (estab 1, closed 31, orphaned 0, synrecv 0, timewait 0/0), ports 13Transport Total     IP        IPv6*         312       -         -RAW       0         0         0UDP       2         2         0TCP       17        12        5INET      19        14        5FRAG      0         0         0

在服务器产生大量sockets连接时,我们会使用这个命令在做宏观统计。

【场景二:我想查看所有打开的网络端口】

$ ss -lRecv-Q Send-Q           Local Address:Port               Peer Address:Port0      128                         :::webcache                      :::*0      128                         :::http                         :::*0      128                         :::snapenetio                      :::*0      128                          *:snapenetio                       *:*0      50                           *:8531                          *:*0      9                           :::ftp                          :::*0      9                            *:ftp                           *:*0      128                          *:ddi-tcp-1                       *:*0      100                        ::1:smtp                         :::*0      100                  127.0.0.1:smtp                          *:*0      128                          *:8541                          *:*0      128                  127.0.0.1:entextxid                       *:*0      50                           *:12421                         *:*0      10                           *:amqp                          *:*0      128                          *:12521                         *:*0      50                           *:mysql                         *:*

如果使用-pl参数的话,则会列出具体的程序名称。你会在输出中看到类似于这样的内容:

("nginx",15786,6)

从中可以知道,某个socket连接是属于nginx程序的,nginx程序的PID是15786。

【场景三:我想查看这台服务器上所有的socket连接】

很简单,直接使用-a选项即可列出所有网络连接。

#ss -a

如果只想查看TCP sockets,那么使用-ta选项;

如果只想查看UDP sockets,那么使用-ua选项;
如果只想查看RAW sockets,那么使用-wa选项;
如果只想查看UNIX sockets,那么使用-xa选项。

【参考文献】

1 http://en.wikipedia.org/wiki/Iproute2

2 http://en.wikipedia.org/wiki/Netstat
3 http://www.cyberciti.biz/files/ss.html
4 http://it.toolbox.com/blogs/locutus/what-is-this-ss-program-thingy-14083
5 http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
6 http://www.policyrouting.org/iproute2.doc.html

转载地址:http://hubxi.baihongyu.com/

你可能感兴趣的文章
checkio-house password
查看>>
checkio-moore neighbourhood
查看>>
checkio-the most wanted letter
查看>>
Redis可视化工具
查看>>
大牛手把手带你!2021新一波程序员跳槽季,全套教学资料
查看>>
Guava Collections API学习之AbstractMapBasedMultimap
查看>>
jQuery1.9(动画效果)学习之——.queue()
查看>>
HTML5学习之——概念篇
查看>>
HTML5学习之——HTML 5 视频
查看>>
HTML5学习之——HTML 5 Video + DOM
查看>>
HTML5学习之——HTML 5 音频
查看>>
HTML5学习之——HTML 5 拖放
查看>>
HTML5学习之——HTML 5 Canvas vs. SVG
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 Web Workers
查看>>
HTML5学习之——HTML 5 Canvas
查看>>
HTML5学习之——HTML5 内联 SVG
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 形状学习之——SVG 矩形<rect>
查看>>