網(wǎng)絡丟包原因及解決方案
網(wǎng)絡丟包是我們在使用ping對目站進行詢問時,數(shù)據(jù)包由于各種原因在信道中丟失的現(xiàn)象。ping 使用了ICMP 回送請求與回送回答報文。ICMP 回送請求報文是主機或路由器向一個特定的目的主機發(fā)出的詢問,收到此報文的機器必須給源主機發(fā)送 ICMP 回送回答報文。這種詢問報文用來測試目的站是否可到達以及了解其狀態(tài)。
許多時候,我們可能都會碰到網(wǎng)絡連接時斷時續(xù)的故障現(xiàn)象,面對這種網(wǎng)絡故障,不少網(wǎng)絡管理員都會使用Ping命令對網(wǎng)絡連通性進行測試,測試結果表明此時的網(wǎng)絡傳輸線路數(shù)據(jù)丟包現(xiàn)象非常嚴重,那么究竟是什么因素導致了數(shù)據(jù)丟包現(xiàn)象比較嚴重呢?是連接線路接觸不穩(wěn)定?是網(wǎng)絡病毒?還是其他的潛在因素?
原因一:物理線路故障
網(wǎng)管員發(fā)現(xiàn)廣域網(wǎng)線路時通時斷, 發(fā)生這種情況時, 有可能是線路出現(xiàn)故障, 也可能是用戶方面的原因。為了分清是否是線路故障,可以做如下測試。
如果廣域網(wǎng)線路是通過路由器實現(xiàn)的,可以登錄到路由器,通過擴展 ping 向對端路由器廣域網(wǎng)接口發(fā)送大量的數(shù)據(jù)包進行測試。如果線路是通過三層交換機實現(xiàn),可在線路兩端分別接一臺計算機,并將 IP 地址分別設為本端三層路由交換機的廣域網(wǎng)接口地址,使用 “ping 對端計算機地址 - t ”命令進行測試。
如果上述測試沒有發(fā)生丟包現(xiàn)象, 則說明線路運營商提供的線路是好的, 引起故障的原因在于用戶自身,需要進一步查找。
如果上述測試發(fā)生丟包現(xiàn)象, 則說明故障是由線路供應商提供的線路引起的, 需要與線路供應商聯(lián)系盡快解決問題。
由物理線路引起的丟包現(xiàn)象還有很多,如光纖連接問題,跳線沒有對準設備接口,雙絞線及 RJ-45 接頭有問題等。另外,通信線路受到隨機噪聲或者突發(fā)噪聲造成的數(shù)據(jù)報錯誤,射頻信號的干擾和信號的衰減等都可能造成數(shù)據(jù)包的丟失。我們可以借助網(wǎng)絡測試儀來檢查線路的質(zhì)量。
原因二:設備故障
設備故障主要是指設備硬件方面的故障,不包含軟件配置不當造成的丟包。如網(wǎng)卡是壞的,交換機的某個端口出現(xiàn)了物理故障,光纖收發(fā)器的電端口與網(wǎng)絡設備接口,或兩端設備接口的雙工模式不匹配。
曾看過這樣的例子,一交換機端口的光纖模塊故障造成的丟包現(xiàn)象, 該交換機在通信一段時間后死機,即不能通信,重啟后恢復正常。在經(jīng)過一段時間觀察后發(fā)現(xiàn),某光纖模塊存在問題,取一塊新的模塊替換,一切正常。
究其原因,交換機會對所有接收到的數(shù)據(jù)包進行 CRC 錯誤檢測和長度校驗,將檢查出有錯誤的包丟棄,正確的包轉發(fā)出去。但這個過程中有些有錯誤的包在 CRC 錯誤檢測和長度校驗中都均未檢測出錯誤,這樣的包在轉發(fā)過程中不會被發(fā)送出去,也不會被丟棄,它們將會堆積在動態(tài)緩存中,永遠無法發(fā)送出去,等到緩存中堆積滿了,就會造成交換機死機的現(xiàn)象。最終結果是,數(shù)據(jù)包無法到達目的主機。
原因三:網(wǎng)絡擁塞
網(wǎng)絡擁塞造成丟包率上升的原因很多,主要是路由器資源被大量占用造成的。
如果發(fā)現(xiàn)網(wǎng)速慢, 并且丟包率呈現(xiàn)上升的情況, 這時應該 show process cpu 和 show process mem ,一般情況下發(fā)現(xiàn) IP input process 占用過多的資源。接下來可以檢查 fast switching 在大流量外出端口是否被禁用,如果是,則需要重新使用。
再看一下 Fast switching on the same interface是否被禁用,如一個接口配有多個網(wǎng)段并且這些網(wǎng)段間流量很大時,路由器工作在 process-switches 方式,這種情況下要在接口上執(zhí)行命令“enable ip route-cache same- interface 。”
接下來,用 show interfaces 和 show interfaces switching 命令識別大量包進出的端口。一旦確認進入端口后,打開 IP accounting on the outgoing interface 看其特征,如果是攻擊,源地址會不斷變化但是目的地址不變,可以用命令 “access list ”暫時解決此類問題(最好在接近攻擊源的設備上配置),最終解決辦法是停止攻擊源。
應用中遇到的造成網(wǎng)絡擁塞的情況還有很多, 如大量的 UDP 流量, 可以用解決 spoof attack 的步驟解決此問題。大量的組播流、廣播包穿越路由器,路由器配置了 IP NAT 并且有很多 DNS 包穿越路由器等。上述情況造成網(wǎng)絡擁塞后,通信雙方采取流量控制,丟棄不能傳輸?shù)陌?/p>
原因四:MTU 配置不當
在關鍵設備上MTU設置不當,也會造成網(wǎng)絡丟包(以太網(wǎng):1500 字節(jié),IEEE 802.3/802.2 1492字節(jié))。查看網(wǎng)絡中關鍵設備的 MTU 配置。
在了解了如何定位網(wǎng)絡丟包的位置之后,網(wǎng)管需要進一步分析丟包發(fā)生的原因,以排除故障。打開網(wǎng)絡分析軟件以后,我們配置好網(wǎng)絡檔案,選擇分析檔案之后,就可以開始分析了。
首先我們可以在圖表中添加利用率統(tǒng)計,可以看到,在14:38:05 之后,網(wǎng)絡利用率突然升高,接近40% 。推薦利用率不高于15% ,當網(wǎng)絡利用率超過了 30% ,就會產(chǎn)生1%的丟包,并且呈幾何倍數(shù)的增長。這個網(wǎng)絡中,利用率高達 40%,肯定存在著嚴重的丟包現(xiàn)象。
了解了有丟包就會有 TCP 數(shù)據(jù)包重傳之后,網(wǎng)管可以在診斷中,找出 TCP 數(shù)據(jù)包重傳比較嚴重的主機。
如何確定網(wǎng)絡丟包的存在
通常我們利用 PING x.x.x.x -t 這個命令來進行測試網(wǎng)絡中是否存在丟包。
在上圖中可以看到,在本機上向 192.168.122.2 這個不存在的地址進行長時間 PING 的時候,發(fā)送出去的 ICMP 包都丟失了,丟失率達到 100% 。即從本機到 192.168.122.2 這個實際不可達地址的路徑上存在丟包。
定位網(wǎng)絡丟包的分析步驟
在網(wǎng)絡丟包發(fā)生的情況下,用戶會明顯感受到網(wǎng)絡速度變慢,這時候網(wǎng)管首先需要做的就是進行 PING X.X.X.X –t 來進行大致是哪個網(wǎng)段的診斷。在發(fā)現(xiàn)確實有丟失率存在的情況下,我們可以利用科來軟件進行進一步分析。
在分析之前,我們有必要學習一下前置知識。
TCP協(xié)議的特點之一就是保障數(shù)據(jù)傳輸?shù)目煽啃裕创_保數(shù)據(jù)能夠正確完整傳輸。那么TCP究竟是如何來保障的?可以看到,TCP 在傳輸時,有著傳輸確認—重傳機制,即發(fā)送數(shù)據(jù)一方在傳輸數(shù)據(jù)時為每一個分段編制序列號( Sequence Number ),接收方會向發(fā)送方發(fā)送接收到分段數(shù)據(jù)的確認(Acknowledgment),通過這種方式確認數(shù)據(jù)是否準確傳送,在無法確認某分段數(shù)據(jù)被準確傳送或確認某分段數(shù)據(jù)沒有被準確傳送時重新進行傳輸。
所以,在網(wǎng)絡丟包發(fā)生的情況下,必定會有 TCP 數(shù)據(jù)包重傳的出現(xiàn)。
1. 解決方案
- 針對網(wǎng)絡設備故障:通過分段捕獲的方法,在網(wǎng)絡中關鍵設備的兩端,使用科來網(wǎng)絡分析系統(tǒng)進行抓包,確定該設備是否丟包,從而準確定位丟包設備。
- 針對網(wǎng)絡擁塞:在核心交換機上配置鏡像,使用科來網(wǎng)絡分析系統(tǒng)抓包。
分析關鍵鏈路(一般是出口鏈路) 的流量占用情況, 查看網(wǎng)絡利用率是否過高,每秒數(shù)據(jù)包是否過多,數(shù)據(jù)包大小分布是否合理、TCP會話是否正常等。
當然最根本的方法就是限制用戶流量,就是針對每個上網(wǎng)的用戶進行流量控制,比如禁止訪問視頻網(wǎng)站和其他與工作內(nèi)容無關的網(wǎng)站,同時又能針對每個用戶做出精準的流量限制,防止其對有限網(wǎng)絡帶寬的過度占用。
還可以針對一些流量做出服務質(zhì)量保證( QOS),比如可以將與工作關系比較大的流量:如網(wǎng)頁訪問、郵件流量等的流量優(yōu)先級提高,從而可以在一定程度上緩解網(wǎng)絡擁塞,保證高優(yōu)先級業(yè)務可以優(yōu)先得到轉發(fā)。 (治標不治本的方法)
2. 另外關于 ping IP 老是丟包的問題:
通常有以下幾種原因:
- 由于服務器的 IIS 中運行了非法或者沒有獨立進程池的原因 , 找到這個站點 , 給他一個獨立的進程池 .
- 如果服務器上捆綁了一個主機頭為空的站點的話 , 容易造成這個問題 , 最好把這個主機為空的站點給刪除了 , 或者把這個站點的進程池給獨立起來 , 就可以解決問題。
- 由于對服務器的帶寬和流量限制的太低問題 , 一般有一些機房的IDC服務商為了獲得更多的托管的用戶 , 十分的苛刻的限制用戶托管的服務器 , 造成流出去的十分少 , 請求的多 , 就造成丟包問題。
- 由于交換機的交換口的問題:首先使用 Ping 命令測試,發(fā)現(xiàn)不定時的有數(shù)據(jù)包丟失的現(xiàn)象,初步認為是物理層的原因。重做網(wǎng)線的 RJ45頭后,故障依舊,換根網(wǎng)線也不行。懷疑是網(wǎng)卡接口或者交換機端口的問題。經(jīng)查看網(wǎng)卡驅動無誤,網(wǎng)卡接口也沒有任何異常。再查看交換機端口, 發(fā)現(xiàn)與服務器連接的交換 機端口工作指示燈在綠與黃之間閃爍, 這說明端口工作不正常。使用超級終端登錄交換機,查看此端口的參數(shù),發(fā)現(xiàn)此端口是工作在100Mbyte/s全雙工模式,回到服務器前查看本地連接狀態(tài),網(wǎng)卡是工作在 10Mbyte/s 全雙工模式。 交換機的端口與網(wǎng)卡的傳輸速率和雙工模式不一致。將網(wǎng)卡工作模式改為 100Mbyte/s 全雙工模式后測試,一切正常,故障解決。
- 由于被 DDOS或者洪水猛獸攻擊造成的大量丟包 , 這個時候沒有什么好說的 , 趕快加上硬件防火墻吧
3. 總之一般排除故障的方法是:
- 帶寬有沒有占滿
- 換個交換機端口試試
- 換個網(wǎng)線試試
- 網(wǎng)卡及主板驅動是不是沒裝 ( 一般不會是這個問題 )
- 交換機上設置是100M的還是10M的 , 與機器設置成一樣的