运维工程师必备:请收好 Linux 网络命令集锦


点击「阅读原文」查看良许原创精品视频。
点击「阅读原文」查看良许原创精品视频。
nio的普及,ck10k的问题已经成为过去式。现在随便一台服务器,就可以支持数十万级别的连接了。那么我们来算一下,100万的连接需要多少资源。查看当前系统的连接
netstat结合awk进行统计。如下脚本,统计了每一种状态的tcp连接数量# netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'LISTEN 41CLOSE_WAIT 24ESTABLISHED 150Foreign 1TIME_WAIT 92
netstat => ss。# ss -sTotal: 191 (kernel 220)TCP: 5056 (estab 42, closed 5000, orphaned 3, synrecv 0, timewait 5000/0), ports 3469...
netstat属于net-tools工具集,而ss属于iproute。其命令对应如下,是时候和 net-tools 说 Bye 了。ss命令
基本使用
我们按照使用场景来看下ss的用法。
查看系统正在监听的tcp连接
ss -atrss -atn #仅ip
查看系统中所有连接
ss -alt
查看监听444端口的进程 pid
ss -ltp | grep 444查看进程555占用了哪些端口
ss -ltp | grep 555
显示所有 UDP 连接
ss -u -a
查看TCP sockets,使用-ta选项
查看UDP sockets,使用-ua选项
查看RAW sockets,使用-wa选项
查看UNIX sockets,使用-xa选项
和某个 IP 的所有连接
ss dst 10.66.224.130ss dst 10.66.224.130:httpss dst 10.66.224.130:smtpss dst 10.66.224.130:443
显示所有的 HTTP 连接
ss dport = :http
查看连接本机最多的前 10 个 IP 地址
netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c | sort -n -k1 -r | head -n 10
Recv-Q 和 Send-Q
注意ss的执行结果,我们说明一下Recv-Q和Send-Q。

LISTEN 状态
Recv-Q:代表建立的连接还有多少没有被accept,比如Nginx接受新连接变的很慢
Send-Q:代表listen backlog值
ESTAB 状态
Recv-Q:内核中的数据还有多少(bytes)没有被应用程序读取,发生了一定程度的阻塞
Send-Q:代表内核中发送队列里还有多少(bytes)数据没有收到ack,对端的接收处理能力不强
查看网络流量
查看流量
sar -n DEV 1即可每秒刷新一次网络流量。
watch cat /proc/net/dev
查看占流量最大的 IP

抓包
tcpdump
tcpdump -i eth0 -nn -s0 -v port 80
-i指定网卡进行抓包-n和ss一样,表示不解析域名-nn两个n表示端口也是数字,否则解析成服务名-s设置抓包长度,0表示不限制-v抓包时显示详细输出,-vv、-vvv依次更加详细
1)加入-A选项将打印 ascii ,-X打印 hex 码。
tcpdump -A -s0 port 802)抓取特定 IP 的相关包
tcpdump -i eth0 host 10.10.1.1tcpdump -i eth0 dst 10.10.1.20
3)-w参数将抓取的包写入到某个文件中
tcpdump -i eth0 -s0 -w test.pcap
4)tcpdump支持表达式,还有更加复杂的例子,比如抓取系统中的get,post请求(非https)
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
更多参见
https://hackertarget.com/tcpdump-examples/
抓取的数据,使用 wireshark 查看即可。

HTTP 抓包
Burpsuite (跨平台)
Fiddle2 (Win)
Charles (Mac)
流量复制
你可能需要使你的生产环境HTTP真实流量在开发环境或者预演环境重现,这样就用到了流量复制功能。
有三个工具可供选择,个人倾向于Gor。
Gor
TCPReplay
TCPCopy
连接数过多问题

TIME_WAIT
__ratelimit: 2170 callbacks suppressedTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflow
通过ss -s命令查看,可以看到timewait已经有2w个了。
ss -sTotal: 174 (kernel 199)TCP: 20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785
# 修改阈值net.ipv4.tcp_max_tw_buckets = 50000# 表示开启TCP连接中TIME-WAIT sockets的快速回收net.ipv4.tcp_tw_reuse = 1#启用timewait 快速回收。这个一定要开启,默认是关闭的。net.ipv4.tcp_tw_recycle= 1# 修改系統默认的TIMEOUT时间,默认是60snet.ipv4.tcp_fin_timeout = 10
测试参数的话,可以使用 sysctl -w net.ipv4.tcp_tw_reuse = 1 这样的命令。如果是写入进文件的,则使用sysctl -p生效。
CLOSE_WAIT
CLOSE_WAIT一般是由于对端主动关闭,而我方没有正确处理的原因引起的。说白了,就是程序写的有问题,属于危害比较大的一种。
我们拿”csdn 谐音太郎”遇到的一个典型案例来说明。

abort()。其他常用命令
应用软件
# 断点续传下载文件wget -c $url# 下载整站wget -r -p -np -k $url# 发送网络连接(常用)curl -XGET $url# 传输文件scpsftp# 数据镜像备份rsync
检测工具
# 连通性检测ping google.com# 到对端路由检测tracepath google.com# 域名检测dig google.comnslookup google.com# 网络扫描工具nmap# 压力测试iperf# 全方位监控工具(好东西)nmon
配置工具
# 停止某个网卡ifdown# 开启某个网卡ifup# 多功能管理工具ethtool
压力测试
wrkabwebbenchhttp_load
多功能工具
# 远程登录telnetsshnc# 防火墙iptables -L
结尾
推荐阅读:
想自己搭建服务器,永久运行网站?一个U盘大小的树莓派就够了!
5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「1024」,即可免费获取!!
