粉絲回饋:某公司整體上網異常如何診斷?跟上節奏,TCP 流經典分析案例 !
本期分享的案例是有線網路的相關問題。
1. 背景介紹
某公司近期搬遷後,網路設備不變(某G路由+某W交換器組網)。員工目前普遍回饋網路慢,表現為網頁載入不完全、載入時間長、網頁轉圈、部分網頁打不開需要多次刷新.....
2. 網路拓撲
規模約兩百人使用上網,網路拓樸如下:
三層網路架構,劃分了多個VLAN供業務部門使用。
四條入戶寬頻均為動態公網IP,三條電信+一條移動
3. 基礎分析
針對這種整網卡頓的問題,一般能想到的原因可能有:DNS伺服器異常或回應慢、頻寬負載不均勻和寬頻會話數限制等,所以IT在出口路由器上做了相關的最佳化策略如下:
嘗試一:「多線策略」使用負載平衡,無明顯改善
試試二:「多線策略」使用智慧選線,無明顯改善
試試三:LAN口DHCP DNS使用本DNS(電信DNS)無明顯改善,之前是使用的公共DNS(百度,阿里,騰訊)
嘗試四:使用策略路由指定出口進行分流,無明顯改善
確認會話數:由於寬頻用的都是公網IP的企寬,和業者確認是無限制的
那就下來進一步分析,看看問題原因到底是出現寬頻線路還是其它。
4. 深入分析
(1) 遠端確實發現網站有卡頓異常,遲遲刷不出來內容或載入失敗
(2) 直接來看PC抓取存取該Web的異常TCP流(抓包中的對應stream61),可以看到伺服器回應的Seq明顯出了問題:握手之後的伺服器—>終端第一個包的seq為1,下來的報文應該seq=1+length=1+0=1,但卻變成了3264449421:
我們再看下另外一條異常存取Web的TCP流:
伺服器回傳的TCP封包的Seq錯誤導致終端無法接收,可能有兩種原因:
其一是伺服器真返回錯了,機率非常小,接下來進一步抓WAN口去證明即可
其二是TCP封包被路由器竄改導致回傳錯誤。
(3) 抓取WAN埠存取Web的異常TCP流,如下:
可以明確看到路由器WAN與網站伺服器TCP互動的過程中,路由WAN回應的ACK值明顯不對,給了一個非常大到錯誤值,而不是ack=seq+len。
(4) 來比較看看正常的TCP流互動就清楚了:
這條正常的TCP交互流中,伺服器和路由器WAN口都遵循TCP握手中seq和ack的標準計算,所以雙方都認,沒啥問題。
5. 原因定位及解決方案
(1) 根本原因:
顯然是出口路由存在TCP流交互異常,對內回傳的網站TCP封包Seq值異常,PC無法接收;對外要求網站回應的TCP封包ack值異常,網站伺服器無法接收且正常互動。
(2) 解決方案:
應該屬於產品BUG,但TCP串流往往和硬體加速有關,可以嘗試關閉路由器的硬體加速功能觀察使用,但要注意,關閉此功能一般會導致吞吐量和轉送效能的下降。
(3) 後續情況:
目前來看已解決,問題閉環。