lo口环路问题分析
流程如下,collecter抓取网卡lo和wlan0数据,其中lo口无数据,wlan0是笔记本上网网口,然后按自定义协议把数据包通过lo口发给后端dispatch进行分发!

这种模式下,抓包程序每经过一段时间,lo口就会开始抓到超出上层应用协议的数据包(上层应用最大支持长度0xffff),导致collecter和dispatch间断链重连。如果停掉collecter向后转发,则collecter抓取的数据包长度正常,用tcpdump验证,抓取wlan0口数据包平均包长在500B左右,lo口无数据;
启动向后转发,collecter只抓lo口,同时配置collecter读取一个只有数据包的pcap文件作为初始输入,原始数据包如下:

tcpdump从lo口抓包, 发现通过lo口转发到后端的数据,会被collecter捕获然后再又通过lo口发出,形成环路,如下所示:
1. 第一个带数据的是第11个数据包,前面的一些包是鉴权和协商!蓝色部分前8字节是协议部分!可以看到这时捕获正常(数据66B + 8B协议头 = 74B)。

2. 第11个数据包发出后就被捕获,看下面第13个数据包的承载部分,collecter接收到这个数据后,会额外打上协议头再转发(新的长度 = 第11个包长度 + 8B协议头 = 148),从这看出数据开始形成环路:

查看lo口MTU和tcp协商的MSS如下:


可以看到lo口MTU过大,由于lo环路,会导致tcp承载数据越来越大。对上层协议来说,由于协议缓冲区最大长度为65535,当捕获的数据包中应用协议长度大于(65535 - 8)时,就会产生错误,导致断链!
解决方法:
1. 调整部署,捕获数据的网口应该专用于数据接入,数据发送使用其它网口!
2. 调小lo口MTU,这样只能避免断链问题,错误会越积越多!
待验证:
有同事测试发现,大流量下lo口(mtu默认为65536)数据转发,cpu利用率很低(2.4G服务器8核24线程, 无法跑满单核CPU, 占比3%左右),导致发送线程睡眠,阻塞报文,程序性能很低。后调整MTU至1500后cpu利用率提升,程序性能提高三倍!
lo口环路问题分析的更多相关文章
- cc2530-----串口透明传输分析
Zigbee协议栈学习之串口透明传输实验(SerialApp)流程分析 第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络 //第一步:Z-Stack 由 main()函数开始执行, ...
- 实用防火墙(Iptables)脚本分析
实用防火墙(Iptables)脚本分析 --Redhat,CentOS,Ubuntu等常见Linux发行版中都会预装Iptables防火墙,大多数初学者设置起来由于对这款软件比较陌生,设置起来比较困难 ...
- 【转载】FPGA静态时序分析——IO口时序
转自:http://www.cnblogs.com/linjie-swust/archive/2012/03/01/FPGA.html 1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟约束 ...
- FPGA静态时序分析——IO口时序(Input Delay /output Delay)
1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确 ...
- [转载]Linux中的网络接口及LO回环接口
转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...
- 精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十章:针对潜在的网站分析陷阱的最佳解决方案 是时候去处理网站分析中最棘手的一些问题了,然后获得属于你的黑带,这是成为分析忍者的 ...
- Linux中的lo回环接口详细介绍
1.linux的网络接口之扫盲 (1)网络接口的命名 这里并不存在一定的命名规范,但网络接口名字的定义一般都是要有意义的.例如: eth0: ethernet的简写,一般用于以太网接口. wifi0: ...
- FPGA静态时序分析——IO口时序(Input Delay /output Delay)(转载)
转载地址:http://www.cnblogs.com/linjie-swust/archive/2012/03/01/FPGA.html 1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟 ...
- WIFI万能钥匙协议分析
WIFI万能钥匙协议分析 需求: 上android 市场下载任意一款,wifi万能钥匙 软件,对其进行 协议分析和逆向,达成如下结果:通过对软件的分析,完成自动化爬虫,爬wifi万能钥匙的wifi库, ...
随机推荐
- 20145238-荆玉茗 《Java程序设计》第二周学习总结
20145238 <Java程序设计>第2周学习总结 教材学习内容总结 关于一些格式方面的问题: 1.关键字:在定义java文件名的时候要避免这些关键字的出现,因为他们在java程序语言中 ...
- ioc 的好文章 转自 GavinJun
https://www.cnblogs.com/fuchongjundream/p/3873073.html
- [转] JAVA中读取网络中的图片资源导入到EXCEL中
需求 导出人员的信息并且加上人员的照片至EXCEL中 完整的代码 //创建一个表格 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...
- Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points
Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple ...
- 关于requireJS的同步加载和异步加载
这篇随笔主要记录require('name')和require(['name1','name2'])在同步和异步加载使用的区别 1.require('name')同步加载模块的形式 define(fu ...
- centos安装django
1.如果默认安装的是python2.6,先升级至python2.7 参考:http://www.cnblogs.com/tiger2soft/p/5677843.html 2.安装pip 先下载get ...
- C# 复合赋值操作符
前面讲过如何使用算术操作符来创建新值.例如,以下语句使用操作符+来创建比变量answer大42的一个值,新值将写入控制台: Console.WriteLine(answer + 42); 前面还讲过如 ...
- lambda函数,内置map()函数及filter()函数
8.1 lambda函数 作用及意义: 1.没必要专门定义函数,给函数起名,起到精简的效果 2.简化代码的可读性 def ds(x): return 2 * x + 1 ds(5) ---11 g ...
- TryParse()的用法
DateTime dt = new DateTime(); DateTime.TryParse(txtName.text.trim(),out dt); string str1 = dt.ToStri ...
- C# 委托知识总结【转】
1.什么是委托,为什么要使用委托 我正在埋头苦写程序,突然想喝水,但是又不想自己去掉杯水而打断自己的思路,于是我就想让女朋友去给我倒水.她去给我倒水,首先我得让她知道我想让她干什么,通知她之后我可以继 ...