鉴赏 tcp vegas

2023-12-21 01:01
文章标签 tcp 鉴赏 vegas

本文主要是介绍鉴赏 tcp vegas,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

优秀的 vegas 之后,再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas。

从下图可看出所有的(对,所有的) aimd 都毫无伸缩性(z:吞吐,x:rtt,y:丢包率,由 buffer_size 直接决定):
在这里插入图片描述

一下就可看出 rtt 和 buffer 主宰了效率,所有的 aimd 定制算法都在调节 alpha 拧巴这两者,比如照顾大 rtt 或浅 buffer,本质上就是在调整 ai 和 md 的系数,最终调整 alpha 展开成别的算法,cubic,scalable,htcp 等无不如此。

aimd 是个非常公平的控制算法,但它对于拥塞控制确实也只是公平收敛的意义,它甚至不控制拥塞,相反,对于大多数 aimd 实例,比如 reno,cubic,它控制拥塞的手段是制造拥塞。

vegas 直接控制拥塞,而不搞别的那些复杂玩意儿。vegas 监控两个变量:

  • expected = delivered / basertt,以全局最小 basertt 追踪,它表示无拥塞吞吐。
  • actual = delivered / lastrtt,实测吞吐。

expected - actual 自然就是实测吞吐和期望吞吐的差异,拥塞控制的目标就是追平这个差异,不同的追平方案就是不同的拥塞控制算法。vegas 的方法既有效又巧妙。

vegas 定义 diff = (expected - actual) * basertt,很显然,它的意思是实际和预期的报文数量。如果实际和预期有差异,多出来的报文一定在 buffer 中,巧妙之处在于:

  • diff < beta 避免了拥塞。
  • diff > alpha 兼备了探测。
  • alpha,beta 只和 basertt 和 lastrtt 比例有关,公平收敛。

观察 diff < beta,其中 diff 具有全局意义,vegas 巧妙地将全局的 queuing 时间转换成单独流 actual 的下降,而 actual 下降本就由全局拥塞导致。

actual 下降由两种原因导致,自己造成或它者造成,要么由于自己 cwnd 冲高导致 expected 过高而显得 actual 相对下降,这种情况下 cwnd 需要降低,要么由于有其它流量侵入导致带宽被分享,这种情况下 cwnd 降低体现收敛,无论哪种情况都避免了拥塞。

diff 计算出来的是全局的 buffer 占率,而不是单独一条流的,vegas 所有计算都在全局意义上进行:
在这里插入图片描述
所以,vegas 的公平收敛非常完美:
在这里插入图片描述

再看 diff > alpha,它确保 buffer 中始终有一些报文以及时感知带宽变化。bbr 操作点选在 rtt,带宽正交点实际上是个错误,完全清空 buffer,如果有流量退出,bbr 不得不采用定时 probe 的方式发现新带宽,而 vegas 则能自动发现。alpha 越大,其探测性越强,但代价是 queuing 时间,这正解释了 bbr 论文中 rtt 和带宽的正交性导致的测不准原理。

干嘛不松弛一下,索性利用这个测不准呢。

有趣的是,vegas 没被推广正是因为 “不公平”,vegas 面对 aimd 流排队会不断退让。然而除了实验室数据理论分析,没有任何成规模的现网数据佐证它。全局统计意义上,只要 aimd 流足够多(足够异步),虽然每一条流都经历锯齿起伏,但整体队列长度是稳定的,这意味着 vegas 调整好 alpha,beta 以适配这个队列,结果就 ok,因为不存在不断增加的队列。

最后谈一下实现。linux kernel 的 tcp vegas 其实是个瘸子,它没有实现精准测量,相反,它采用了 2.6 内核粗糙的计数方法。任何 delay-based 算法正确实现方式都该使用 net/ipv4/tcp_rate.c 里 rs->delivered 与 rs->interval_us 做除法才算数,而不是直接 cwnd / srtt。此外,linux tcp 也没有实现 vegas 独特的时间序重传算法以及慢启动算法,这种重传算法和 bbr 依赖的 rack,pacing control 几乎一致了,缺失的本质原因在于 linux 内置了 loss-based cc 状态机,非常难改。

为什么写这个文章重复讲一个不被看好的 vegas,毕竟以前写过好多次 vegas 了。因为我看到 windows 竟然支持 bbr 了,有个评论提到了 vegas 是好的:
在这里插入图片描述

我也是这么认为的,所以难免想单独再多说几句,就写了本文。

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

这篇关于鉴赏 tcp vegas的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518147

相关文章

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

JAVAEE初阶第七节(中)——物理原理与TCP_IP

系列文章目录 JAVAEE初阶第七节(中)——物理原理与TCP_IP 文章目录 系列文章目录JAVAEE初阶第七节(中)——物理原理与TCP_IP 一.应用层重点协议)1. DNS2 .NAT3. NAT IP转换过程 4 .NAPT5. NAT技术的缺陷6. HTTP/HTTPS7. 自定义协议 二. 传输层重点协议 1 .UDP协议 2.1.1 UDP协议端格式 2.1.2 UD

深入理解TCP通信

这大概是自己博客上面第三次写TCP通信demo了,总是写同样的内容也不太好啊,不过每一次都比前一次进步一点。这次主要使用了VIM编辑工具、gdb调试、wireshirk、netstat查看网络状态。 参考《C++服务器视频教程》、《Unix网络编程》 一、VIM常用命令 vim server.cpp #打开一个文件:w 写入文件:wq 保存并退出:q! 不保存退出显示行号

浏览器工作原理(3)-TCP协议文件如何从服务器到浏览器

浏览器工作原理-TCP协议,文件如何从服务器到浏览器 本周继续学习浏览器工作原理及实践,本次内容来看一下TCP协议确保文件完整的送到至浏览器 First Page 是指页面加载到首次开始绘制的时长,而影响这个性能指标的一个重要原因是网络加载速度,网络传输协议无论使用http还是websocket,都是基于TCP/IP的,所以有必要了解一下TCP/IP,对于web的性能调优和问题定位都有很

应用层简单实现udp / tcp网络通信

一、常见网络接口总结 1、创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器) int socket(int domain, int type, int protocol); domain:AF_INET:网络通信,AF_LOCAL:本地通信 type:UDP:SOCK_DGRAM,TCP:SOCK_STREAM protocol:协议编号一开始设0 返回值:文件描

TCP/IP协议栈详解及其在现代网络中的应用

在当今数字化时代,网络已成为我们生活中不可或缺的一部分。无论是社交、工作还是娱乐,网络都在背后发挥着至关重要的作用。而这一切的实现,都离不开TCP/IP协议栈。本文将详细介绍TCP/IP协议栈的结构、各层功能以及它在现代网络中的应用。 什么是TCP/IP协议栈? TCP/IP协议栈,全称为传输控制协议/互联网协议栈(Transmission Control Protocol/Internet