当前位置: 首页 > news >正文

tcp westwood 比 reno,cubic 好在哪

今天说说 tcp 韦斯特伍德,和昨天 dctcp 的路子一样,主要还是一个观点,信息带来性能收益。

reno,cubic 仅做孤立 aimd,没有将 rtt 用到极致,信息相当于浪费掉了,而 westwood 却充分利用 ack 和 rtt 叠加计算了一个 bandwidth,简称 bw,并在过程中冒泡 minrtt,来看看 bw * minrtt 是什么,就是这条流的实际有效的 inflight,既然它有效,为何不随行它呢,所以在丢包恢复后还需要从 (1 - β) 个 cwnd 重新开始吗:
在这里插入图片描述

简单建模,然后照例用 matplotlib 对比:
w:cwnd
x:goodput
y:drop-model
z:动态 buffer 占量
R:propagation delay
C:bandwidth
α:静态 buffer 占量

d w d t = { 1 , y ≤ 0 x ⋅ R − w , y > 0 \dfrac{dw}{dt} = \begin{cases} 1, & y \leq 0 \\ x\cdot R-w, & y \gt 0 \end{cases} dtdw={1,xRw,y0y>0

d x d t = C ⋅ w w + ( α + ⋅ z ) − x \dfrac{dx}{dt}=C\cdot \dfrac{w}{w+(\alpha+\cdot z)}-x dtdx=Cw+(α+z)wx

z = u p d a t e z ( z , y 1 , y 0 ) z = update_z(z, y_1,y_0) z=updatez(z,y1,y0)

def update_z(z, y_curr, y_prev):if int(y_curr) == int(y_prev):z = y_currreturn z

简单解释一下 update_z 函数,y 标识是否丢包,z 是动态 buffer 占有量,这里的模拟方式很简单,如果 y 是随机丢包,那么 z 不受影响,如果 y 是拥塞丢包,就让 y 正相关于 z,采用的方法是简单 z = y。

OK,简单设 reno,cubic 的 β = 0.5,模拟如下:
在这里插入图片描述
可看出锯齿的变化,westwood 并不太受随机丢包的影响,因为它保有实际测量 bw。但在实践中,这种效果依赖测量精度和信息本身的准确度,而我们知道,tcp 的信息精度并不高。

说说 westwood 的实现,由于早期 Linux 内核并不支持高精度时间戳,与 vegas 一样,Linux 内核的 tcp_westwood.c 也是个阉割版:

  • bw 计算非常粗糙,应该用 bbr 使用的那套新基础设施来重构;
  • 不支持 pacing,这是拜早期 Linux 内核不支持高精度时钟所赐。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MinIO:高性能轻量云存储轻松搭建与springboot应用整合实践
  • JavaWeb学习——mybatis
  • 过滤器与拦截器的区别与应用
  • 2.外部中断(EXTI)
  • 猫头虎分享:从零开始掌握ChatGPT的实用技巧与多样应用
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • Python网络爬虫面试题3
  • uniapp0基础编写安卓原生插件和调用第三方jar包(Ch34的jar包)和如何解决android 如何Application初始化
  • 【golang】Golang手写元组 tuple | golang tuple
  • Oracle(42) 什么是动态SQL?
  • 24暑假算法刷题 | Day27 | 贪心算法 I | LeetCode 455. 分发饼干,376. 摆动序列,53. 最大子数组和
  • comfyui老照片修复工作流,直接复制到comfyui中即可使用
  • JavaScript基础——JavaScript变量名称命名规范
  • 【Golang 面试 - 进阶题】每日 3 题(六)
  • 【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [NodeJS] 关于Buffer
  • Angular Elements 及其运作原理
  • CSS居中完全指南——构建CSS居中决策树
  • download使用浅析
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • jdbc就是这么简单
  • PAT A1017 优先队列
  • PermissionScope Swift4 兼容问题
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring-boot 启动时碰到的错误
  • 给第三方使用接口的 URL 签名实现
  • 关于字符编码你应该知道的事情
  • 区块链技术特点之去中心化特性
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 一个完整Java Web项目背后的密码
  • Spring Batch JSON 支持
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # C++之functional库用法整理
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (三)docker:Dockerfile构建容器运行jar包
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十七)Flink 容错机制
  • (算法)N皇后问题
  • (学习日记)2024.01.19
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Scala的“=”符号简介
  • (转)scrum常见工具列表
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net 4.0并行库实用性演练
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net Core 中间件与过滤器
  • .NET Core中如何集成RabbitMQ
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 流——流的类型体系简单介绍
  • .NET/C# 项目如何优雅地设置条件编译符号?