運(yùn)維工程師必備:請(qǐng)收好 Linux 網(wǎng)絡(luò)命令集錦


點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。
點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。
nio的普及,ck10k的問(wèn)題已經(jīng)成為過(guò)去式?,F(xiàn)在隨便一臺(tái)服務(wù)器,就可以支持?jǐn)?shù)十萬(wàn)級(jí)別的連接了。那么我們來(lái)算一下,100萬(wàn)的連接需要多少資源。查看當(dāng)前系統(tǒng)的連接
netstat結(jié)合awk進(jìn)行統(tǒng)計(jì)。如下腳本,統(tǒng)計(jì)了每一種狀態(tài)的tcp連接數(shù)量# 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。其命令對(duì)應(yīng)如下,是時(shí)候和 net-tools 說(shuō) Bye 了。ss命令
基本使用
我們按照使用場(chǎng)景來(lái)看下ss的用法。
查看系統(tǒng)正在監(jiān)聽的tcp連接
ss -atrss -atn #僅ip
查看系統(tǒng)中所有連接
ss -alt
查看監(jiān)聽444端口的進(jìn)程 pid
ss -ltp | grep 444查看進(jìn)程555占用了哪些端口
ss -ltp | grep 555
顯示所有 UDP 連接
ss -u -a
查看TCP sockets,使用-ta選項(xiàng)
查看UDP sockets,使用-ua選項(xiàng)
查看RAW sockets,使用-wa選項(xiàng)
查看UNIX sockets,使用-xa選項(xiàng)
和某個(gè) 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
查看連接本機(jī)最多的前 10 個(gè) IP 地址
netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c | sort -n -k1 -r | head -n 10
Recv-Q 和 Send-Q
注意ss的執(zhí)行結(jié)果,我們說(shuō)明一下Recv-Q和Send-Q。

LISTEN 狀態(tài)
Recv-Q:代表建立的連接還有多少?zèng)]有被accept,比如Nginx接受新連接變的很慢
Send-Q:代表listen backlog值
ESTAB 狀態(tài)
Recv-Q:內(nèi)核中的數(shù)據(jù)還有多少(bytes)沒(méi)有被應(yīng)用程序讀取,發(fā)生了一定程度的阻塞
Send-Q:代表內(nèi)核中發(fā)送隊(duì)列里還有多少(bytes)數(shù)據(jù)沒(méi)有收到ack,對(duì)端的接收處理能力不強(qiáng)
查看網(wǎng)絡(luò)流量
查看流量
sar -n DEV 1即可每秒刷新一次網(wǎng)絡(luò)流量。
watch cat /proc/net/dev
查看占流量最大的 IP

抓包
tcpdump
tcpdump -i eth0 -nn -s0 -v port 80
-i指定網(wǎng)卡進(jìn)行抓包-n和ss一樣,表示不解析域名-nn兩個(gè)n表示端口也是數(shù)字,否則解析成服務(wù)名-s設(shè)置抓包長(zhǎng)度,0表示不限制-v抓包時(shí)顯示詳細(xì)輸出,-vv、-vvv依次更加詳細(xì)
1)加入-A選項(xiàng)將打印 ascii ,-X打印 hex 碼。
tcpdump -A -s0 port 802)抓取特定 IP 的相關(guān)包
tcpdump -i eth0 host 10.10.1.1tcpdump -i eth0 dst 10.10.1.20
3)-w參數(shù)將抓取的包寫入到某個(gè)文件中
tcpdump -i eth0 -s0 -w test.pcap
4)tcpdump支持表達(dá)式,還有更加復(fù)雜的例子,比如抓取系統(tǒng)中的get,post請(qǐng)求(非https)
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
更多參見
https://hackertarget.com/tcpdump-examples/
抓取的數(shù)據(jù),使用 wireshark 查看即可。

HTTP 抓包
Burpsuite (跨平臺(tái))
Fiddle2 (Win)
Charles (Mac)
流量復(fù)制
你可能需要使你的生產(chǎn)環(huán)境HTTP真實(shí)流量在開發(fā)環(huán)境或者預(yù)演環(huán)境重現(xiàn),這樣就用到了流量復(fù)制功能。
有三個(gè)工具可供選擇,個(gè)人傾向于Gor。
Gor
TCPReplay
TCPCopy
連接數(shù)過(guò)多問(wèn)題

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
通過(guò)ss -s命令查看,可以看到timewait已經(jīng)有2w個(gè)了。
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 快速回收。這個(gè)一定要開啟,默認(rèn)是關(guān)閉的。net.ipv4.tcp_tw_recycle= 1# 修改系統(tǒng)默認(rèn)的TIMEOUT時(shí)間,默認(rèn)是60snet.ipv4.tcp_fin_timeout = 10
測(cè)試參數(shù)的話,可以使用 sysctl -w net.ipv4.tcp_tw_reuse = 1 這樣的命令。如果是寫入進(jìn)文件的,則使用sysctl -p生效。
CLOSE_WAIT
CLOSE_WAIT一般是由于對(duì)端主動(dòng)關(guān)閉,而我方?jīng)]有正確處理的原因引起的。說(shuō)白了,就是程序?qū)懙挠袉?wèn)題,屬于危害比較大的一種。
我們拿”csdn 諧音太郎”遇到的一個(gè)典型案例來(lái)說(shuō)明。

abort()。其他常用命令
應(yīng)用軟件
# 斷點(diǎn)續(xù)傳下載文件wget -c $url# 下載整站wget -r -p -np -k $url# 發(fā)送網(wǎng)絡(luò)連接(常用)curl -XGET $url# 傳輸文件scpsftp# 數(shù)據(jù)鏡像備份rsync
檢測(cè)工具
# 連通性檢測(cè)ping google.com# 到對(duì)端路由檢測(cè)tracepath google.com# 域名檢測(cè)dig google.comnslookup google.com# 網(wǎng)絡(luò)掃描工具nmap# 壓力測(cè)試iperf# 全方位監(jiān)控工具(好東西)nmon
配置工具
# 停止某個(gè)網(wǎng)卡ifdown# 開啟某個(gè)網(wǎng)卡ifup# 多功能管理工具ethtool
壓力測(cè)試
wrkabwebbenchhttp_load
多功能工具
# 遠(yuǎn)程登錄telnetsshnc# 防火墻iptables -L
結(jié)尾
推薦閱讀:
想自己搭建服務(wù)器,永久運(yùn)行網(wǎng)站?一個(gè)U盤大小的樹莓派就夠了!
CPU 明明 8 個(gè)核,網(wǎng)卡為啥拼命折騰 1 號(hào)核?
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。?!
