机器人使用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重传次数的实验:

cd /proc/sys/net/ipv4/
# cat tcp_retries2
15
echo 5 > tcp_retries2
操作机器人走到走廊,信号中断,然后退回,WiFi信号恢复,数据很快恢复,与重传15次对比,恢复速度明显加快
 

机器人控制tcp通信参数调优的更多相关文章

  1. Linux内核 TCP/IP参数调优

    http://www.360doc.com/content/14/0606/16/3300331_384326124.shtml

  2. Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...

  3. Linux内核 TCP/IP、Socket参数调优

    Linux内核 TCP/IP.Socket参数调优 2014-06-06  Harrison....   阅 9611  转 165 转藏到我的图书馆   微信分享:   Doc1: /proc/sy ...

  4. Linux Linux内核参数调优

    Linux内核参数调优 by:授客 QQ:1033553122 关于调优的建议: 1.出错时,可以查看操作系统日志,可能会找到一些有用的信息 2.尽量不要“批量”修改内核参数,笔者就曾这么干过,结果“ ...

  5. php-fpm参数调优

    关于php-fpm.conf参数调优,只对重要的参数进程调优.其它可参数前辈的. http://php.net/manual/zh/install.fpm.configuration.php (官方的 ...

  6. LightGBM介绍及参数调优

    1.LightGBM简介 LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法.它可以说是分布式的,高效的,有以下优势: 1)更快的训练效率 2)低内存使用 3)更高的准确率 4) ...

  7. mysql日常运维与参数调优

    日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事 ...

  8. 看MySQL的参数调优及数据库锁实践有这一篇足够了

    史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...

  9. Spark Shuffle原理、Shuffle操作问题解决和参数调优

    摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...

随机推荐

  1. Wireshark抓取Mqtt报文

    安装版本较高的Wireshark,我的版本是2.4.6,然后在编辑--> 首选项--> 协议中找到MQTT,然后将端口改为你MQTT服务器的端口,然后就可以在抓包中抓到MQTT了

  2. 针对jquery的ajax中的参数理解

    1. url 发送请求的地址.为空表示当前页. $.ajax({ type: "post", data: studentInfo, contentType: "appli ...

  3. jquery闭包概念

    //闭包:有参数的加载事件(空参数形式)(function($){ alert("123");})(jQuery); //有参数的加载事件(function($){ alert($ ...

  4. 颜色rgba、16进制、10进制互相装换

    rgba转16进制: function RGBToHex(rgb){ var regexp = /[0-9]{0,3}/g; var re = rgb.match(regexp);//利用正则表达式去 ...

  5. django-models 数据库取值

    django.shortcuts import render,HttpResponse from app01.models import * # Create your views here. def ...

  6. ssh_key登录服务器,免密码登录

    最近使用ssh远程登录服务器每次都要输入密码实在是太麻烦了,我这个懒人就想到了查了一下怎么用ssh-key来实现我的梦想. 使用密钥来登录 原理如下: 客户端向服务器发出请求.服务器收到请求之后,先在 ...

  7. ACM1002:A + B Problem II

    Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...

  8. C语言,初次见面~

    C语言是一门介于低级语言(如汇编语言)和高级语言(如Java,Python)之间的一门编程语言,所以它兼有两类语言的一些优点,并且具有自身的一些特点. 1.c语言的高效性.c语言具有通常是汇编语言才具 ...

  9. 24-集成ASP.NETCore Identity采用EF

    1-增加IdentityServer4.AspNetIdentity nuget包 2- StartUp.cs启用增加相应的代码  .AddAspNetIdentity<ApplicationU ...

  10. 天津Uber优步司机奖励政策(1月4日~1月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...