机器人控制tcp通信参数调优
机器人使用WiFi通信,实现指令下传,状态上传。而WiFi信道平时带宽较稳定,但会在某些时候突然中断,造成ping的延时较高,但可以马上恢复。如果一直ping,则一般情况下ping值很小,但长时间(数十分钟)测试,有个别ping出现1s左右延时。并迅速恢复。这种现象对于日常上网、下载文件来说,是不可见的。对于视频播放来说,这种现象会造成卡顿。所以日常看视频时,在某次缓冲不足时卡顿,应该是WiFi信道上的短时中断造成的。
特别是机器人使用websocket传输,在无线信道短暂中断时,tcp连接并不中断,而是进行了超时重传。tcp的超时等待时间指数增加,多次重传后等待时间是数十秒的数量级。所以造成了WiFi信道中断虽然迅速恢复,但由于偶然的漏掉了tcp的前几次重传,导致已存在的tcp连接假死。需等待数十秒才能恢复。而在这漫长的等待过程中,WiFi通信一切良好,只是机器人的控制和状态显示卡死了。
实验了多款路由,均无法避免此问题。所以进行udp对比实验,使用udp和tcp客户端连接echo服务器,测试传输延时。然后断开WiFi适配器,重连,模拟信道故障。
用Python脚本建立了udp和tcp两个客户端,同时以10Hz的频率向echo服务器发送4KByte的数据包,并记录延时时间。将延时时间记录到日志文件中。
实验结果:
udp比tcp恢复速度快很多,tcp受中断后,一般在4秒、9秒时恢复连接,而udp会提前2秒到4秒恢复。若中断时间再长,则tcp超时断开连接,再恢复速度较快。


图中日志文件记录了udp和tcp的延时,空缺部分为TCP的延时导致,可见,udp由于不等待返回,所以只要网络恢复,就立刻恢复传输。但tcp会延时一定时间。

上图中的链路断开时间较长,tcp超时断开连接,再恢复速度较快。
但如果反复断开连接重连,则有可能使tcp未彻底断开连接,而进入指数退让。测试中最长出现了18秒的延时。而udp在这段时间中断续工作了8秒。

实验结论:
若在真实的低信号质量环境中,tcp不会顺利断开连接,可能会发生更长时间的假死。所以,应调低tcp重传时间或次数,或改用udp传输。
进而在机器人上做了修改tcp重传次数的实验:
机器人控制tcp通信参数调优的更多相关文章
- Linux内核 TCP/IP参数调优
http://www.360doc.com/content/14/0606/16/3300331_384326124.shtml
- Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...
- Linux内核 TCP/IP、Socket参数调优
Linux内核 TCP/IP.Socket参数调优 2014-06-06 Harrison.... 阅 9611 转 165 转藏到我的图书馆 微信分享: Doc1: /proc/sy ...
- Linux Linux内核参数调优
Linux内核参数调优 by:授客 QQ:1033553122 关于调优的建议: 1.出错时,可以查看操作系统日志,可能会找到一些有用的信息 2.尽量不要“批量”修改内核参数,笔者就曾这么干过,结果“ ...
- php-fpm参数调优
关于php-fpm.conf参数调优,只对重要的参数进程调优.其它可参数前辈的. http://php.net/manual/zh/install.fpm.configuration.php (官方的 ...
- LightGBM介绍及参数调优
1.LightGBM简介 LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法.它可以说是分布式的,高效的,有以下优势: 1)更快的训练效率 2)低内存使用 3)更高的准确率 4) ...
- mysql日常运维与参数调优
日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事 ...
- 看MySQL的参数调优及数据库锁实践有这一篇足够了
史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...
- Spark Shuffle原理、Shuffle操作问题解决和参数调优
摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...
随机推荐
- Swift_闭包
Swift_闭包 点击查看源码 闭包优化 //闭包优化 func testClosures() { //函数做参数 排序 let names = ["XuBaoAiChiYu", ...
- L2-001 紧急救援(dijkstra算法)
题目: 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市 ...
- CF1066EBinary Numbers AND Sum(前缀和,二进制)
题目大意 现在,给你两个位数为 n 和 m 的两个二进制数a,b,现在,我们要进行如下操作: 计算a&b 答案累加上一个操作的值 bbb右移一位,最后一位直接舍弃 现在,请你算出最终的答案,并 ...
- centos7.3上编译安装percona5.7.18
一,删除操作系统自带mariadb yum remove mariadb 二,下载需要的安装包 percona-toolkit-3.0.3-1.el7.x86_64.rpm boost_1_59_0. ...
- Ajax的open()方法
Ajax的open()方法有3个参数:1.method:2.url:3.boolean: 参数1有get和post两个取值 参数2表示什么就不用说了 重点说下第3个参数:boolean的取值 当该bo ...
- Oracle_11g桌面版 中解决被锁定的scott 教学数据库的方法
Oracle 11g中修改被锁定的用户:scott 在安装完Oracle10g和创建完oracle数据库之后,想用数据库自带的用户scott登录,看看连接是否成功. 在cmd命令中,用“sqlplus ...
- 利用 Python 插件 xlwings 读写 Excel
Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...
- mysql的数据类型与表约束
数据类型 (详细数据类型请参考:http://www.runoob.com/mysql/mysql-data-types.html) 数字 整型 tinyint int bigint 小数: flo ...
- linux popen 获取 ip test ok
任务:unix,linux通过c程序获取本机IP. 1. 标准I/O库函数相对于系统调用的函数多了个缓冲区(,buf),安全性上通过buf 防溢出. 2.printf 这类输出函数中“ ”若包含“记得 ...
- Python3爬虫(十七) Scrapy框架(一)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 1.框架架构图: 2.各文件功能scrapy.cfg 项目的配置文件items.py 定义了Item数据结构,所有 ...