运维工程师必备:请收好 Linux 网络命令集锦
共 4767字,需浏览 10分钟
·
2020-08-04 19:22
点击「阅读原文」查看良许原创精品视频。
点击「阅读原文」查看良许原创精品视频。
nio
的普及,ck10k
的问题已经成为过去式。现在随便一台服务器,就可以支持数十万级别的连接了。那么我们来算一下,100万的连接需要多少资源。查看当前系统的连接
netstat
结合awk
进行统计。如下脚本,统计了每一种状态的tcp连接数量# netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'
LISTEN 41
CLOSE_WAIT 24
ESTABLISHED 150
Foreign 1
TIME_WAIT 92
netstat => ss
。# ss -s
Total: 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 -atr
ss -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.130
ss dst 10.66.224.130:http
ss dst 10.66.224.130:smtp
ss 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 80
2)抓取特定 IP 的相关包
tcpdump -i eth0 host 10.10.1.1
tcpdump -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 suppressed
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
通过ss -s命令查看,可以看到timewait已经有2w个了。
ss -s
Total: 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时间,默认是60s
net.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
# 传输文件
scp
sftp
# 数据镜像备份
rsync
检测工具
# 连通性检测
ping google.com
# 到对端路由检测
tracepath google.com
# 域名检测
dig google.com
nslookup google.com
# 网络扫描工具
nmap
# 压力测试
iperf
# 全方位监控工具(好东西)
nmon
配置工具
# 停止某个网卡
ifdown
# 开启某个网卡
ifup
# 多功能管理工具
ethtool
压力测试
wrk
ab
webbench
http_load
多功能工具
# 远程登录
telnet
ssh
nc
# 防火墙
iptables -L
结尾
推荐阅读:
想自己搭建服务器,永久运行网站?一个U盘大小的树莓派就够了!
5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「1024」,即可免费获取!!