您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Linux中如何進(jìn)行網(wǎng)絡(luò)性能分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux中如何進(jìn)行網(wǎng)絡(luò)性能分析”這篇文章吧。
比較寬泛地講,網(wǎng)絡(luò)方向的性能分析既包括主機(jī)測的網(wǎng)絡(luò)配置查看、監(jiān)控,又包括網(wǎng)絡(luò)鏈路上的包轉(zhuǎn)發(fā)時延、吞吐量、帶寬等指標(biāo)分析。包括但不限于以下分析工具:
ping:測試網(wǎng)絡(luò)連通性
ifconfig:接口配置
ip:網(wǎng)絡(luò)接口統(tǒng)計信息
netsat:多種網(wǎng)絡(luò)棧和接口統(tǒng)計信息
ifstat:接口網(wǎng)絡(luò)流量監(jiān)控工具
netcat:快速構(gòu)建網(wǎng)絡(luò)連接
tcpdump:抓包工具
sar:統(tǒng)計信息歷史
traceroute:測試網(wǎng)絡(luò)路由
pathchar:確定網(wǎng)絡(luò)路徑特征
dtrace:TCP/IP 棧跟蹤
iperf / netperf / netserver:網(wǎng)絡(luò)性能測試工具
perf 性能分析神器
本文先來看前面 7 個。
ping
ping 發(fā)送 ICMP echo 數(shù)據(jù)包來探測網(wǎng)絡(luò)的連通性,除了能直觀地看出網(wǎng)絡(luò)的連通狀況外,還能獲得本次連接的往返時間(RTT 時間),丟包情況,以及訪問的域名所對應(yīng)的 IP 地址(使用 DNS 域名解析),比如:
我們 ping baidu.com,-c 參數(shù)指定發(fā)包數(shù)。可以看到,解析到了 baidu 的一臺服務(wù)器 IP 地址為 220.181.112.244。RTT 時間的平均和算術(shù)平均差分別是 40.732ms、40.762ms、40.791ms 和 0.248。
ifconfig
ifconfig 命令被用于配置和顯示 Linux 內(nèi)核中網(wǎng)絡(luò)接口的統(tǒng)計信息。通過這些統(tǒng)計信息,我們也能夠進(jìn)行一定的網(wǎng)絡(luò)性能調(diào)優(yōu)。
1)ifconfig 顯示網(wǎng)絡(luò)接口配置信息
其中,RX/TX packets 是對接收/發(fā)送數(shù)據(jù)包的情況統(tǒng)計,包括錯誤的包,丟掉多少包等。RX/TX bytes 是接收/發(fā)送數(shù)據(jù)字節(jié)數(shù)統(tǒng)計。其余還有很多參數(shù),就不一一述說了,性能調(diào)優(yōu)時可以重點關(guān)注 MTU 和 txqueuelen(發(fā)送隊列長度),比如可以用下面的命令來對這兩個參數(shù)進(jìn)行微調(diào):
ifconfig eth0 txqueuelen 2000 ifconfig eth0 mtu 1500
2)網(wǎng)絡(luò)接口地址配置
ifconfig 還常用來配置網(wǎng)口的地址,比如:
為網(wǎng)卡配置和刪除IPv6地址:
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #為網(wǎng)卡eth0配置IPv6地址 ifconfig eth0 del 33ffe:3240:800:1005::2/64 #為網(wǎng)卡eth0刪除IPv6地址
修改MAC地址:
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
配置IP地址:
ifconfig eth0 192.168.2.10 ifconfig eth0 192.168.2.10 netmask 255.255.255.0 ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
IP
ip 命令用來顯示或設(shè)置 Linux 主機(jī)的網(wǎng)絡(luò)接口、路由、網(wǎng)絡(luò)設(shè)備、策略路由和隧道等信息,是 Linux 下功能強(qiáng)大的網(wǎng)絡(luò)配置工具,旨在替代 ifconfig 命令,如下顯示 IP 命令的強(qiáng)大之處,功能涵蓋到 ifconfig、netstat、route 三個命令。
netstat
netstat 可以查看整個 Linux 系統(tǒng)關(guān)于網(wǎng)絡(luò)的情況,是一個集多鐘網(wǎng)絡(luò)工具于一身的組合工具。
常用的選項包括以下幾個:
默認(rèn):列出連接的套接字
-a:列出所有套接字的信息
-s:各種網(wǎng)絡(luò)協(xié)議棧統(tǒng)計信息
-i:網(wǎng)絡(luò)接口信息
-r:列出路由表
-l:僅列出有在 Listen 的服務(wù)狀態(tài)
-p:顯示 PID 和進(jìn)程名稱
各參數(shù)組合使用實例如下:
netstat -at 列出所有 TCP 端口
netstat -au 列出所有 UDP 端口
netstat -lt 列出所有監(jiān)聽 TCP 端口的 socket
netstat -lu 列出所有監(jiān)聽 UDP 端口的 socket
netstat -lx 列出所有監(jiān)聽 UNIX 端口的 socket
netstat -ap | grep ssh 找出程序運行的端口
netstat -an | grep ':80' 找出運行在指定端口的進(jìn)程
1)netstat 默認(rèn)顯示連接的套接字?jǐn)?shù)據(jù)
整體上來看,輸出結(jié)果包括兩個部分:
Active Internet connections :有源 TCP 連接,其中 Recv-Q 和 Send-Q 指的是接收隊列和發(fā)送隊列,這些數(shù)字一般都是 0,如果不是,說明請求包和回包正在隊列中堆積。
Active UNIX domain sockets:有源 UNIX 域套接口,其中 proto 顯示連接使用的協(xié)議,RefCnt 表示連接到本套接口上的進(jìn)程號,Types 是套接口的類型,State 是套接口當(dāng)前的狀態(tài),Path 是連接到套接口的進(jìn)程使用的路徑名。
2)netstat -i 顯示網(wǎng)絡(luò)接口信息
接口信息包括網(wǎng)絡(luò)接口名稱(Iface)、MTU,以及一系列接收(RX-)和傳輸(TX-)的指標(biāo)。其中 OK 表示傳輸成功的包,ERR 是錯誤包,DRP 是丟包,OVR 是超限包。
這些參數(shù)有助于我們對網(wǎng)絡(luò)收包情況進(jìn)行分析,從而判斷瓶頸所在。
3)netstat -s 顯示所有網(wǎng)絡(luò)協(xié)議棧的信息
可以看到,這條命令能夠顯示每個協(xié)議詳細(xì)的信息,這有助于我們針對協(xié)議棧進(jìn)行更細(xì)粒度的分析。
4)netstat -r 顯示路由表信息
這條命令能夠看到主機(jī)路由表的一個情況。當(dāng)然查路由我們也可以用 ip route 和 route 命令,這個命令顯示的信息會更詳細(xì)一些。
ifstat
ifstat 主要用來監(jiān)測主機(jī)網(wǎng)口的網(wǎng)絡(luò)流量,常用的選項包括:
-a:監(jiān)測主機(jī)所有網(wǎng)口
-i:指定要監(jiān)測的網(wǎng)口
-t:在每行輸出信息前加上時間戳
-b:以 Kbit/s 顯示流量數(shù)據(jù),而不是默認(rèn)的 KB/s
-delay:采樣間隔(單位是 s),即每隔 delay 的時間輸出一次統(tǒng)計信息
-count:采樣次數(shù),即共輸出 count 次統(tǒng)計信息
比如,通過以下命令統(tǒng)計主機(jī)所有網(wǎng)口某一段時間內(nèi)的流量數(shù)據(jù):
可以看出,分別統(tǒng)計了三個網(wǎng)口的流量數(shù)據(jù),前面輸出的時間戳,有助于我們統(tǒng)計一段時間內(nèi)各網(wǎng)口總的輸入、輸出流量。
netcat
netcat,簡稱 nc,命令簡單,但功能強(qiáng)大,在排查網(wǎng)絡(luò)故障時非常有用。
它主要被用來構(gòu)建網(wǎng)絡(luò)連接??梢砸钥蛻舳撕头?wù)端的方式運行,當(dāng)以服務(wù)端方式運行時,它負(fù)責(zé)監(jiān)聽某個端口并接受客戶端的連接,因此可以用它來調(diào)試客戶端程序;當(dāng)以客戶端方式運行時,它負(fù)責(zé)向服務(wù)端發(fā)起連接并收發(fā)數(shù)據(jù),因此也可以用它來調(diào)試服務(wù)端程序,此時它有點像 Telnet 程序。
常用的選項包括以下幾種:
-l:以服務(wù)端的方式運行,監(jiān)聽指定的端口。默認(rèn)是以客戶端的方式運行。
-k:重復(fù)接受并處理某個端口上的所有連接,必須與 -l 一起使用。
-n:使用 IP 地址表示主機(jī),而不是主機(jī)名,使用數(shù)字表示端口號,而不是服務(wù)名稱。
-p:當(dāng)以客戶端運行時,指定端口號。
-s:設(shè)置本地主機(jī)發(fā)出的數(shù)據(jù)包的 IP 地址。
-C:將 CR 和 LF 兩個字符作為結(jié)束符。
-U:使用 UNIX 本地域套接字通信。
-u:使用 UDP 協(xié)議通信,默認(rèn)使用的是 TCP 協(xié)議。
-w:如果 nc 客戶端在指定的時間內(nèi)未檢測到任何輸入,則退出。
-X:當(dāng) nc 客戶端與代理服務(wù)器通信時,該選項指定它們之間的通信協(xié)議,目前支持的代理協(xié)議包括 “4”(SOCKS v.4),“5”(SOCKS v.5)和 “connect” (HTTPs Proxy),默認(rèn)使用 SOCKS v.5。
-x:指定目標(biāo)代理服務(wù)器的 IP 地址和端口號。
下面舉一個簡單的例子,使用 nc 命令發(fā)送消息:
首先,啟動服務(wù)端,用 nc -l 0.0.0.0 12345 監(jiān)聽端口 12345 上的所有連接。
然后,啟動客戶端,用 nc -p 1234 127.0.0.1 12345 使用 1234 端口連接服務(wù)器 127.0.0.1::12345。
接著就可以在兩端互發(fā)數(shù)據(jù)了。這里只是拋磚引玉,更多例子大家可以多實踐。
tcpdump
tcpdump是一個強(qiáng)大的網(wǎng)絡(luò)抓包工具。雖然有 wireshark 這樣更易使用的圖形化抓包工具,但 tcpdump 仍然是網(wǎng)絡(luò)排錯的必備利器。
tcpdump 選項很多,我就不一一列舉了,大家可以看文章末尾的引用來進(jìn)一步了解。這里列舉幾種 tcpdump 常用的用法。
1)捕獲某主機(jī)的數(shù)據(jù)包
比如想要捕獲主機(jī) 200.200.200.100 上所有收到和發(fā)出的所有數(shù)據(jù)包,使用:
tcpdump host 200.200.200.100
2)捕獲多個主機(jī)的數(shù)據(jù)包
比如要捕獲主機(jī) 200.200.200.1 和主機(jī) 200.200.200.2 或 200.200.200.3 的通信,使用:
tcpdump host 200.200.200.1 and (200.200.200.2 or )
同樣要捕獲主機(jī) 200.200.200.1 除了和主機(jī) 200.200.200.2 之外所有主機(jī)通信的 IP 包。使用:
tcpdump ip host 200.200.200.1 and ! 200.200.200.2
3)捕獲某主機(jī)接收或發(fā)出的某種協(xié)議類型的包
比如要捕獲主機(jī) 200.200.200.1 接收或發(fā)出的 Telnet 包,使用:
tcpdump tcp port 23 host 200.200.200.1
4)捕獲某端口相關(guān)的數(shù)據(jù)包
比如捕獲在端口 6666 上通過的包,使用:
tcpdump port 6666
5)捕獲某網(wǎng)口的數(shù)據(jù)包
比如捕獲在網(wǎng)口 eth0 上通過的包,使用:
tcpdump -i eth0
以上是“Linux中如何進(jìn)行網(wǎng)絡(luò)性能分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。