说说过量 tcp pure ack 的利弊

2023-12-02 03:15
文章标签 tcp pure ack 利弊 过量

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

tcp 的 ack 实在太多了,如果互联网上 80% 报文是 tcp,那么其中 1/3 的报文都是 ack,此前写过几篇短文,比如 丢弃一些 pure ack 和 注入或利用 pure ack。

简单说,tcp 依靠 ack 提供 self-clock,发送 data 越多,ack 越多,如果 ack 与 data 不同步,将出现各种问题,详见 rfc2525-Stretch ACK violation。

正如哥斯拉将会压垮自身一样,tcp 的 pure ack 也会随着带宽进一步提高对系统带来越来越大的重负。pure ack 是小包,与 data 数量线性同步的 pure ack 对系统带来不对称的压力,系统最怕高频小包。

典型的三种场景不得不防,pure ack 在 sender/receiver 端与 data 竞争 cpu,pure ack 在 wifi 等 csma 网络与同流 data 竞争信道,pure ack 在交换节点与 data 竞争 buffer 和带宽。无论哪一种问题,都因摩尔定律落后于带宽发展而日趋严重。

在端侧,pure ack 的每次处理需要一次 cpu 中断,而定期轮询将损害 delivery rate 计算并降低灵敏度;在 wifi,每个反向 pure ack 都要和正向 data 竞争时隙,以 2:1 为例将侵占系统 1/3 的带宽资源;在交换节点,大量资源用于管理大量 pure ack,对 data 照顾不周将加剧拥塞,特别在丢包和恢复阶段,tcp 的 data/ack 将达到 1:1,对交换机资源占用更高,越丢包越容易更丢包。

固定资源的系统,tcp 最终吞吐将被自身 ack 限制在固定比例,ack 损耗随处理器和带宽的不对称发展趋向增加。
lro,wifi frame-aggregation 等治标不治本的技术来掩盖问题也不知是福是祸,很少有人能认识上述三个场景的问题,甚至很少有人意识到它们存在。

tcp 在 100Gbps+ 的理论吞吐有一半,另一半资源用来处理 pure ack 了,允许 tso/lro/ack-aggregation/big-tcp 再挤出些带宽,勉强到 70% 甚至 90%,但挤牙膏皮显然毫无意义,就看 1.6Tbps 网络中 tcp 如何应对。问题在 tcp self-clock 对 ack 太过依赖。

问题的意义在于新协议而不是如何改进 tcp。你会将 tcp 某特征抄进新协议吗?教科书里教的都是这特征解决了什么问题,而只字不提它是哪些问题的所在。因此我们看到一个又一个的 yet another tcp。

同样基于 tcp ack 太多的问题,果真百害无一利吗?

tcp ack 实在太多,但并非没用,正如 self-clock 顾名思义,流量由 ack 触发。在如 clos/spine-leaf 这种规整且局域对称的拓扑下,路径也对称,交换机可分析 ack 提前预期大流量,对反向的 ack 整形即可对未来流量整形,从而提前避免拥塞。这比等大流量真正到了再反压或者丢包要好太多。

对于 tcp 长连接,上述方法可以捕捉源自同一 receiver 但目标却是不同 sender 的大量 pure ack 从而预期一次潜在的 incast,对这些扇出的 pure ack 进行 pacing 整形,就可消除未来的扇入 incast,是不是很有趣。

这思路适用于一切规则拓扑下的传输协议用来消除 incast,规则拓扑下,交换机可分析途径的 request 而提前预知 response 流量特征,在获知将来潜在拥塞后,交换机可对这些 request 整形,间接控制 response 流量。

看起来像是在利用 pure ack,实际是在利用规则拓扑,规则拓扑中,交换机比端对流量具有更全局且精确的预期,得益于交换机知道流量源自哪里去往哪里。在同一尺度的网络中,规则相通,问题也相通。在广域网中,分布式特征更倾向于端到端控制,因为传播时延太大,拓扑不对称,交换机它算不准。

周末的文章 incast,拥塞控制,内存墙的秘密 我的一个回复 “数据中心服务器扇出每个 request 都携带唯一的 expired id,这个id 在请求端生成,每个 id 均唯一,该 id 表示一个时间戳,指示在发送 response 前等待多久…”,expired id 只为放大波动,每台服务器都受负载随机波动而波动,将这个波动放大到交换机带宽的粒度,incast 随之消失。这事实在广域网能得到印证,广域网没有 incast,原因就是多级链路,长距离放大了波动,从而消除了全局同步。随机修剪光纤长度就是想在数据中心人为放大随机波动。

回到 pure ack 过多问题,如果数据中心可利用 pure ack 度量或预测潜在流量特征是因为网络足够规则,那么在广域网,1:2 的 data/ack 比例则没必要,广域网波动性被放大而损害的预测精度损失不会随样本增加而缓解,按照大数定律,样本增加只能更精确测量波动本身,而波动是滞后的,拥塞控制要做的是在更粗粒度感知波动而不是精确测量波动。

以我的从业经验,细粒度度量和粗粒度度量相比,对于预测未来链路画像,并不能更精确。用历史预测未来更多的是经验走势,而它本就是粗粒度的。

足球场的面积,腿脚的灵活性决定了球门的大小,同时也约束了上场人数,因为人数不能改变每一个次射门的进球概率,人数过少或过多都将降低观赏性。这是尺度决定的,相反,将桌球打进直径 10cm 的洞却是每一个桌球玩家的基本要求。

tcp 说旧不旧,quic 几乎就是 yet another tcp,但 tcp 确实很旧,当我们要优化 tcp 或迭代一个新协议时,不能被表面现象牵着鼻子走,一定要回到 1970 年代彼时彼刻的现实,你会发现 tcp 几乎一切的设计都出自四个字,简单能用。所以也就没有那么多为什么和好不好了。tcp 后来的问题并不影响它的可用性,可如今人们几乎把高性能 tcp 玩成了烟花特效,但当人们真去设计一个试图取代 tcp 的新协议时,却把那些导致低性能的特性也一并抄了去,结果新协议也只是可用,并不简单,在它针对的范围外也不高效。

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

这篇关于说说过量 tcp pure ack 的利弊的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【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