浙江温州皮鞋湿,下雨进水不会胖!9月份错过了深圳的超猛台风,12月8号又错过了杭州的超猛大雪,当天却在深圳迎来了赵正则,马上2019年了,又一次错过了杭州的大雪,回到了深圳过元旦…


无奈啊无奈,去年夏天我为如题展示的问题折腾的寝食难安,然而并无解,可能那是一个工作任务吧,什么事情只要成了工作任务,就索然无味了…

现如今,工作重点已经远离了 判定无线网络对TCP的影响 ,偶然的机会,我反倒又重新想起了往事,不得不探究一番LTE网络对TCP的影响到底是什么。


我就长话短说,不使用太多的术语,简单描述一下。


网络结构

要想移动就必须无线,不然拖着线缆走来走去,迟早得把自己缠进去。

为了支持移动终端无线上网,必须有很多固定的基站,每个基站释放的信号辐射一定的区域,所有的基站构成一个像马蜂窝一样的 移动通信信号网络(图片百度得之,盗图所得)

每一个小孔都由一个基站负责,当然在无线空域。小孔之间是会有重叠的,而这种重叠区域,正是移动网络中关键行为,移交行为的执行区域,但是在移动网络中,任何行为都是 但不经常,也不绝对 的!即便你不用去推敲多普勒效应,也能从自己频繁掉线的经历中可见一斑!

每一个基站都有 转发所有到达其辐射区域的移动终端所收发的数据 的任务,与此同时,它还必须负责实时监控 有哪些移动终端属于自己信号所能辐射的区域 以及 哪些移动终端正在进入或者离开自己信号所能辐射的区域, 后者被称为 移交任务

基站移交过程

移交,这是无线移动网络中最最关键的过程,可以说无线移动网络绝大多数和固网有所区别的行为都是由这个所谓的移交过程造成的。

由于移动终端随时随地在移动过程中,而其所在的空间的每一个点都由一个或者多个基站辐射的信号所覆盖,随着终端的移动,每一个基站的信号强度会有所变化:

基站会根据和移动终端协商的结果,来决定要不要把该移动终端 转交 给其它 更适合服务它 的基站,比如该基站比当前基站的信号更好,诸如此类。

所有的行为都发生在时空当中,那么移交过程的时序图,大致就是下面的样子:

以此为基础,我们就知道在无线移动网络中TCP怪异行为的成因为何了。

为什么RTT抖动

无线网络的介质不像固网那么可靠,这是一定的。

无线网络的介质无非就是一些电磁波,这玩意儿非常脆弱,非常容易受到各类干扰,除了你的移动终端距离基站的距离不同会导致信号强弱差异之外,还会有其它因素影响:

  • 天气因素,比如大风,闪电
  • 有人提着一台无线设备从你身边走过
  • 地形因素,包括身边开过一辆汽车
  • 设备天线的方向

是不是很复杂?!

如果移交过程一如既往的顺利,那么RTT几乎不会发生变化,然而在无线网络情况下,基于上述的原因,移交行为往往并不仅仅由于距离变化而发生,此外,由于电磁波信号的脆弱性质,在移交的过程中,消息也不是能保证顺利到达,任何一个消息都可能会丢失。

这导致,如果信令丢失,唯一能让移动终端能重新接入网络的机制就是其主动探测机制,其中为了避免信令延迟到达,其权衡就是使用定时器机制,而这个定时器便是RTT抖动的根源!

而TCP的RTO计算依赖于RTT,如果RTT是不准的,那么RTO将会是随意的,这极大影响着TCP的丢包判断。

如果这个移动终端重新扫描基站的定时器延时数量级达到了TCP连接的RTO数量级,极有可能还会触发TCP的重传,这显然是丢包误判,因为此时只是ACK在基站已经找不到移动终端而被丢弃,所以让移动终端误以为数据包的丢失,或者是反向路径上发生同样的事情。

总之,移交过程让TCP对丢包的判断变得复杂!

为什么乱序多

信令的传输和数据的传输总是分开的,它们二者之间应该是解耦合的,这是优秀的设计,但是这种设计也会对特有的协议带来一些问题,比如要求顺序传输的TCP。

其实TCP的规范并不要求顺序传输,它只是要求顺序接收而已,然而在实现上,如果你没有让接收端觉得你在顺序传输,那么发送端将会重传已经传过的数据,这意味着,实际上,TCP 要求 发送端 必须按照顺序传输数据

然而正是由于移动网络中移交过程的存在,导致在移交的期间,可能会有多个基站在独立帮忙传输移动终端的数据,它们之间并没有做基于数据流序列号的同步机制,这导致了乱序的发生!


越是将缓存当带宽的发送行为,比如CUBIC这种,就越是会收到乱序的影响,而BBR这种算法,本来就保持不排队政策,所以数据乱序的可能性相对少很多。

本质上的原因,就在于, 信令和数据是分别发送和接收的, 信令只负责控制的部分,有可能信令已经判断无线连接失效了,可是数据依然保留在缓存中继续被发送,而此时移动终端已经连接上其它的基站在发送数据了。

TIPs:移动场景下,千万不要填充缓存!

ACK聚合

综上,TCP的ACK聚合能在一定程度上避免RTT抖动和乱序,然而这会减慢ACK时钟报时频率,影响CCA来做决策。

成也萧何,败也萧何!


可见,传统的TCP遇到如今当下的无线移动网络时,损的一逼啊,我们不希望底层的行为会影响到TCP层面的丢包判定以及重传,显然,基站移交导致的RTO并不是真的丢包所导致,但是 网络协议栈的分层设计 法则让我们没法大动干戈…在适应无线移动网络这方面,BBR是不是比CUBIC更好呢?

这却是不一定的。

我们不能仅仅关注丢包判定这方面,我们还要关注收敛速度。BBR对移动网络的底层移交行为是 无感知 的,它能意识到的仅仅就是 丢包 而已!这种策略导致的结果到底是好还是坏,我觉得是坏!

首先,我觉得BBR统计最小RTT的方式在移动网络要有所改变,这是最必要的,其次,计算cwnd的算法必须要有所改变,不能仅仅是乘以2,因为ACK聚合会导致空窗期,这个已经在BBRv2里解决了,甚好。

接下来,我也不知道会发生什么。


疯子说了,待明年,我们就终于又回到魔都的地界里去了,所有的事情都已经过去,摧毁了当初南下的原因,如今回去便是自然而然。虽然不是回到嘉定,但杭州至少也是我们经常去的地方,也是满满的回忆。

开车两个小时多就能到嘉定,吃个洲桥的羊肉串外加一顿火锅,也不错。


浙江温州皮鞋湿,下雨进水不会胖!

浅析LET无线移动网络为什么RTT抖动大为什么数据包乱序多相关推荐

  1. golang 捕获堆栈信息_【网络数据安全】为什么时间戳对于数据包捕获很重要

    网络上发生的所有事件都是时间敏感的,这就是为什么在讨论数据包捕获和分析时,给数据包加上时间戳非常重要.此功能不仅可以防止和分析网络攻击,而且还能让你检查趋势和网络延迟. 网络数据包时间戳可用于调查以某 ...

  2. linux网络接口数据重新封包,Linux网络之设备接口层:发送数据包流程dev_queue_xmit...

    写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的netdevice层面,来贯穿interface传输数据包的流程,kernel 博大精深,这也仅仅是一点个人愚见,作为一 ...

  3. 计算机网络个人项目设计:java实现,基于Jnetpcap的网络嗅探抓取,发送数据包单机程序(模仿wireshark)

    开发环境 java javaFX(fxml加控制器的那种,用到图形化的JavaFX Scene Builder设计界面) 用到封装好的jar包:Jnetpcap,需安装winpcap idea开发 基 ...

  4. 简单易懂的Socket TCP网络通讯知识-消息协议和数据包

    不管用的是什么样的协议方式,基本通讯的原理 到底层 都是 byte[]数组 传递. 1.协议的定义 协议本身只是 通讯时候 前后端 定义的变量类型和顺序的集合. 比如说,要做一个登陆的消息传递, 需要 ...

  5. TTL、Ping包最大字节数、网络时延、抖动、丢包率,看完瞬间变大神!

    Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令,用于测试网络连接量,以及DNS解析是否正常.通过向特定的目的主机发送 ICMP  Echo 请求报文,测试目的站是否可达及了解其有关状 ...

  6. Zigbee 无线传感网络 无线通信技术 协议体系结构 OSAL

    什么是zigbee 无线传感网络的无线通信技术可以采用zigbee,蓝牙,wifi和红外 Zigbee技术是一种短距离,低复杂度,低功耗,低成本,低数据速率的双向无线通信技术,是一组基于IEEE802 ...

  7. 网络延迟和数据包丢失对网络性能的影响—Vecloud微云

    网络性能指标一般指的是延时,丢失和抖动.今天我们将探讨它们(特别是延时和数据包丢失)是如何影响应用程序性能. 几乎所有应用程序都使用TCP,即传输控制协议,将其数据从A传输到B.互联网流量的85%是T ...

  8. tcpdump 网络数据包分析工具

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  9. 探究!一个数据包在网络中的心路历程

    来自:小林coding 前言 想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题. 还别说,这真是挺常问的这题,前几天坐在我旁边的主管电话面试应聘者的时候,也问了这个 ...

最新文章

  1. 专属含PCR抑制剂的环境样本微生物拷贝数定量的最佳解决方案!
  2. Linux安装Hbase并验证
  3. div+css+theme
  4. POJ 2800 垂直直方图 解题报告
  5. 用电脑更新手机ios系统_手机系统频繁提示更新,到底要不要更新?
  6. 与自定义词典 分词_【201110】ElasticSearch实现中文分词查询
  7. 富文本编辑器的配置使用
  8. PCB genesis自制孔点 Font字体实现方法
  9. squid端口转发_HTTP隧道(经典版)Squid 接入指南| 阿布云 - 为大数据赋能
  10. 程式CMS V4黑色炫酷DJ音乐门户网站源码模板
  11. 商业的本质 + 社交电商思考
  12. passing '' as 'this' argument discards qualifiers [-fpermissive]
  13. DongDong认亲戚 并查集+STL
  14. mac系统升级血泪史之根目录创建文件夹问题
  15. 【Linux】logrotate切割Tomcat日志并轮转(Flume采集准备工作适用)
  16. MBR膜持续发力 守护绿水青山
  17. 给你一个水杯你怎么测
  18. vue里面变量名前面加三个点代表什么意思?
  19. 【安装】sublime text 3 汉化插件
  20. Rust 引入其他的 rs 文件

热门文章

  1. 加盐hash保存密码的正确方式
  2. 逻辑回归应用之Kaggle泰坦尼克之灾
  3. 微信小程序 多选单机变色
  4. 解决无法将iso文件完整移动到centos7虚拟机中
  5. 一个activity显示另一个activity,LocalActivityManager实例化不是通过ActivityGroup,
  6. 意大利国家旅游局官方小程序正式上线,意大利主流景点“一网打尽”
  7. 上海虹口区python培训
  8. mac关闭暂停播放键打开iTunes
  9. 感恩节,感谢你朋友!
  10. [计算机图形学]材质与外观(前瞻预习/复习回顾)