tcpdump丟包問題解決方法

2021-08-15 09:50:12 字數 949 閱讀 6180

近日用tcpdump抓包,發現有大量的丟包出現("packets dropped by kernel"),

如下:tcpdump -i eth0 dst port 1234 and udp -s 2048 -x -tt >a.pack

264 packets captured

3043 packets received by filter

2706 packets dropped by kernel

丟包原因:

經過google以及分析,造成這種丟包的原因是由於libcap抓到包後,tcpdump上層沒有及時的取出,導致libcap緩衝區溢位,從而覆蓋了未處理包,此處即顯示為dropped by kernel,注意,這裡的kernel並不是說是被linux核心拋棄的,而是被tcpdump的核心,即libcap拋棄掉的,上層監聽到

1234埠的server可以正常的獲取資料。

解決方法:

根據以上分析,可以通過改善tcpdump上層的處理效率來減少丟包率,下面的幾步根據需要選用,每一步都能減少一定的丟包率

1.最小化抓取過濾範圍,即通過指定網絡卡,埠,包流向,包大小減少包數量

2. 新增-n引數,禁止反向網域名稱解析

tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -x -tt >a.pack

大多數情況這樣就可以解決了

可以通過改善tcpdump上層的處理效率來減少丟包率

3. 將資料報輸出到cap檔案

tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -x -tt  -w a.cap

用了這一步,基本上所有的網路server都可以搞定了

4. 用sysctl修改so_revbuf引數,增加libcap緩衝區長度

這一步是絕招了,由於設計核心引數修改,盡量不要使用,要用了不行,那就沒辦法了 ^_^

IMX6中串列埠丟包問題解決方法

1.串列埠沒有流控,串列埠fifo溢位問題在硬體層面沒有保障。2.cpu響應不及時,無法及時將串列埠fifo中的資料讀取出,造成fifo溢位,從而資料丟失。其中的原因有 a.cpu不能及時響應串列埠資料接收中斷,因為cpu此時正在處理別的中斷,需要等待當前中斷處理完成之後,才能接著處理串列埠中斷。b...

WPF Image問題解決方法

一.image是控制項,source屬性型別是imagesource 二.imagebrush是筆刷,用於填充 1.基本使用,必須指定imagesource源 imagebrush繼承自tilebrush,imagebrush功能比較強大 三.imagedrawing繼承自drawing,用於繪圖 ...

SeLinux問題解決方法

selinux問題解決方法 3 關於以上修改,google提供的解決方案如下 3.1 如果乙個檔案只是被vendor下的程序使用,可以將此檔案設為vendor data file,存放於 data vendor目錄下 3.2 如果乙個檔案既被system下的程序也被vendor下的程序使用,並且是a...