拧巴的 tcp

本来想说说 tcp fastopen(tfo),但没什么意义,看 rfc7413 好了,还是 tcp 的惯常套路,引入一个新特性,解决了某个问题,带来一些新问题,然后就是各种 tradeoff,哪里适用哪里不适用。久而久之,tcp 就成了一个极其拧巴的协议,都烦,但谁也逃不过,但凡 tcp 问题都不是容易解决的,都是仁者见仁的形而上。

昨天刷到一个搞云原生项目管理的经理 up 主竟然单独出一期视频讲 tcp 超时,我就拧巴了,说明 tcp 真就是一团乱麻,得好好理一下。

tcp 是 internet(首字母 i 应该大写) 开山协议,后来从中分出了 ip,就是 tcp/ip 第四版,可见前面至少折腾了三个版本,其实远远不止。事后来看,这就是 tcp 拧巴的核心原因,如果 tcp/ip 是设计出来而不是进化出来的,应该是个反过来的过程,先有一个尽力而为的 ip 奠定瘦网胖端的细腰基础,然后在其上铺设其它协议。

果真如此的话,分层协议就没了传输层,协议会更加平坦,不会有 tcp 协议,更不会有 udp,而是 app 自决,由 app 自行规定传输控制语义,标准化的过程会更自然,哪个 app 比较流行,哪个 app 规定的传输控制语义就是标准,就像 quic 后来做的那样,其底色就是流行的 http,但 quic 却不为路由器交换机所知,这才是真正的端到端。

但事实和理想是相反的,tcp/ip 不是设计出来的,而是进化出来的,所以 iso/osi 说好的分层协议层间隔离就成了瞎话,它们本质是不同的东西。tcp 既没有隔离上层,也没有隔离下层,我就说几个例子。

对上层,程序员完全在 tcp 之上编程(inet steam socket),如果 tcp 发生异常比如断了,程序员必须显式处理,一大堆恶心缠绕的代码在处理异常,这种习惯慢慢成了范式,以至于 quic 已经有了连接迁移能力时,程序员依然害怕五元组变化。当谈到 google 家的 plb 时,人们首先想到的不是它的作用,而是它的问题,“它是如何更换五元祖不导致连接挂掉的?” 连接挂就挂了呗,为什么 app 和 tcp 之间没有一个 lib 解决这个问题呢。程序员害怕 tcp 断,但其实 tcp 本不该被程序员感知。

对下层,tso/gso,lro/gro 依赖顺序 stream,但传输优化却要乱序,这两者相悖,但网卡还是害怕 tcp socket 在 cpu 间迁移,不然它那些个 offloading,rss 就不起作用,空耗复杂性,当我提到这两者相悖时,程序员怼我,拼命维护 offloading 和 rss,大意是 “我靠,你怎么连优秀的 rss 都喷”,我就说,有了 rss,你怎么玩乱序。

网络和 cpu 完全不同,带宽的发展是无关比特并行度的提高,而 cpu 则被串行流约束,两者如不解耦,性能根本上不去,然而程序员思维大大偏向 cpu,他们根本无法理解如果取消了流的串行约束,还能剩下什么。

核心交换容量都 100Tbps 了,还在玩 lro/gro,你们难道不知道它们受限于 cpu 吗,这还没考虑内存墙,你们懂交换容量吗,你们拼命节省 cpu,但你们忍心浪费核心交换机的背板能耗吗。懂网络的程序员很少,无论 xdp,dpdk,offloading,用户态,在他们没看懂近乎无限的交换容量前,他们完全不懂如何浪费这种容量,将精力集中在 cpu 没错,但错在他们忽略了带宽。

tcp 已经运行 40 年,虽然大家都在谈 tcp/ip 分层,但它和分层思想是相悖的,tcp 贯穿了从 socket 到网卡,在路由器,交换机,都有 tcp,tcp 无处不在,侵染了系统思想。

一个 web 前端程序员懂 tcp,一个网卡驱动程序员也懂 tcp,看起来都很精通,但其实并不懂,不怪人,只怪 tcp 太拧巴。当然,说的都是经理。

吃饭了。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3 - 字段约束|MySQL索引|MySQL用户管理

字段约束|MySQL索引|MySQL用户管理 字段约束主键外键 MySQL索引索引介绍优缺点索引使用规则索引的分类索引的管理 用户管理用户授权权限撤销 用户权限追加user表的使用 字段约束 设置在表头上,用来限制字段赋值 包括: 是否允许给…

基于深度学习的交通标志图像分类识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入VGG16迁移学习…

MySQL基础学习: 由delete和insert操作导致的死锁问题

一、问题复现:表结构 CREATE TABLE user_props (user_id bigint NOT NULL ,prop_key varchar(100) NOT NULL ,prop_value varchar(100) NOT NULL,PRIMARY KEY (user_id,prop_key) )二、死锁测试 (1)开启两个事务 (2)…

c++重载操作符

支持重载操作符是c的一个特性,先不管好不好用,这起码能让它看起来比其他语言NB很多,但真正了解重载操作符后,就会发现这个特性...就这?本文分两个部分 重载操作符简介和使用——适用新手重载操作符的原理和sao操作——…

QGIS设计导出Geoserver服务使用的SLD样式

1、打开QGis软件 2、打开shp文件所在所在文件夹,双击添加选中图层 3、编辑shp文件样式 (1)双击“Layers”中需要编辑的图层 (2)选择样式 (3)编辑样式后,选择“应用”—》“确定” 4…

安装MYsql5.7和8.0以及区别

MySQL5.7的安装步骤 解压 将my.ini文件拷贝到解压的目录下 更改my.ini文件,将安装目录替换,并将\改成\\ 在bin目录下进入cmd 执行安装: mysqld install 失败可能是应为没有用管理员身份执行cmd,要在开始菜单进入cmd &#xff…

【leetcode100-028】【链表】两数相加

【题干】 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都…

【致远FAQ】V8.0sp1_门户设置——页面组件中设置列表头的颜色

问题描述 门户设置——页面组件中设置列表头的颜色后,底表数据查看时的列表头颜色没有变呢 解决办法 设置不对cap4生效,只针对原始oa的列表支持(比如协同工作——已办事项、公文等列表项) 设置参考

深度学习|2.4 梯度下降

如上图, J ( w , b ) J(w,b) J(w,b)是由w和b两个参数共同控制的损失函数,损失是不好的东西,所以应该求取合适的w和b使得损失最小化。 为了简单考虑,可以先忽略参数b。 斜率可以理解成在朝着x正方向移动单位距离所形成的损失值的变…

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台,该平台旨在为 Solana 原生铭文项目,以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash,将会有更多的 Solana 生态的铭…

LeetCode976. Largest Perimeter Triangle

文章目录 一、题目二、题解 一、题目 Given an integer array nums, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return 0. Example 1: Input:…

如何跨系统构建docker镜像?

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 1. 前言 docker镜像有基于amd64系统的,也有基于arm64系统的。 前段时间用了一个在x86_64的centos7服务器上构建的i…

NSSCTF sql

开启环境: ?wllm1 回显正常,试试?wllm1 出现报错;加上%23正常 ?wllm-1or 11%23出现过滤 测试,空格用**替代, 等号用like替代 测试长度 ?wlmm1order/**/by/**/3%23正常 ?wlmm1order/**/by/**/4%23报错 长度为3,测试回显位置: ?wlmm-1union/**/select/**/1,2,3%23 …

快速入门ESP32——点亮你的第一个LCD屏幕

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 快速入门ESP32—— platformIO添加开源库和自己的开发库 快速入门ESP32—— 解决platformIO添加开源库下载失败的问题 快速入门ESP32——点亮你的第一个LCD屏幕 前言一、移植T…

B01、运行时数据区概述-03

1、什么是内存 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。 2、线程共享和…

利用MATLAB绘制折线图

x20:20:140;%x轴上的数据,第一个值代表数据开始,第二个值代表间隔,第三个值代表终止a[0.85, 2.2, 3.45, 2.65, 1.5, 1.9, 1.25]; %a数据y值plot(x,a,-*b); %线性,颜色,标记 axis([0,160,0,4]) %确定x轴与y轴框图大小 …

WIN10自带查看硬盘运行时间的指令

#创作灵感# 之前一直在捣腾电脑,最近又搞了个R720XD(后续会有分享),所以对硬盘比较关注,查了一下硬盘方面的一些坑,机械硬盘最关注的问题就是运行时间了。 #正文# 查看硬盘运行时间需要用到Get-Disk指令&a…

电脑提示找不到msvcp140.dll的修复方法,亲测有效的两种方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个组件,它包含了许多C运行时库文件。这些库文件为运行基于C编写的应用程序提供了必要的支持。当系统中缺少某个或某些库文件时,就可能出现msvcp140.dll丢失的错误。 一、以下是msvcp140.dll文…

【数据结构】二叉树(一)——树和二叉树的概念及结构

前言: 本篇博客主要了解什么是树,什么是二叉树,以及他们的概念和结构。 文章目录 一、树的概念及结构1.1 树的基本概念1.2 树的相关特征1.3 树的实现 二、二叉树的概念及性质2.1 二叉树的概念2.2 二叉树的性质 一、树的概念及结构 1.1 树的基本概念 树&…

Multisim仿真实例(1-10)

本文分享10个常用电路,供大家参考学习,需要具体资料可以私聊我。 1、基于三极管的DC-AC全桥逆变电路 该电路利用脉冲控制Q1/Q3与Q2/Q4导通从而改变电流流过负载的方向,将直流信号逆变成交流信号。 电路图: 输入输出结果&#x…