tcpdump抓包丢失问题
- 格式:doc
- 大小:40.50 KB
- 文档页数:5
Linux中的网络监控技巧使用tcpdump和wireshark命令进行抓包在Linux系统中,网络监控是一项非常关键的工作。
通过对网络数据包进行抓取和分析,可以帮助我们解决网络故障、优化网络性能以及保障网络安全。
本文将介绍两个常用的网络监控工具:tcpdump和wireshark,并介绍它们在Linux系统中的使用技巧。
一、tcpdumptcpdump是一个强大的命令行工具,可以在Linux系统中用于抓取和分析网络数据包。
它可以监控网络接口上的所有数据包,并将它们以各种格式进行展示,帮助我们深入了解网络通信过程。
安装tcpdump:在大多数Linux发行版中,tcpdump都默认安装在系统中。
如果您的系统没有预装tcpdump,可以通过以下命令进行安装:```sudo apt-get install tcpdump```抓取数据包:使用tcpdump抓取网络数据包非常简单,只需在命令行中输入以下命令:```sudo tcpdump```这样,tcpdump会开始在默认网络接口上抓取数据包,并将它们以默认格式输出到终端。
设置过滤器:有时候,我们只关注特定的网络流量或协议。
tcpdump支持设置过滤器来实现按需抓取。
例如,我们只想抓取目标IP地址为192.168.1.100的数据包,可以使用以下命令:```sudo tcpdump host 192.168.1.100```类似地,我们可以通过端口号、协议等设置更详细的过滤条件。
输出到文件:tcpdump默认将抓取的数据包输出到终端,但有时我们希望将数据保存到文件中进行离线分析。
可以使用以下命令将数据包输出到文件:```sudo tcpdump -w output.pcap```这样,tcpdump会将抓取到的数据包保存到output.pcap文件中。
二、wiresharkwireshark是一个功能强大的图形化网络分析工具,可以在Linux系统中使用。
tcpdump抓包条件摘要:一、tcpdump 简介二、tcpdump 抓包条件1.网络接口2.过滤规则3.保存和查看数据包正文:tcpdump 是一款功能强大的网络数据包捕获和分析工具,广泛应用于网络故障排查、网络安全分析和网络协议研究等领域。
通过tcpdump,用户可以实时捕获和分析网络数据包,了解网络流量状况以及各种网络协议的工作原理。
在tcpdump 中,有三个主要的抓包条件,分别是网络接口、过滤规则和保存和查看数据包。
首先,网络接口是tcpdump 抓包的基础。
用户需要选择正确的网络接口来捕获数据包。
在命令行中,可以通过“-i”参数来指定网络接口,例如:“tcpdump -i eth0”。
其次,过滤规则是tcpdump 抓包的关键。
通过过滤规则,用户可以有选择性地捕获感兴趣的数据包。
tcpdump 支持多种过滤条件,如源地址、目的地址、协议类型、端口号等。
在命令行中,过滤规则通常放在“-f”参数之后,例如:“tcpdump -i eth0 -f "src port 80"”。
最后,保存和查看数据包是tcpdump 的重要功能。
捕获到的数据包可以保存在文件中,以便后续分析。
在命令行中,可以通过“-w”参数将数据包保存到文件,例如:“tcpdump -i eth0 -w output.cap”。
另外,用户还可以使用tcpdump 的图形界面工具(如Wireshark)来查看和分析数据包。
总之,tcpdump 作为一款实用的网络数据包捕获工具,可以帮助用户实时监控网络状况,分析网络流量,查找网络故障,以及研究网络协议。
tcpdump抓包分析详解[root@linux ~]# tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae][-qX] [-r 档案] [所欲撷取的数据内容]参数:-nn:直接以IP 及port number 显示,而非主机名与服务名称-i :后面接要『监听』的网络接口,例如eth0, lo, ppp0 等等的界面;-w :如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接档名-c :监听的封包数,如果没有这个参数,tcpdump 会持续不断的监听,直到使用者输入[ctrl]-c 为止。
-A :封包的内容以ASCII 显示,通常用来捉取WWW 的网页封包资料。
-e :使用资料连接层(OSI 第二层) 的MAC 封包数据来显示;-q :仅列出较为简短的封包信息,每一行的内容比较精简-X :可以列出十六进制(hex) 以及ASCII 的封包内容,对于监听封包内容很有用-r :从后面接的档案将封包数据读出来。
那个『档案』是已经存在的档案,并且这个『档案』是由-w 所制作出来的。
所欲撷取的数据内容:我们可以专门针对某些通讯协议或者是IP 来源进行封包撷取,那就可以简化输出的结果,并取得最有用的信息。
常见的表示方法有:'host foo', 'host 127.0.0.1' :针对单部主机来进行封包撷取'net 192.168' :针对某个网域来进行封包的撷取;'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制'tcp port 21':还可以针对通讯协议侦测,如tcp, udp, arp, ether 等还可以利用and 与or 来进行封包数据的整合显示呢!范例一:以IP 与port number 捉下eth0 这个网络卡上的封包,持续 3 秒[root@linux ~]# tcpdump -i eth0 -nntcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win 964801:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win 9648<==按下[ctrl]-c 之后结束6680 packets captured <==捉下来的封包数量14250 packets received by filter <==由过滤所得的总封包数量7512 packets dropped by kernel <==被核心所丢弃的封包如果你是第一次看tcpdump 的man page 时,肯定一个头两个大,因为tcpdump 几乎都是分析封包的表头数据,用户如果没有简易的网络封包基础,要看懂粉难吶!所以,至少您得要回到网络基础里面去将TCP 封包的表头数据理解理解才好啊!^_^!至于那个范例一所产生的输出范例中,我们可以约略区分为数个字段,我们以范例一当中那个特殊字体行来说明一下:01:33:40.41:这个是此封包被撷取的时间,『时:分:秒』的单位;IP:透过的通讯协议是IP ;192.168.1.100.22 > :传送端是192.168.1.100 这个IP,而传送的port number 为22,您必须要了解的是,那个大于(>) 的符号指的是封包的传输方向喔!192.168.1.11.1190:接收端的IP 是192.168.1.11,且该主机开启port 1190 来接收;P 116:232(116):这个封包带有PUSH 的数据传输标志,且传输的数据为整体数据的116~232 byte,所以这个封包带有116 bytes 的数据量;ack 1 win 9648:ACK与Window size 的相关资料。
tcp丢包的解决方案
目录
1. TCP丢包的原因
1.1 网络拥堵
1.2 网络故障
1.3 数据包碎片化
2. 解决TCP丢包问题的方案
2.1 使用错误检测和纠正技术
2.2 调整TCP参数
2.3 使用重传机制
TCP丢包是网络通信中常见的问题,通常会给网络传输带来困扰。
下面将详细介绍TCP丢包的原因以及解决方案。
1. TCP丢包的原因
1.1 网络拥堵
网络拥堵是导致TCP丢包的常见原因之一。
当网络流量过大,路由器
或交换机无法及时处理所有数据包时,就会出现丢包现象。
1.2 网络故障
网络设备故障或不稳定也可能导致TCP丢包。
例如,路由器出现故障
或链路不稳定时,会导致数据包丢失。
1.3 数据包碎片化
数据包碎片化指的是一个数据包被分割成多个片段传输,其中部分片
段丢失导致整个数据包无法完整到达目的地,从而产生丢包问题。
2. 解决TCP丢包问题的方案
2.1 使用错误检测和纠正技术
通过使用校验和、序列号和确认应答等技术,可以在数据传输过程中
实现错误检测和纠正,减少TCP丢包的概率。
2.2 调整TCP参数
调整TCP的拥塞控制算法、重传超时时间等参数,可以改善网络性能,
减少TCP丢包的发生。
2.3 使用重传机制
当TCP数据包丢失时,使用重传机制可以重新发送丢失的数据包,确保数据的完整性和可靠性。
综上所述,针对TCP丢包问题,我们可以通过以上方案进行有效解决,提高网络通信的稳定性和可靠性。
Linux命令高级技巧通过tcpdump命令进行网络抓包和分析Linux是一款广泛应用于服务器和嵌入式设备的操作系统,具有强大的功能和灵活性。
与其他操作系统相比,Linux提供了丰富的命令行工具,其中之一就是tcpdump命令。
tcpdump是一款用于抓取网络数据包并进行分析的强大工具,它可以帮助用户深入了解网络通信,解决网络故障和排查安全问题。
在本文中,我们将介绍如何使用tcpdump 命令进行网络抓包和分析。
一、什么是网络抓包?网络抓包是指在计算机网络中捕获和保存网络数据包的过程。
网络数据包是信息在网络中传输的基本单位,它包含了源IP地址、目标IP 地址、协议类型、端口号等重要信息。
通过抓包,我们可以观察和分析网络通信的行为,帮助我们了解网络设备之间的交互过程,诊断网络故障,以及排查安全问题。
二、tcpdump命令的基本用法tcpdump命令是一款基于命令行的工具,用于捕获和分析网络数据包。
下面是tcpdump命令的基本用法:```tcpdump [选项] [表达式]```其中,选项用于配置tcpdump的行为,表达式用于过滤需要捕获的数据包。
下面是一些常用的选项:- `-i`:指定要监听的网络接口。
- `-n`:禁用主机名解析,显示ip地址而非域名。
- `-X`:以16进制和ASCII码显示数据包内容。
- `-c`:指定捕获数据包的数量。
- `-s`:指定捕获数据包的最大长度。
例如,我们可以使用以下命令来捕获网络接口eth0上的前10个数据包,并以16进制和ASCII码显示数据包内容:```tcpdump -i eth0 -c 10 -X```三、tcpdump命令的高级用法除了基本用法外,tcpdump命令还提供了一些高级的用法,帮助用户更加灵活和精确地进行网络抓包和分析。
1. 根据协议过滤数据包tcpdump支持根据不同协议类型进行数据包的过滤。
常见的协议包括TCP、UDP、ICMP等。
tcpdump命令详解⼀、tcpdump简介tcpdump命令是基于unix系统的命令⾏的数据报嗅探⼯具,可以抓取流动在⽹卡上的数据包。
它的原理⼤概如下:linux抓包是通过注册⼀种虚拟的底层⽹络协议来完成对⽹络报⽂(准确的是⽹络设备)消息的处理权。
当⽹卡接收到⼀个⽹络报⽂之后,它会遍历系统中所有已经注册的⽹络协议,如以太⽹协议、x25协议处理模块来尝试进⾏报⽂的解析处理。
当抓包模块把⾃⼰伪装成⼀个⽹络协议的时候,系统在收到报⽂的时候就会给这个伪协议⼀次机会,让它对⽹卡收到的保温进⾏⼀次处理,此时该模块就会趁机对报⽂进⾏窥探,也就是啊这个报⽂完完整整的复制⼀份,假装是⾃⼰接收的报⽂,汇报给抓包模块。
⼆、语法1、查看本地⽹卡状态[root@cnetos daocoder]# netstat -iKernel Interface tableIface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgdocker0 1500 40409 0 0 0 20376 0 0 0 BMUens5f0 1500 22999894941 0 0 0 25581016784 0 0 0 BMRUlo 65536 850291094 0 0 0 850291094 0 0 0 LRUIface:存在的⽹卡。
MTU:最⼤传输单元。
RX-OK RX-ERR RX-DRP RX-OVR:正确接收数据报的数量以及发⽣错误、流式、碰撞的总数。
TX-OK TX-ERR TX-DRP TX-OVR:正确发送数据报的数量以及发⽣错误、流式、碰撞的总数。
2、tcpdump帮助命令[root@centos daocoder]# tcpdump --helptcpdump version 4.9.0libpcap version 1.5.3OpenSSL 1.0.1e-fips 11 Feb 2013Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ][ -Q|-P in|out|inout ][ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ][ --immediate-mode ] [ -T type ] [ --version ] [ -V file ][ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ][ -Z user ] [ expression ](1)、类型的关键字host:指明⼀台主机。
Tcpdump not found 解决方法在使用 Linux 或 macOS 系统时,有时候会遇到 tcpdump not found 的错误提示。
本文将介绍如何解决这个问题,以及如何安装和使用 tcpdump 工具。
下面是本店铺为大家精心编写的3篇《Tcpdump not found 解决方法》,供大家借鉴与参考,希望对大家有所帮助。
《Tcpdump not found 解决方法》篇1在使用 Linux 或 macOS 系统时,有时候需要使用 tcpdump 工具来捕获和分析网络数据包。
但是,有时候在运行 tcpdump 命令时会遇到“tcpdump not found”的错误提示。
这通常是因为系统中没有安装 tcpdump 工具或者安装的版本过旧导致的。
以下是解决 tcpdump not found 的几种方法:1. 安装 tcpdump 工具如果在您的系统中没有安装 tcpdump 工具,可以通过以下命令来安装:- 在基于 RPM 的 Linux 发行版中,可以使用以下命令安装: ```sudo yum install tcpdump```- 在基于 DEB 的 Linux 发行版中,可以使用以下命令安装:```sudo apt-get install tcpdump```- 在 macOS 系统中,可以使用以下命令安装:```sudo brew install tcpdump```2. 检查 tcpdump 工具版本如果您已经安装了 tcpdump 工具,但是仍然遇到 tcpdump not found 的错误提示,可能是因为安装的版本过旧。
可以通过以下命令来检查 tcpdump 工具的版本:- 在基于 RPM 的 Linux 发行版中,可以使用以下命令检查: ```sudo rpm -q tcpdump```- 在基于 DEB 的 Linux 发行版中,可以使用以下命令检查: ```sudo apt-get install -q tcpdump```- 在 macOS 系统中,可以使用以下命令检查:```sudo brew list tcpdump```如果发现安装的版本过旧,可以尝试升级到最新版本。
说明:1.本报告是成都科来软件安徽办事处针对xxxx的网络故障所做的分析报告,因此该报告可以由xxxx的相关人员和科来安徽办的技术人员进行相应的查阅、更改或完善。
2.该报告中可能会涉及到用户网络内部的相关敏感信息,我方任何技术人员不得对外泄漏,否则,由此造成的后果一切由其本人负责,与科来公司无关。
3.该报告内容全部为成都科来安徽办事处组织创作,科来安徽办事处具有其版权,任何其他组织或个人不得在没有科来安徽办授权的情况下传播该文档。
4.安徽办事处具有对该报告文档的解释权。
目录1故障描述 (1)1.1故障环境 (1)1.2故障现象 (1)2故障分析 (1)2.1确认故障点 (1)2.2部署科来网络分析系统 (2)2.3数据包分析 (2)2.4分析结论 (6)3总结 (6)1故障描述1.1故障环境xxxx的互联网的结构比较简单,通过核心和防火墙直接相连,中间没有任何的网络监控、管理设备,示意图如下所示:xxxx的防火墙走的是路由模式,内部员工上网通过防火墙进行地址转化,转换成公网地址。
1.2故障现象打开网页速度比较慢,但是下载的速度很快,而且利用web页面上传邮件附件也很慢,几兆的附件经常上传不上去。
同时利用WEB页面登陆防火墙的速度也很慢。
2故障分析2.1确认故障点通过上面的介绍,我们可以发现在上网慢时只经过了核心交换机和防火墙,所以可疑的故障点有以下几个位置:2.2部署科来网络分析系统为了找到故障的具体位置,我们找一台慢的主机装上科来网络分析系统,然后在核心交换和防火墙之间部署上科来网络分析系统,通过端口镜像来捕获通信的数据包:2.3数据包分析1、分析防火墙有无丢包、延时。
同样的,我们做故障还原测试,并利用防火墙自带的抓包功能来抓取网络通信的数据包,同时在客户端进行抓包。
通过测试得到如下的数据包:客户端数据包防火墙入口数据包防火墙出口数据包通过上面的数据包我们可以得出一个数据包交互图:通过比较数据包,我们可以发现在防火墙入口处有数据包丢失!造成这种丢失的最大可能性就是防火墙和中间设备之间有其他网络设备导致数据包丢失,但是在防火墙和客户端之间没有其他设备,只有一个核心交换机,为了能够准确找出故障点,我们再捕获防火墙和核心交换之间的数据包与客户端发送的数据包进行比较。
丢包检测原理在网络通信中,丢包是指在数据传输过程中出现的数据包丢失现象。
丢包会导致网络性能下降,影响用户体验。
因此,了解丢包检测原理对于网络管理和故障排除非常重要。
丢包检测是一种用于判断网络丢包情况的技术手段,通过对传输过程中的数据包进行监控和分析,可以及时发现丢包问题,并采取相应的措施进行修复。
一、丢包检测的原理介绍丢包检测主要基于网络协议的工作原理。
在数据通信过程中,数据被分割为多个数据包进行传输,每个数据包都包含了发送方和接收方的地址信息、数据内容和校验信息等。
丢包检测的原理主要包括以下几个方面:1. 数据包序号在发送数据时,发送方会为每个数据包分配一个序号,接收方在接收到数据包后会检查序号是否按照预期顺序进行传输。
如果接收方发现序号缺失,即数据包丢失,就可以判断出发生了丢包事件。
2. 校验和数据包中通常包含了校验和字段,用于检测数据在传输过程中是否发生了错误。
发送方在发送数据包时,会计算数据的校验和,并将其附加在数据包中。
接收方在接收到数据包后,也会进行校验和的计算,并与接收到的校验和进行比对。
如果校验和不一致,说明数据包在传输过程中发生了错误,可能是由于丢包引起的。
3. 超时重传发送方在发送数据包后,会等待一段时间来接收接收方的确认信息。
如果发送方在规定的时间内未收到确认信息,就会认为数据包丢失,并触发超时重传机制,重新发送数据包。
通过超时重传机制,可以间接地检测到丢包情况。
二、丢包检测的应用丢包检测在网络管理和故障排除等方面具有重要作用。
以下是丢包检测的几个常见应用场景:1. 网络监控通过对网络中的数据包进行监控和分析,可以实时了解网络丢包情况。
管理员可以根据监测结果,判断网络性能是否正常,并及时采取措施解决丢包问题,以保证网络的稳定性和可靠性。
2. 故障排除当用户在使用网络时出现连接不稳定、延迟高等问题时,丢包检测可以帮助管理员快速定位问题。
通过检测丢包情况,可以确定是网络传输问题还是其他原因导致的故障,并采取相应的措施进行修复。
tcpdump使用方法一、什么是tcpdumptcpdump是一种在Linux和Unix操作系统上使用的网络抓包工具。
它可以捕获网络数据包并将其显示或保存到文件中,以供后续分析和诊断。
tcpdump可以用于调试网络问题、监视网络流量、分析网络协议等。
二、安装tcpdump1.在Ubuntu上安装tcpdump:sudo apt-get install tcpdump2.在CentOS上安装tcpdump:sudo yum install tcpdump三、基本用法1.捕获所有数据包:sudo tcpdump -i eth0-i选项指定要监听的接口,eth0为网卡接口名称。
2.捕获指定端口的数据包:sudo tcpdump -i eth0 port 80port选项指定要监听的端口号,80为HTTP服务默认端口号。
3.捕获指定IP地址的数据包:sudo tcpdump -i eth0 host 192.168.1.100host选项指定要监听的IP地址,192.168.1.100为目标IP地址。
4.捕获指定协议类型的数据包:sudo tcpdump -i eth0 icmpicmp为ICMP协议类型。
5.捕获指定源IP地址和目标IP地址之间的数据包:sudo tcpdump -i eth0 src 192.168.1.100 and dst 192.168.1.200 src选项指定源IP地址,dst选项指定目标IP地址。
6.保存抓包结果到文件:sudo tcpdump -i eth0 -w capture.pcap-w选项指定保存到文件的名称,capture.pcap为文件名。
7.读取保存的抓包结果:sudo tcpdump -r capture.pcap-r选项指定读取文件的名称,capture.pcap为文件名。
四、高级用法1.显示数据包详细信息:sudo tcpdump -i eth0 -v-v选项可以显示更详细的信息,如源地址、目标地址、协议类型等。
1近日用tcpdump抓包,发现有大量的丢包出现("packets dropped by kernel"),如下:tcpdump -i eth0 dst port 1234 and udp -s 2048 -X -tt >a.pack264 packets captured3043 packets received by filter2706 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缓冲区长度这一步是绝招了,由于设计内核参数修改,尽量不要使用,要用了不行,那就没办法了 ^_^2通过tcpdump抓包时,结束后tcpdump会给出如下统计信息:1552 packets captured1586 packets received by filter34 packets dropped by kernel其中“captured”的计数指的是应用层捕获到的数据,“received by filter”和“dropped by kernel”的计数由内核维护,应用层通过getsockopt来获取。
收到一个包,“received by filter”会加1,如果sock的接收buffer被填满时,则把这个数据包丢弃,将“dropped by kernel”加1。
if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= (unsigned)sk->sk_rcvbuf){spin_lock(&sk->sk_receive_queue.lock);po->stats.tp_drops++;spin_unlock(&sk->sk_receive_queue.lock);}通过调节/proc/sys/net/core/rmem_default和/proc/sys/net/core/rmem_max能够改变sk_rcvbuf的大小。
正常“captured”加上“dropped by kernel”应该等于“received by filter”的大小,有的时候出现不等的情况应该是还有一些数据包在sk_rcvbuf中,还没有被应用层收到的原因。
tcpdump做pcap丢包一直用tcpdump做pcap,忽然从某一天开始做的pcap稍微大一点,就开始丢包,给出的哦信息大概是”xxxx packets dropped by kernel”,可能出问题的也就是vmware/linux kernel/libpcap/tcpdump,这里边的每一个我都经常升级,太复杂了,不知道是哪个引入的问题。
于是就一直得过且过,大文件就凑合着在windows上用wireshark。
今天实在是想搞清楚怎么回事,就仔细看了一下。
仔细想想,首先排除vmware的问题,因为所有网络程序都正常工作,没有理由vmware或者tcp/ip本身出问题。
所以大概就只是libpcap和 tcpdump的问题。
搜到一篇文章,大概的意思就是是因为内核skb的buffer太小,tcpdump还没有来得及取下一个包,这个就已经被内核里边来的下边的包给覆盖掉了。
试着改了一下还是不行,那看来不是内核缓存的问题,应该就是libpcap或者tcpdump 取包比较慢。
起了GUI用wireshark抓了一下,NND也是正常的,那就只可能是tcpdump的问题了。
仔细看了一下我的tcpdump参数,一般都是”tcpdump port 80 -w aaa.pcap -s 0″,唯一不同的就是”-s 0″,之所以用这个参数,是因为好久以前tcpdump 如果加上”-w”,默认不记录数据,只记录包头,加上”-s 0″,那就是每个包最大记录65535的数据,不过现在默认也改成了65535,所以这个参数有没有都没什么区别。
剩下的就是”tcpdump port 80 -w aaa.pcap”,完全正常,彻底抓狂了。
抓狂中无聊试了一下”-s 2000″,哇,一下不丢包了。
反正tcp MTU是1500,这个数字也没啥问题。
问题解决,看来估计是tcpdump某一个memcpy或者类似的内存操作的参数是用最大65535,而不是用实际抓到包的大小,所以速度慢下来来不及去取内核缓存的数据。
Tcpdump丢包问题The kernel has a buffer for packets to be delivered to tcpdump. If tcpdump doesn't respond quickly enough, the kernel will overwrite old packets with new ones.使用tcpdump抓包时,内核分配缓冲区存放向tcpdump传送的数据包,如果tcpdump处理的不够快,新到达的包会覆盖缓冲区中较早的包,即出现dropped 丢包的情况。
解决方法:1. 增大系统缓冲区大小 bpfbufsize2. 避免tcpdump进行dns解析,使用tcpdump -n参数。
尽量减少tcpdump的工作量,其他的参数如-nn等可参考。
Pf_ringPF_RING包括一个linux内核模块和该模块在用户层的库, 这个库符合libpcap标准。
你需要将应用程序在链接时链接到这个库,才能发挥作用。
简单说,千兆抓包使用普通linux性能上是不够的,必须使用专用的抓包库。
pf_ring,通过修改系统内核提高基于Linux和libcap的抓包效率官方网站:pf_ring 使用心得[i=s] 本帖最后由pdsxw123 于2010-08-09 20:54 编辑[/i]在论坛里已经有人把pf_ring的原理大概讲述了,在此不再累述。
大家如果想了解或者学习的话,可以直接从官方网站上下载,[url][/url]最新版本为4.4.0,目录为:drivers\drivers\broadcomdrivers\inteldrivers\myricomkernel/ Kernel related patchesuserland/ User space codeuserland/lib/ User space library used to manpulate PF_RINGuserland/libpcap-XXX-ring/ Libpcap enhanced with PF_RING supportuserland/examples/ P(acket)count application (use it for your tests)1.编译安装之前需要卸载网卡驱动,卸载之前可以使用ethtool -i ethx 查看当前网卡类型和驱动版本。
2.cd 到kernel下,make,然后sudo make install3.cd 到userland/lib/下,make,然后sudo make install4.如果需要使用libcap抓包做分析,请先卸载之前装的libcap,然后cd 到userland/libpcap-XXX-ring/./configure ---> make -----> sudo make install5.cd 到drivers下,根据ethtool -i ethx 命令看到的网卡驱动和类型,进入指定的目录。
假设你看到如下信息:driver: e1000eversion: 1.0.2-k2firmware-version: 0.4-3bus-info: 0000:00:19.0cd 到drivers\intel\e1000e-1.0.15下,make ----> sudo make install6.开始安装驱动,cd 到lib/modules/xxx/kernel/net,可以看到有个pf_ring的目录,cd 到pf_ring 下使用命令sudo insmod pf_ring.ko transparent_mode=17.安装网卡驱动,cd到目录lib/modules/xxx/kernel/driver/net下,使用命令sudo insmod e1000e.ko安装完毕,现在我们可以使用命令dmesg 查看驱动是否安装成功,如果成功的话,可以看到[PF RING].................. ............................... 信息pf_ring 会安装一个类型为27的协议簇,可以使用sock(PF_RING,SOCK_RAW,0)打开一个socket使用libcap的朋友不需要修改程序,需要重新编译,链接的时候请加上libpfring.so.最近在使用的时候,发现pf_ring只做了intel e1000e的DNA的实现,局限性太大了。
现在的网卡类型,特别是服务器上的基本上是HP、broadcom等,如果只是使用PF_RING 抓包的话,经过简单测试后暂时发现与用libcap没什么区别。
并且pf_ring定制的libpcap没有缓存功能pf_ring有两种工作模式,可以使用transparent_mode设置,0:表示与libpcap什么区别,pf_ring.ko注册个回调函数到网卡驱动,经过此网卡的包会复制一份。
如果设置为1,表示打算使用dna技术,这一般是使用pf_ring的目的,也就是打算使用此特性,使网卡收到的包,不经过kernel的捣腾,由pf_ring直接mmap到用户空间。