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