wincap问题之一(丢包)
最近开发一个项目,发现wincap会有丢包现象,与wincap的具体应用是这样的,一个接收线程,采用pcap_loop接收网络中的数据包,一个发送线程,采用pcap_sendqueue_transmit的方式发送数据包,pcap_loop接收包速率大约为34k/s(包数大约150包每秒), pcap_sendqueue_transmit发送包的速率大约为每秒100包,在网上查了下wincap性能分析的文章,大多说收包率200M/s才有可能会引起丢包,而我的收包频率才34k,与200M相差甚远,怎么还会丢包呢?
下面是我对为什么丢包的分析步骤:
1.首先想到的是不是我的代码出了问题,我把几个影响系统性能的地方执行时间都打印了出来,发现执行时间都很合理,没有什么异常。
2.会不会是wincap的缓冲区的问题,wincap有两种缓冲区,用户缓冲区默认为256k,内核缓冲区为1M,按理来说,在我的这个应用环境,采用默认缓冲区是不会有任何问题的,但是还是抱着怀疑一切的想法,我还是重新设置了wincap的缓冲区,将用户缓冲区和内核缓冲区都设为10M,如果这个缓冲配置还会丢包的话,那就没天理了,但运行结果依然还是丢包,悲情了。
3.最后一道槛是我最不想怀疑的地方,那就是与我通信的设备了,首先还是来说说我的程序是怎么与设备通信的接口吧,pc通过网口连接到交换机,交换机之间通过级联的方式相连,总共4台二层交换机(都是100M的交换速率),每个交换机24个端口,这四台交换机上共连有77台设备,我的程序负责接收这77台设备的数据(通过上面讲的pcap_loop),以及对设备进行控制(pcap_sendqueue_transmit),难道是交换机处理不过来,导致数据在交换机上就丢失了,为了验证是否是该情况,我只与一台交换机通信,该台交换机上只连有14台设备,测式结果还是会有丢包。 一切都怀疑了,但问题依旧没有发现,呜呜。
最后又理了理自己的思路,难道是1中我测是性能出了问题,哦,在测试是的时候忘了测pcap_sendqueue_transmit 的时间,因为我把这个设为异步发送的方式,本以为这样做应该这个部分会立即返回,不会占太多的cpu时间,但事与愿违,经测发现该函数还是很占cpu时间的,队列数长1的时候,我测了12个小时,发现最长的包发送时间为104ms,由于我的队列长度一般是8,但一旦出现发送包超过100ms时,因为数据挤压没有来得及发送,可能会使发送队列的长度会有一个迅速增加,最大可以达到38,这时pcap_sendqueue_transmit的发送时间可能会很长,超过5S,因为这从而导致pcap_loop不能及时收到数据,从而导致数据丢失。
为了解决上面的问题,我将pcap_sendqueue_transmit改为pcap_send的发送方式,虽然内核切换牺牲了一些性能,但丢包问题得到解决,采用pcap_send发送,测试发现发送包也会有超过100ms,但由于是单包发送,100ms还不至于引起丢包。
问题总算找到了,我不得其解的是,为什么发送会影响接收?这是wincap驱动的原因吗?
在写此篇博文之前,我在看wincap驱动,希望能找出为什么wincap发送会如此占cpu时间,为什么发送会影响接收,难道wincap不支持全双工模式吗?有对这方面了解的朋友,希望能给我一些指点,我将感激不尽。
wincap问题之一(丢包)相关推荐
- 网络丢包现象分析处理指导书5
sniffer简明教程 xiong2127 51cto技术博客 sniffer是由NAI公司提供的强大的协议分析仪,完整的sniffer系统,除了我们经常使用的以太网模块外,还具有广域网模块,广域网模 ...
- ping 丢包 网络摄像头_视频监控系统的摄像头掉线看交换机连接注意事项
某智创园做了一个监控工程,使用64台200万的IPC以及两台64路NVR,出现多个通道频繁掉线.黑屏.经初步判断,我们怀疑是网络传输存在问题,决定前往现场排查和解决问题,确保工程交付. 问题现象 到达 ...
- 云服务器重装系统后卡顿,低延迟云服务器发生卡顿丢包检测方法
本地访问云服务器或低延迟云服务器访问其他网络资源,ping发现存在包丢失或忽然高延迟的情况,这可能是由于主干链路拥塞.链路节点故障.服务器负载高.系统设置问题等原因造成的.在消除了云服务器本身的原因之 ...
- FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转...
FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题 算法暂不介绍. 思路:FEC ENCODE 增加冗余包,当无线等网络丢包之后,接 ...
- openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...
openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案 tuning for Data Transfer hosts connected at ...
- 深入剖析iLBC的丢包补偿技术(PLC)
转自:http://blog.csdn.net/wanggp_2007/article/details/5136609 丢包补偿技术(Packet Loss Concealment--PLC)是iLB ...
- 从一起丢包故障来谈谈 nginx 中的 tcp keep-alive
一.故障 基本架构如图所示,客户端发起 http 请求给 nginx,nginx 转发请求给网关,网关再转发请求到后端微服务. 故障现象是,每隔十几分钟或者几个小时不等,客户端就会得到一个或者连续多个 ...
- STP 抖动导致内网丢包
故障现象 内网访问公网出现不规律丢包现象 排查解决方法 1.stp类型 stp为mstp 单实例 2.接口tc报文发送接收 对比接入.汇聚.核心 disp stp tc 报文数量,基本锁定故障位置 3 ...
- linux编译安装网卡驱动详解(网卡丢包)
安装编译网卡驱动 这两天发现一台server丢包很严重,使用cacti监控工具时能获得snmp包,时常又不能,丢包严重,导致使用ssh工具连接过慢,连接数据库访问超时,此时要先确定是中病毒还是网卡问题 ...
- linux ip_conntrack 连接满导致网络丢包
我们的线上web服务器在访问量很大时,就会出现网络连接丢包的问题,通过dmesg命令查看日志,发现如下信息: kernel: ip_conntrack: table full, dropping pa ...
最新文章
- html中name和id的区别 [ZT]
- SQL(四) - 子查询和union以及limit分页
- python灰色模型代码_几行代码搞定ML模型,低代码机器学习Python库正式开源
- set和map去重调用什么方法_【ES6】Set、Map
- 使用 TRESTClient 與 TRESTRequest 作為 HTTP Client 之二 (POST 檔案)
- (48)FPGA状态机描述(一段式)
- ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
- 特斯拉员工入职3天就“偷”代码,悄悄备份6300多 Python 脚本
- [HttpClient]HTTPClient PostMethod 中文乱码问题解决方案(2种)
- 解决win10的WiFi图标消失、win10打开或关闭系统图标网络灰色问题
- app接口制作简单流程
- 计算机er在本科如何争取发论文?
- gmail smtp 535 5.7.8无法登陆解决
- 溢出英语计算机,查看溢出(简述计算机溢出原理)
- 亚马逊aws 服务器删除_如何关闭Amazon AWS上服务器
- G 蛋白偶联受体与小分子化合物的相互作用
- Linux下的搜狗拼音输入法-fcitx sougopinyin
- 免费微信批量公众号采集文章方法
- Windows10 笔记本电脑移动硬盘设备未就绪
- 优化器optimizer,BGD、SGD、MBGD、NAG、AdaGrad、Adadelta、RMSProp、Adam