最近开发一个项目,发现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问题之一(丢包)相关推荐

  1. 网络丢包现象分析处理指导书5

    sniffer简明教程 xiong2127 51cto技术博客 sniffer是由NAI公司提供的强大的协议分析仪,完整的sniffer系统,除了我们经常使用的以太网模块外,还具有广域网模块,广域网模 ...

  2. ping 丢包 网络摄像头_视频监控系统的摄像头掉线看交换机连接注意事项

    某智创园做了一个监控工程,使用64台200万的IPC以及两台64路NVR,出现多个通道频繁掉线.黑屏.经初步判断,我们怀疑是网络传输存在问题,决定前往现场排查和解决问题,确保工程交付. 问题现象 到达 ...

  3. 云服务器重装系统后卡顿,低延迟云服务器发生卡顿丢包检测方法

    本地访问云服务器或低延迟云服务器访问其他网络资源,ping发现存在包丢失或忽然高延迟的情况,这可能是由于主干链路拥塞.链路节点故障.服务器负载高.系统设置问题等原因造成的.在消除了云服务器本身的原因之 ...

  4. FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转...

    FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题 算法暂不介绍. 思路:FEC ENCODE 增加冗余包,当无线等网络丢包之后,接 ...

  5. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...

    openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案 tuning for Data Transfer hosts connected at ...

  6. 深入剖析iLBC的丢包补偿技术(PLC)

    转自:http://blog.csdn.net/wanggp_2007/article/details/5136609 丢包补偿技术(Packet Loss Concealment--PLC)是iLB ...

  7. 从一起丢包故障来谈谈 nginx 中的 tcp keep-alive

    一.故障 基本架构如图所示,客户端发起 http 请求给 nginx,nginx 转发请求给网关,网关再转发请求到后端微服务. 故障现象是,每隔十几分钟或者几个小时不等,客户端就会得到一个或者连续多个 ...

  8. STP 抖动导致内网丢包

    故障现象 内网访问公网出现不规律丢包现象 排查解决方法 1.stp类型 stp为mstp 单实例 2.接口tc报文发送接收 对比接入.汇聚.核心 disp stp tc 报文数量,基本锁定故障位置 3 ...

  9. linux编译安装网卡驱动详解(网卡丢包)

    安装编译网卡驱动 这两天发现一台server丢包很严重,使用cacti监控工具时能获得snmp包,时常又不能,丢包严重,导致使用ssh工具连接过慢,连接数据库访问超时,此时要先确定是中病毒还是网卡问题 ...

  10. linux ip_conntrack 连接满导致网络丢包

    我们的线上web服务器在访问量很大时,就会出现网络连接丢包的问题,通过dmesg命令查看日志,发现如下信息: kernel: ip_conntrack: table full, dropping pa ...

最新文章

  1. html中name和id的区别 [ZT]
  2. SQL(四) - 子查询和union以及limit分页
  3. python灰色模型代码_几行代码搞定ML模型,低代码机器学习Python库正式开源
  4. set和map去重调用什么方法_【ES6】Set、Map
  5. 使用 TRESTClient 與 TRESTRequest 作為 HTTP Client 之二 (POST 檔案)
  6. (48)FPGA状态机描述(一段式)
  7. ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
  8. 特斯拉员工入职3天就“偷”代码,悄悄备份6300多 Python 脚本
  9. [HttpClient]HTTPClient PostMethod 中文乱码问题解决方案(2种)
  10. 解决win10的WiFi图标消失、win10打开或关闭系统图标网络灰色问题
  11. app接口制作简单流程
  12. 计算机er在本科如何争取发论文?
  13. gmail smtp 535 5.7.8无法登陆解决
  14. 溢出英语计算机,查看溢出(简述计算机溢出原理)
  15. 亚马逊aws 服务器删除_如何关闭Amazon AWS上服务器
  16. G 蛋白偶联受体与小分子化合物的相互作用
  17. Linux下的搜狗拼音输入法-fcitx sougopinyin
  18. 免费微信批量公众号采集文章方法
  19. Windows10 笔记本电脑移动硬盘设备未就绪
  20. 优化器optimizer,BGD、SGD、MBGD、NAG、AdaGrad、Adadelta、RMSProp、Adam

热门文章

  1. 实战ItemTouchHelper仿网易新闻客户端自定义栏目页面
  2. 如何从头开始创建可用于生产环境的Webpack 4配置
  3. HTMl载入FLV格式网页视频播放器
  4. Window7使用虚拟桌面
  5. 如何在IDM中设置代理服务器
  6. 找回任务栏显示桌面图标及Win7如何显示快速启动栏
  7. opencv将RGB转成YIQ
  8. 瘦身长腿、日新小清新治愈系、lomo效果
  9. ffmpeg 视频转码
  10. buuctf XCTF October 2019 Twice SQL Injection 二次注入原理+题解