linux內核之——丟包分析

      內核丟包分析主要就是對流經網卡設備的數據包進行分類的分析,如何獲得接受多少包,丟失多少包,錯誤多少包等狀態進行簡要的分析。

    對於丟包的分析,我從兩個方面來說:1、關於內核網卡的收包時丟包原因;2、分析pcap的丟包原因。本章主要是分析一下網卡的丟包以及如何獲取包狀態的方式。

    cpu對外圍設備的基本上都是通過中斷方式進行調度,網卡也不例外,通過中斷的方式通知cpu,得知什麼時候發送數據包,什麼時候接受數據包。在網卡驅動中,我們採用了這種思想,採用軟中斷的方式,調用發送和接受函數,來實現網卡的基本功能,接受和發送數據。當然,網卡驅動並不是這樣就實現了,還需要對一些內存空間映射,寄存器的配置等等。我們現在只是對一個正常工作的網卡進行分析。

    在網卡驅動中有一個結構體,struct net_device結構體(include/linux/netdevice.h),我們主要是對該結構體的字段進行分析。現在就對該結構體的字段進行分析。

   rx_packets: 它是對網卡設備收到得數據包進行統計,他統計的包都是好的數據包,也就是說,該字段統計的數據包,都是上交到協議棧中的數據包。執行代碼爲:

   rx_bytes: 它是對網卡設備收到得一個包(好包)的長度進行統計,但是該長度並不是就是指一個純數據的長度,該長度應該包括:

  insb(DATAPORT, skb_put(skb,pkt_len), pkt_len);          //網卡上讀取數據包
  skb->protocol=eth_type_trans(skb,dev);                    //獲取幀類型字段
  netif_rx(skb);                                                              //上交協議棧
  dev->last_rx = jiffies;                                                //時間戳
  lp->stats.rx_packets++;                                          //接受包數統計
  lp->stats.rx_bytes+=pkt_len;                                //接受字節統計

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章