劉志鵬
【摘 要】隨著Internet和TCP/IP網絡的快速發展,IP業務對網絡質量的要求也越來越高。Wireshark作為一款抓包軟件,內置了很多功能強大的統計分析工具,可以很好的協助網絡工程師進行網絡分析及排查故障。本文通過列舉FTP應用案例,介紹該軟件進行TCP性能分析時的常用工具。
【關鍵詞】TCP;滑動窗口;往返時間;Wireshark
【中圖分類號】V351 【文獻標識碼】A
隨著Internet和TCP/IP網絡的快速發展,IP分組網絡大規模部署,IP業務大規模的應用,都給網絡運維帶來了新的挑戰。使用Wireshark抓取并分析傳輸鏈路中的數據報文,可以幫助運維人員更好的理解各協議的工作機制,同時其強大的統計分析功能也可以協助運維人員進行網絡分析及故障排查。
本文將結合一個FTP應用案例(傳輸層協議使用的是TCP),來介紹Wireshark抓包工具在TCP性能分析時常用的工具。
一、TCP協議概述
傳輸控制協議是一種面向連接的,可靠的傳輸層協議。首先,采用三次握手來建立TCP連接,四次握手來釋放TCP連接,保證建立的傳輸信道是可靠的。其次,TCP采用了連續ARQ協議(回退N;超時自動重傳)來保證數據傳輸的正確性,使用滑動窗口協議來保證接收方能夠及時處理所接收到的數據,進行流量控制。最后,TCP使用慢啟動、擁塞避免、快重傳和快恢復來進行擁塞控制,避免網絡擁塞。
二、FTP應用案例場景:
如圖1所示,本端是一臺Win10的筆記本電腦,裝有Wireshark,作為FTP客戶端,使用的FTP軟件為FlashFXP。遠端是一臺Linux的服務器,作為FTP服務器端。中間網絡系統可提供的帶寬為300Mbps,網絡中未進行QOS限速,使用儀表打流量測試正常。服務器端防火墻為100Mbps端口,其它端口均為1000Mbps端口。從FTP客戶端上傳1個約2GB文件到FTP服務器端,FTP軟件顯示上傳速率約為5MBps,即40Mbps。
三、使用Wireshark分析TCP性能
(一)抓取TCP數據報文
打開Wireshark抓包工具,選擇網卡來抓取收發的數據。在筆記本電腦上使用FlashFXP軟件,將文件上傳到對端FTP服務器。通過FlashFXP軟件可以查看傳輸速率,待傳輸速率穩定后,停止抓包,保存抓包文件。
(二)使用TCP過濾參數分析數據報文
Wireshark提供tcp.flags、tcp.analysis等顯示過濾參數,例如:tcp.flags.reset==1、tcp.analysis.retransmission、tcp.analysis.duplicate_ack、tcp.analysis.window_full等。可以使用這些參數來分析與TCP會話重置、TCP重傳、重復確認、窗口大小有關的TCP運作及性能問題,分別過濾后發現抓包文件中存在大量的window_full的數據包,說明TCP會話的數據發送端的發送緩存中裝滿了待確認報文,無法繼續發送數據包。
(三)使用統計工具進行分析
Wireshark提供了豐富的統計工具,比如分析TCP連接常用的IO圖表和TCP流圖形。使用這些統計工具,可以更加方便和直觀的了解TCP流的時間序列、吞吐量、往返時間RTT、窗口大小等。
使用時間序列(tcptrace)功能,如圖3所示,橫坐標表示時間,縱坐標表示序列號;上方的綠線與下方的棕線之間的差值就是接收窗口大小,接收到ACK確認報文,窗口向上移動,只有在窗口范圍之內才可以發送數據包;縮在一起的藍色小點代表一個個數據包。
該TCP流的接收窗口大小基本保持262800字節,可以判斷出遠端服務器接收不存在性能或應用異常的問題。A時刻發送的數據包,經過往返時間RTT后,在B時刻收到TCP確認報文,確認了n個報文,于是發送窗口向上滑動,可以繼續發送n個報文,Wireshark抓包工具捕獲第n個報文后,判斷出發送端待確認報文等于接收窗口大小,提示window_full,等待接收端ACK確認報文。
Wireshark根據每個TCP報文段從發出到收到接收端TCP確認報文的時間進行統計,生成往返時間圖表。該TCP數據流的往返時間基本穩定在53ms。
在TCP數據通道建立協商階段,接收端支持的窗口大小為65535字節,縮放因子WS為8,即最大接收窗口為524280字節。根據TCP吞吐量的計算公式:吞吐量=最大接收窗口/往返時間,該場景中,TCP最大吞吐量約為524280B/0.053s=9.89MB/s。經過協商后,接收端以32850B*8=262800字節為接收窗口大小,實際傳輸速率約為4.96MB/s。
(四)總結
通過Wireshark抓包軟件過濾和統計工具分析發現,造成筆記本電腦上傳文件速率未達到期望值的原因是接收窗口較小以及延時較大引起的。在網絡沒有擁塞的前提下,延時主要是運營商線路累計的,無法調整。提高文件傳輸速率的解決辦法是提高接收窗口大小。
早期的WinXP系統可以修改注冊表調整TCP窗口大小和縮放因子;目前的Windows系統TCP窗口為自動調節,可以通過Windows PowerShell 的Set-NetTCPSetting進行調整;Linux操作系統可以通過修改/proc/sys/net/core中的相關文件進行調整。
四、結束語
TCP協議機制復雜,不同的操作系統及應用在實現上也存在著差異。在網絡規模較大,帶寬資源緊張,延時不穩定時,很難定位故障。借助Wireshark工具,可以及時發現問題所在,縮短故障排查時間。在網絡運維中,可以作為輔助工具使用。
【參考文獻】
[1]Yoram Orzach著.Network Analysis Using Wireshark Cookbook古宏霞,孫余強譯.Wireshark網絡分析實戰 .人民郵電出版社,2015.02.