1. 程式人生 > 其它 >網路丟包分析

網路丟包分析

引言

本期分享一個比較常見的⽹絡問題—丟包。例如我們去 Ping ⼀個⽹站,如果能 Ping 通,且⽹站返回資訊全⾯,則說明與⽹站伺服器的通訊是暢通的,如果 Ping 不通,或者⽹站返回的資訊不全等,則很可能是資料被丟包了,類似情況想必⼤家都不陌⽣。針對⽹絡丟包,本⽂提供⼀些常見的丟包故障定位⽅法,希望能夠幫助⼤家對⽹絡丟包有更多的認識,遇到丟包莫要慌,且跟著⼀起來漲姿(知)勢(識)……

什麼是丟包

資料在 Internet 上是以資料包為單位傳輸的,單位為位元組,資料在⽹絡上傳輸,受⽹絡裝置,⽹絡質量等原因的影響,使得接收到的資料⼩於傳送出去的資料,造成丟包。

資料包接收、傳送原理

傳送資料包:

 

  1. 應⽤程式的資料包,在TCP層增加TCP報⽂頭,形成可傳輸的資料包。
  2. 在 IP 層增加 IP 報頭,形成 IP 報⽂。
  3. 經過資料⽹卡驅動程式將IP包再新增14位元組的MAC頭,構成frame(暫⽆CRC),frame(暫⽆CRC)中含有傳送端和接收端的MAC地址。
  4. 驅動程式將 frame(暫⽆CRC)拷貝到⽹卡的緩衝區,由⽹卡處理。
  5. ⽹卡為 frame(暫⽆CRC)新增頭部同步資訊和CRC校驗,將其封裝為可以傳送的packet,然後再發送到⽹線上,這樣說就完成了⼀個IP報⽂的傳送了,所有連線到這個⽹線上的⽹卡都可以看到該 packet。

接收資料包:

 

 

  1. ⽹卡收到⽹線上的packet,⾸先檢查packet的CRC校驗,保證完整性,然後將packet頭去掉,得到frame。(⽹卡會檢查MAC包內的⽬的MAC地址是否和本⽹卡的MAC地址⼀樣,不⼀樣則會丟棄。)
  2. ⽹卡將frame拷貝到預分配的ring buffer緩衝。
  3. ⽹卡驅動程式通知核心處理,經過TCP/IP協議棧層層解碼處理。
  4. 應⽤程式從socket buffer 中讀取資料。

核心思路

瞭解了收發包的原理,可以瞭解到丟包原因主要會涉及⽹卡裝置、⽹卡驅動、核心協議棧三⼤類。以下我們將遵循“從下到上分層分析(各層可能性出現的丟包場景),然後檢視關鍵資訊,最終得出分析結果”的原則展開介紹。

目錄—網路丟包情形概覽

  • 硬體網絡卡丟包
  • 網絡卡驅動丟包
  • 乙太網鏈路層丟包
  • 網路 IP 層丟包
  • 傳輸層 UDP/TCP 丟包
  • 應用層 socket 丟包

針對以上 6 種情形,分別作出如下詳述~


簡單總結一下網絡卡丟包:

 

簡單總結一下網絡卡驅動丟包處理:

 

 

 

 

簡單總結一下核心協議棧丟包:

 

 

 

轉載自;https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ