作為一名運維工程師,日常工作中最令人頭疼的莫過于各種網絡故障。在過去一年半的運維生涯中,我積累了豐富的網絡故障排查經驗,今天就來和大家分享一下如何運用抓包工具(Wireshark、tcpdump)和網絡排查工具(nc、lotop、telnet、ping、ss、nslookup)來解決實際問題。
一、項目背景:那些年,我們一起追過的網絡故障
在運維的日常任務中,網絡故障可謂五花八門:應用層報錯、鏈路延遲、丟包,甚至部分服務不可達。記得有一次,用戶反饋網站訪問異常,我通過抓包工具發現數據包在防火墻出口處被丟棄,而另一邊的 TCP 握手數據包顯示連接一直處于半開狀態。經過一番排查,最終確定問題出在防火墻策略更新后端口映射配置遺漏。從那以后,我便開始深入研究各類抓包和網絡診斷工具,并在實際工作中不斷總結經驗。
二、抓包工具的應用:Wireshark 與 tcpdump 的實戰
2.1 案例一:tcpdump 捕捉異常連接,揪出網絡丟包元兇
在一次故障排查中,某個業務服務器無法與后端數據庫建立穩定連接,我懷疑是網絡層丟包導致。于是,我在服務器上使用 tcpdump 進行抓包,命令如下:
[root@server ~]# tcpdump -i eth0 -nn -s 0 -w capture.pcap
其中,-i eth0
指定網卡接口,-nn
禁止將 IP 地址和端口號解析成域名和服務名,-s 0
抓取整個數據包,-w capture.pcap
將抓包結果保存到文件。
抓包完成后,我在 Wireshark 中打開 capture.pcap 文件,利用過濾器 tcp.port==3306
(假設數據庫使用 3306 端口),發現明顯的 TCP 重傳和連接中斷情況。進一步檢查防火墻日志,果然有部分數據包被丟棄。
小結:利用 tcpdump 抓包后再結合 Wireshark 進行詳細分析,是定位網絡問題的高效方法。tcpdump 命令簡單靈活,可以快速捕獲網絡數據,而 Wireshark 的圖形化界面則能讓故障原因一目了然。
2.2 案例二:Wireshark 剖析 HTTP 異常,解決負載均衡配置問題
公司某業務接口返回異常,初步懷疑是中間網絡設備引起的數據包重組問題。我在業務服務器上直接抓包,用 Wireshark 分析 HTTP 協議報文,發現有少量 HTTP 請求重復發送,且響應時間異常高。經過深入分析,原來是上游負載均衡配置不當,導致部分請求重復轉發。調整配置后,問題順利解決。
小結:Wireshark 提供了強大的協議解析能力,能幫助我們直觀定位問題,并給出修改建議。
三、網絡排查工具的應用:多工具協同作戰,精準定位故障
在抓包之外,我們常用一些網絡排查工具來進一步確認問題,下面分別介紹 nc、lotop、telnet、ping、ss、nslookup 的基本用法和真實案例。
3.1 Netcat (nc):萬能網絡工具,測試端口連通性的利器
基本用法: Netcat 是一個萬能的網絡工具,可以用于測試端口連通性、傳輸文件等。常用參數:
-
-z
:僅掃描指定端口,無數據傳輸 -
-v
:顯示詳細輸出
案例:測試服務端口是否開放 有次排查中懷疑某服務端口不通,我使用如下命令:
[root@server ~]# nc -zv 192.168.1.100 8080
Connection to 192.168.1.100 8080 port [tcp/*] succeeded!
成功的提示讓我確認該服務端口是開放的,再進一步排查應用層問題。
3.2 Lotop:實時監控網絡流量,揪出異常流量元兇
基本用法: Lotop 是一款實時監控網絡流量的工具(類似 iftop、nethogs),可以直觀顯示各進程的流量情況。啟動后可實時監控網絡帶寬占用。
案例:排查異常流量 有次服務器突然網絡帶寬異常占滿,我使用 lotop 后發現某個進程持續占用大量流量,經調查是異常日志采集腳本循環上傳錯誤數據。及時停止進程后,網絡恢復正常。
[root@server ~]# lotop
-- 實時流量監控啟動 --
PID Process TX(KB/s) RX(KB/s)
1234 log_uploader 1200 300
5678 nginx 50 80
...
3.3 Telnet:簡單直接的 TCP 連接測試工具
基本用法: Telnet 常用于測試 TCP 連接,簡單直接:
telnet 192.168.1.100 22
如果能成功連接,則端口開放。
案例:驗證遠程 SSH 可用性 在一次遠程維護中,我需要確認目標服務器 SSH 服務是否正常。執行如下命令:
[root@server ~]# telnet 192.168.1.105 22
Trying 192.168.1.105...
Connected to 192.168.1.105.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
顯示 SSH 協議版本后,說明服務正常。
3.4 Ping:檢測目標主機連通性,觀察延遲情況
基本用法: Ping 用于檢測目標主機是否連通,同時可觀察延遲情況:
ping -c 4 8.8.8.8
-c
指定發送次數。
案例:判斷網絡延遲 某次用戶反饋訪問外部服務延遲較高,我通過 ping 命令發現丟包率達 30%,經排查發現上游鏈路存在問題。此時我及時通知了網絡供應商。
[root@server ~]# ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=25.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=30.1 ms
...
3.5 SS:高效顯示網絡連接信息,檢查異常連接狀態
基本用法: ss 工具用于顯示網絡連接信息,比 netstat 更高效。常用參數:
-
-t
:顯示 TCP 連接 -
-u
:顯示 UDP 連接 -
-l
:僅顯示監聽狀態 -
-n
:不解析服務名
案例:檢查異常的連接狀態 一次出現 TCP 連接堆積問題時,我使用如下命令查看當前連接狀態:
[root@server ~]# ss -tunl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 100 0.0.0.0:22 0.0.0.0:*
...
通過查看,我發現有大量異常連接堆積在某個端口上,經進一步確認是應用層沒有及時關閉連接,調整后問題解決。
3.6 Nslookup:DNS 查詢,測試域名解析是否正常
基本用法: Nslookup 用于 DNS 查詢,可以測試域名解析是否正常:
nslookup www.example.com
案例:域名解析錯誤 有次內部服務無法通過域名訪問,我通過 nslookup 檢查后發現 DNS 服務器返回的 IP 地址不正確。經過檢查 DNS 配置后,更正后問題得到解決。
[root@server ~]# nslookup www.example.com
Server: 192.168.1.2
Address: 192.168.1.2#53Non-authoritative answer:
Name: www.example.com
Address: 93.184.216.34
四、故障排查中的問題與思考:經驗總結,讓運維更高效
在一年半的運維實踐中,最常遇到的難題往往是故障定位不準確。通過使用上述工具,我總結了幾點經驗:
-
多工具互補:抓包工具適合數據層細查,而 telnet、ping 等工具則快速驗證網絡連通性;ss 和 nc 可以進一步驗證端口和進程狀態。結合使用能更快定位問題。
-
日志與數據包同步:在排查過程中,總要和系統日志、應用日志相結合,確認是否存在策略更新、應用異常等因素。
-
學習與積累:每次故障處理后,我都會總結經驗,建立一份常見故障及處理方案的文檔,以便快速響應類似問題。這不僅提高了解決問題的效率,也讓我對網絡協議和各工具的使用有了更深的理解。
五、總結:掌握工具,提升團隊響應速度與解決能力
本文結合真實案例,從抓包工具(Wireshark、tcpdump)和網絡排查工具(nc、lotop、telnet、ping、ss、nslookup)的角度,分享了如何在日常運維工作中排查網絡問題。作為一名一年半經驗的運維工程師,親身經歷的案例讓我深刻體會到,熟練掌握這些工具不僅能幫助我們快速定位問題,還能提升整個團隊的響應速度和解決能力。
希望這篇文章能對大家在遇到網絡問題時提供一些思路和幫助,也歡迎大家留言討論更多實際案例和心得體會。