網路丟包,丟的包去哪裡了?

丟在路上這些包最終去向何方?因為網路原因無法發送到指定ip地址的這些包最終是自我消亡還是有個統一的去向?之前問題沒描述清楚~


講一個故事降降溫

一外星人不小心降落到IBM大樓藍色玻璃幕牆,問IBM員工,請問我是在哪裡?IBM答曰:玻璃上!

我就不說包丟在路上了…

問題主一個問題,在電腦上刪除一個文件,文件刪到哪裡去了?

文件其實還在那裡,只是這個file所佔用的磁碟空間被操作系統回收為可用狀態,即別的file可以覆蓋(override)這段釋放的存儲空間。不信的話,用文件恢復軟體即可恢復被刪除的文件。

網路丟包其實和這個類似。

一個包從源出發可能經過:交換機、家庭或公司網關出口、防火牆、運營商網路、目的地網關、防火牆、交換機、到達目的地,在每一跳packet 所途徑的設備上有可能在二層被丟棄,Frame 直接被接收端網路介面直接丟棄:

Frame CRC error

Frame overrun

Baby Jumbo Frame Size &> Receiving Peer MRU

Jumbo Frame Size &> Receiving Peer MRU

也有可能在三層上被丟棄:

IP TTL expired

IP FCS error

Destination Unreachable

IP Packet (DF=1) &> Outgoing MTU

ACL blocked

NAT Entry Non existed

也可能在路由器入口/出口 由於buffer滿而尾丟:

input queue discard

output queue tail discard

也可能由於路由器、交換機QoS policy 丟:

QoS police discard

也可能是因為到達目的地主機,但是

IP Reassemble 失敗而被丟(Fragmented Packet Lost)

UDP/TCP/ICMP FCS error 被丟

Receive buffer 滿而被丟

當設備決定discard某個特定的包時,只是把這個包所佔用的buffer 標誌成可用狀態,即可 override


大神車小胖就丟包的原因基本都總結了。我說說自己處理過的網路丟包問題及解決方法。

我處理過的丟包故障大概可以分為四類:

internet丟包,專線丟包,策略及流量等級丟包,設備故障

1.internet丟包

丟包點在公網上,使用traceroute+ping 測出丟包的節點,或者使用winmtr, linux直接使用mtr命令。常見的就是報障到某個省的電信聯通,HK,US,或者歐洲什麼地方丟包。

如果丟包節點在己方ISP網內或者距離己方的ISP比較近,找己方的ISP解決;如果丟包節點距離對方的ISP比較近或者在在對方ISP的網內,讓對方報障他們的ISP解決;如果雙方都難以解決,想辦法讓其中一家ISP調路由優化。

PS:如果你在ISP可以嘗試你們的效果好的出口去測試。T_T當年被水果家折騰壞了。

2.專線丟包

先檢查WAN口有沒有CRC,然後檢查雙工,與modem的雙工確保一致(雙auto不行就雙duplex)。

若問題依然存在,找供應商上門檢查。基本是單機測試,更換光貓測試(如果還有用協轉的最好先更換協轉測試),調雙工,掛表測試。

如果以上還沒有解決,或者說LLP(local loop provider)下一步很被動。可以先聯繫LLP的網管中心,了解從A端到B端中間經過多少個基站,就近測試。主動權掌握在自己手裡,不然這種故障拖兩周都正常,我見過一次北京電信的,拖了兩個月才處理好。各種國內,國外電話會議,溝通很多次,費時費人費資源。

對了,這樣還不行,讓LLP重新做一條線吧。

3. 策略及流量等級丟包

這種問題出現一般是客戶報障打電話卡,聽不清楚。經測試是該段IP出現丟包。

一般跑語音都會用專線或者MPLS線路。而且都會優先保證語音的流量,一般處理方法是先檢查專線有沒有問題,然後測試流量等級(帶COS ping)有沒有丟包,看看該等級的流量有沒有超出限速
,核對流量等級的標籤,檢查策略有沒有設置對。

4.設備故障

CPU hold不住,可能是某些程序引起,或者bug。一般要報給Cisco
TAC 檢查。還有一種是帶寬大,設備扛不住,升級設備吧。

板卡,網口故障,能修修,不能修換新的。

比較常見的是1和2這兩種情況,3都很少了。第四種,本菜鳥只能判斷問題,至於解決,求會修航母的大神帶T_T


要答這個問題,要搞清楚包是什麼。想清楚包是什麼,知道包是怎麼來的,自然就知道它是怎麼丟的了。

包是承載在物理介質上的信息。所以題主你是在關心介質還是在關心信息呢?

先說本質信息,信息是怎麼來的?是我們直接或間接輸入的,再經過電腦或其它設備的加工變成了包。然後這個包按理說應該經過層層傳輸到達某個地方,但某個地方等來等去也等不到這個包,過了等待時間,默默的記上一筆,包丟了。傳不到的原因則是多種多樣,但總的來說可以分為在半路信道丟失和好不容易到了設備然後被丟這兩類。

半路信道丟失比較好理解,就比如衛星發北斗導航信息到地面,按理說是可以發到的,但誰也不知道會不會被折射反射到其它地方去了。雖然說這包理論上沒丟,但認識這包的確實接收不到,接收到的又會一臉懵逼。這種情況,我們只好認為,信息丟了,也就是丟包了。

再一種是到了設備被丟。過程就是設備看了這包一眼,說我不傳你了,再見。就這樣,可憐的包就丟了。這時候丟的原因就比較複雜了,有可能是校驗錯誤,也可能是別的啥原因,我截了個圖在下面。這只是NP拋棄包的種種原因,而且一頁還沒有放下,這只是理由的一部分。

說完信息層面的丟失再說介質丟失,介質丟失更是無奈。我要是介質,真想問一句,啥是不丟失。

就好比說,短短一束光,代表1,從光纖中穿過。那應該光纖亮的時候是1,不亮的時候是0。但實際上,光纖的亮暗只是瞬態,因為每時每刻都在被override,只有被存在緩存里時那一刻安心了一點點,但也只是幾毫秒而已。所以,要從介質的角度說,包時刻在被丟,也時刻被生成。


包在傳輸過程中有2種形態:

1. 作為串列的電信號或光信號,一比特一比特在路上走

2. 作為一段完整的內存數據塊保存在路由器或主機或交換機中

介面則是這兩種形態的轉換節點。收介面把一個個比特按照時間順序搜集起來,變成一個內存塊,然後把整個內存塊進行一定的處理,首先看看是不是一個好包,比如以太介面上的crc校驗,IP包頭的完整性保護檢查。如果是個壞包,直接釋放掉剛才為這個數據塊申請的內存。也就是說這部分內存系統可以用其他數據覆蓋了。

這是入介面丟包。

如果是個好包,就查一下自己有沒有處理這個包的方法(策略也好,路由也好,交換也好),如果沒有,就做適當的處理,比如發arp什麼的。在這個過程中,可能會找不到處理方法,同樣產生丟包。還是把這塊內存釋放掉。當然處理方法也許直接就是丟包。

這是處理丟包。

如果有處理方法,那就要進隊列了。隊列有兩種:上送本機協議棧,送到其他介面發送出去。對於上送協議棧,就是把包的內存塊地址排到處理隊列中。因為協議棧處理也很忙,他有很多入口,所以必須排隊。隊排滿了或者策略滿足了,就可能丟包。協議棧處理的還是數據塊。

這還是處理丟包

送到出介面上就是把數據塊變成比特流。介面速率有限處理能力有限,需要把每個包送過去排隊。排不上隊的或者策略滿足的就可能丟包。

這是出介面丟包

出介面丟包或者入介面丟包還有一種情況補充一下。在乙太網為鏈路層協議的情況下,鏈路層提供的是無連接不保證的服務。這種協議下只要物理層連通(一些協議甚至物理層是否連通都不管)就只管發,不去和對端確認是不是收到。所以如果一個包中途發生了物理層錯誤,鏈路層不處理。

而在有保證的鏈路層協議中,會有重傳或者前向糾錯或者二者混合。這時候要多出一些丟包模式。但無論哪種丟包模式,介面丟包的發生要麼是收端認為這個包收不起了(超時),或者收到壞包;要麼是發送端隊列滿,或者某些包發半天也不成功超時。

一個包從數據塊變成比特流再變回來的過程非常有意思,值得仔細琢磨琢磨

所有的丟包都是數據塊在內存中佔用的空間被操作系統回收,可以寫其他的數據了。打個比方,寫黑板上的字被擦掉了,不是字沒了,而是寫字的地方不被那個字佔領了。也許是擦掉了,也許是被其他字覆蓋。

沒有丟的包則不停地進行數據塊-》比特流-》數據塊……這樣的轉換,在轉換中經過一個個路由器或交換機,直到到達主機,放到內存中。

上面說到的策略,就是管理上對有特定欄位滿足某種條件的數據包進行特殊處理。丟棄是策略的一種。


樓主可以看一下無線電台是怎麼通話的,如果是多人通過中繼站通訊,那麼通話前會有前導呼叫BG6***,然後得到回應後開始說話,通話完畢做結束語Over。這就可以視為一個包。當然TCP/IP協議里的封包並不是這樣定義的,不是想說多久說多久想扯多長時間扯多長時間,這個說來話長不再多說,就說這段話。如果對方由於通訊音質問題沒有聽清,那麼就是丟話了。

現在問題來了。話丟在路上了嗎?誰拾到了?

END.


題主可以想像一下當年長城舉烽火傳遞信息的時候,有一個烽火台因為某種原因,不能將信息傳遞下去。那麼這個信息丟在哪了…?

其實只是沒有按照預期的向下轉發


建議你去學一下數據通信原理

信源 信道 信宿 編碼 解碼 雜訊,這些因素都會造成數據包丟失。

如果你想具體點,每一項的丟包,都不是一本書可以解釋的了的。

不過,你要是能解決網路丟包問題,中國聯通估計會分你10%的股份。(猜的,哈哈)


感覺可以不用任何專業辭彙就做好比喻

比如你是一個寫字很難看的人,寫字群魔亂舞。

你上課照著黑板原原本本的記了筆記。

回家看筆記本發現記的筆記好多地方都看不懂。

丟失的信息去哪裡了?


你錯過的電視節目去哪裡了?這些電視節目最終是自我消亡還是有個統一的去向


其實看見大家說了這麼多,不過真正情況碰上丟包的話,也就那麼兩三種情況

下面我來結合我的工作經驗說下吧(在某運營商工作過,負責構建和維護城網以及部分骨幹網)

1.出現丟包的最多情況,也是最常見的,最顯而易見的,就是線路出線了故障,中間出線了折損,如果是光纖的話可能是中間某幾芯出現折損的情況也有可能,不過這種情況更有可能導致光衰不正常,直接就無法上網了

2.第二種也比較常見,第一位回答者已經解答了,那就是出線crc錯誤了,也就是循環榮譽檢測出太多錯誤了,一般出現這種情況,當然我目前見到的絕大部分是線路故障或者光纖沒有融好,要麼就是光模塊出現了問題導致光衰出現問題

總結一下,其實出現丟包故障的現象我們能撿到的就那麼集中,真正複雜和不常見的原因真的很少出現,不過出現了的話也不要緊,只要根據我們自己累積的經驗和一步步來進行判斷,縮小範圍,應該都是可以解決的,所以如果歡迎大家補充我的回答,也讓我能更多的學習


數據包傳輸基本看作是數據鏈路每個網路設備不斷接力,丟包就是其中某個設備收到之後不向下一級發送。


是自我消亡。

不是去往了統一的位置。

丟包意味著信息消失,消失的位置在數據包傳輸路徑中的某一點或某幾個點。在某一點承載信息的電信號、光信號或電磁波信號消失或被干擾,信息無法被複現,停止向目的節點傳遞,進而信息消失,數據包丟失。

目的節點指最終目的地。

數據包消失的原因,見第一個回答。


我朝你喊話:「題」,「主」,「你」,「好」,假設一個數據包的信息有一個字,那麼四個字四個數據包,我向你發送了四個數據包。

結果你只聽見兩字,「你」,「好」。

「題」,「主」,你沒聽見或沒聽清這樣你只收到兩個數據包。

「題」,「主」 ,丟失了,丟哪裡去了,你說丟哪裡去了。


丟失在某個路由線路上了,沒有被任何人處理,也找不到自己的目的地了,就是不見了,最後被當做垃圾清理,不存在了...


你可以理解成從abc變成了亂碼


數據包在傳遞的過程中可能因為差錯等原因而被路由器等網路傳輸節點直接丟棄,注意數據包在具體的物理鏈路傳輸時是信號,具體參考TCP/IP協議


看traceroute啊,就能知道丟到哪條路了


丟給了GC


丟在路上啊!


我手裡有根繩子,繩子那一頭在你手裡.我用力一搖繩子,會產生一個波浪,用的技巧和力量都正確的話,這個波浪就能一直傳到你手裡,反之,這個波浪走出去一段就消失了.

波浪的消失就是丟包.(實際丟包的定義比這個要廣)


推薦閱讀:

使用SVI實現VLAN間互訪的思想是什麼?
無線路由器是否可以作為無線交換機使用?
子網掩碼為255.255.255.255是什麼情況?
TCP/IP 的鏈路層是可靠的嗎?
TCP/IP 協議棧中,為什麼選擇 IP 層負責分片?

TAG:互聯網 | 計算機網路 | IT運維 | 網路工程 |