本文首發於個人公衆號 CloudDeveloper(ID: cloud_dev),專一於乾貨分享,號內有大量書籍和視頻資源,後臺回覆 「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。
這是 Linux 性能分析系列的第四篇,前三篇在這裏:html
比較寬泛地講,網絡方向的性能分析既包括主機測的網絡配置查看、監控,又包括網絡鏈路上的包轉發時延、吞吐量、帶寬等指標分析。包括但不限於如下分析工具:服務器
本文先來看前面 7 個。網絡
ping 發送 ICMP echo 數據包來探測網絡的連通性,除了能直觀地看出網絡的連通情況外,還能得到本次鏈接的往返時間(RTT 時間),丟包狀況,以及訪問的域名所對應的 IP 地址(使用 DNS 域名解析),好比:dom
咱們 ping baidu.com,-c
參數指定發包數。能夠看到,解析到了 baidu 的一臺服務器 IP 地址爲 220.181.112.244。RTT 時間的最小、平均、最大和算術平均差分別是 40.732ms、40.762ms、40.791ms 和 0.248。ssh
ifconfig 命令被用於配置和顯示 Linux 內核中網絡接口的統計信息。經過這些統計信息,咱們也可以進行必定的網絡性能調優。socket
其中,RX/TX packets 是對接收/發送數據包的狀況統計,包括錯誤的包,丟掉多少包等。RX/TX bytes 是接收/發送數據字節數統計。其他還有不少參數,就不一一述說了,性能調優時能夠重點關注 MTU(最大傳輸單元) 和 txqueuelen(發送隊列長度),好比能夠用下面的命令來對這兩個參數進行微調:tcp
ifconfig eth0 txqueuelen 2000 ifconfig eth0 mtu 1500
ifconfig 還經常使用來配置網口的地址,好比:
爲網卡配置和刪除IPv6地址:
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #爲網卡eth0配置IPv6地址 ifconfig eth0 del 33ffe:3240:800:1005::2/64 #爲網卡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 命令用來顯示或設置 Linux 主機的網絡接口、路由、網絡設備、策略路由和隧道等信息,是 Linux 下功能強大的網絡配置工具,旨在替代 ifconfig 命令,以下顯示 IP 命令的強大之處,功能涵蓋到 ifconfig、netstat、route 三個命令。
netstat 能夠查看整個 Linux 系統關於網絡的狀況,是一個集多鍾網絡工具於一身的組合工具。
經常使用的選項包括如下幾個:
各參數組合使用實例以下:
總體上來看,輸出結果包括兩個部分:
接口信息包括網絡接口名稱(Iface)、MTU,以及一系列接收(RX-)和傳輸(TX-)的指標。其中 OK 表示傳輸成功的包,ERR 是錯誤包,DRP 是丟包,OVR 是超限包。
這些參數有助於咱們對網絡收包狀況進行分析,從而判斷瓶頸所在。
能夠看到,這條命令可以顯示每一個協議詳細的信息,這有助於咱們針對協議棧進行更細粒度的分析。
這條命令可以看到主機路由表的一個狀況。固然查路由咱們也能夠用 ip route 和 route 命令,這個命令顯示的信息會更詳細一些。
ifstat 主要用來監測主機網口的網絡流量,經常使用的選項包括:
好比,經過如下命令統計主機全部網口某一段時間內的流量數據:
能夠看出,分別統計了三個網口的流量數據,前面輸出的時間戳,有助於咱們統計一段時間內各網口總的輸入、輸出流量。
netcat,簡稱 nc,命令簡單,但功能強大,在排查網絡故障時很是有用,所以它也在衆多網絡工具中有着「瑞士軍刀」的美譽。
它主要被用來構建網絡鏈接。能夠以客戶端和服務端的方式運行,當以服務端方式運行時,它負責監聽某個端口並接受客戶端的鏈接,所以能夠用它來調試客戶端程序;當以客戶端方式運行時,它負責向服務端發起鏈接並收發數據,所以也能夠用它來調試服務端程序,此時它有點像 Telnet 程序。
經常使用的選項包括如下幾種:
下面舉一個簡單的例子,使用 nc 命令發送消息:
首先,啓動服務端,用 nc -l 0.0.0.0 12345
監聽端口 12345 上的全部鏈接。
而後,啓動客戶端,用 nc -p 1234 127.0.0.1 12345
使用 1234 端口鏈接服務器 127.0.0.1::12345。
接着就能夠在兩端互發數據了。這裏只是拋磚引玉,更多例子你們能夠多實踐。
最後是 tcpdump,強大的網絡抓包工具。雖然有 wireshark 這樣更易使用的圖形化抓包工具,但 tcpdump 仍然是網絡排錯的必備利器。
tcpdump 選項不少,我就不一一列舉了,你們能夠看文章末尾的引用來進一步瞭解。這裏列舉幾種 tcpdump 經常使用的用法。
好比想要捕獲主機 200.200.200.100 上全部收到和發出的全部數據包,使用:
tcpdump host 200.200.200.100
好比要捕獲主機 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
好比要捕獲主機 200.200.200.1 接收或發出的 Telnet 包,使用:
tcpdump tcp port 23 host 200.200.200.1
好比捕獲在端口 6666 上經過的包,使用:
tcpdump port 6666
好比捕獲在網口 eth0 上經過的包,使用:
tcpdump -i eth0
下面仍是舉個例子,抓取 TCP 三次握手的包:(具體抓包的過程請移步到個人公衆號進一步瞭解,那裏閱讀體驗好一點,謝謝。)
本文總結了幾種初級的網絡工具,基本的網絡性能分析,經過組合以上幾種工具,基本都能應付,但對於複雜的問題,以上工具可能就無能爲力了。更多高階的工具將在下文送上,敬請期待。
參考:
基礎 http://kuring.me/post/linux_n...
講 ip 和 ifconfig 很強大的一篇文章:
https://blog.csdn.net/freekin...
https://www.alibabacloud.com/...
性能之巔:Linux網絡性能分析工具http://www.infoq.com/cn/artic...
抓包工具tcpdump用法說明 https://www.cnblogs.com/f-ck-...
https://www.shiyanlou.com/cou...
http://linuxtools-rst.readthe...
https://www.shiyanlou.com/cou...
個人公衆號 CloudDeveloper(ID: cloud_dev),號內有大量書籍和視頻資源,後臺回覆 「1024」便可領取,分享的內容包括但不限於雲計算虛擬化、容器、OpenStack、K8S、霧計算、網絡、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術等內容,歡迎你們關注。