《互联网的世界》第三讲-tcp
dns 找到了地址,spf 确定了路径,如何运输数据呢?今天讲 tcp。

计算机网络领域的特定技术是最后当你干这个事时才要用的,我对孩子们这样说,实际上你可以随便看一个快递单子来理解端到端传输协议。
源地址,目标地址一定要有,一个地址可能有不同住户,也就是 port 指示的,一系列相关联包裹的顺序编号也是必须,总共多少件,这是第几件等等,此外,一个包裹能不能被拆分运输,也要被标识,三吨大米可以拆分运输,而三吨大象就不行,能收多少,这个也要告知对方。哪些是 tcp,哪些是 ip,我是不区分的,因为本来它们就没有区分。
和快递包裹类似,tcp 不管具体运输路径,所以它是端到端的。
和快递包裹不同的是,tcp 指示一个双向的交互运输,如何在 “运输单” 上紧凑地控制这个双向运输过程是 tcp 协议的设计目标之一,序号 和 接收能力 标识本端信息,而 “ack” 则捎带对方的需求,但如果没有本端报文需要递送,ack 也能单独发送,这些信息在双向交互初始化时通过四次握手协商清楚,由于 ack 可稍带,四次握手合并为三次。
双向交互协议最自然的方式是 “单字节停等”,若果然如此,tcp 就是个再简单不过的协议,但为了效率,单字节停等扩展为单报文停等,报文子节流可拆分,最终是窗口停等,窗口内报文可丢可乱序,一次发送一窗数据就不得不有效处理丢包乱序问题。优化总是引入复杂。
如何检测丢包,一开始只有超时,后来有了更 trick 的方式,即快速重传。对于孩子而言,解释为什么三次重复 ack 标识丢包很轻松,他们可以自然理解为什么是三次,如果要解释,就是事不过三。没必要进一步引申 reordering,因为这不是重点。
tcp 影响了所有传输协议。
如果一开始的 tcp 不是现在这个 tcp,现在的互联网就会是另一番景象。
从 tcp 滑动窗口停等 中可以看到一些历史,另一些历史可以从编码和交互的视角来理解。
1970 年代典型的文件传输和远程登录(包括文件传输的 ftp 以及 email 交互命令)两类应用确实影响了 tcp 必须是流式停等协议。
首先,文件传输的对端需要精确拷贝,其次,远程登录实际上是自己跟自己交互,这就很有趣,传输的对端不是人,无法脑补纠错,而交互的本端却是自己。自己与自己交互不存在脑补的空间,比如输入一个 “s”,显然希望马上回显一个 “s”,“anderson” 是我自己输入的,回显 “andersoX” 时我会怀疑自己输入错了,而不是字母传丢了。
假想另一种平行历史,如果 1970 年代的核心应用是用一个传输协议向远端放电影,流式停等就再无必要,nack 可能会被用来提示关键数据丢失,也会有一个偶尔的指令反馈,但大部分时间,receiver 可能根本不会有任何反馈。拥塞控制大概会倾向于 receiver 的主动行为。
接下来可以想象,不会有如今样式的慢启动,也不会有内置的 reno aimd 策略,因为稀疏的反馈不足以驱动这些机制运行。如果 ack 不是 tcp 的必须字段,有关拥塞控制的所有机制都将改变,并且也不会出现 ack 过多导致的资源抢占问题,特别是在 wifi 环境下。
说说 aimd,这实际上是一个并不需要干预的自然过程,也印证了主动干预的合理性。
大片牧场承载着小规模羊群,但羊群规模会逐渐变大,当羊群规模略微超过牧场承载能力,羊群就会出现内卷性竞争,比如降低代谢率,接下来就会出现大规模争夺资源的缠斗,二者相斗必有一伤,在统计学意义上,羊群规模会快速减半,这就是 aimd。同理,当城市人口缓慢增加到人与人之间距离小于临界值,传染病就会肆虐从而快速减少人口,所以城市化进程达到一定程度必须停止。在理论上,统计复用资源不可能实现 100% 的利用率,这是需要用直感而不是数学讲明白的。
但不管怎样,tcp 依然重要。
浙江温州皮鞋湿,下雨进水不会胖。
相关文章:
《互联网的世界》第三讲-tcp
dns 找到了地址,spf 确定了路径,如何运输数据呢?今天讲 tcp。 计算机网络领域的特定技术是最后当你干这个事时才要用的,我对孩子们这样说,实际上你可以随便看一个快递单子来理解端到端传输协议。 源地址,…...
JOSEF约瑟 JZS-7G-42 AC220V静态可调延时中间继电器 端子式导轨安装15ms-10s
系列型号:JZS-7G-57端子排延时中间继电器;JZS-7G-42X端子排延时中间继电器;JZS-7G-22X端子排延时中间继电器;JZS-7G-21端子排延时中间继电器;JZS-7G-41端子排延时中间继电器;JZS-7G-51端子排延时中间继电器…...
Hudi配置参数优化
1)Commits:表示一批记录原子性的写入到一张表中。 2)Cleans:清除表中不再需要的旧版本文件。 3)Delta_commit:增量提交指的是将一批记录原子地写入MergeOnRead类型表,其中一些/所有数据都可以写入增量日志。 4&…...
适用Java SpringBoot项目的分布式锁
在分布式系统中,常用到分布式锁,它有多中实现方式,如:基于redis,database,zookeeper等。Spring integration组件有这三种服务的分布式锁实现,今天来看看用的比较多的redis和database实现方式。 …...
面试笔记系列二之java基础+集合知识点整理及常见面试题
目录 Java面向对象有哪些特征,如何应用 Java基本数据类型及所占字节 Java中重写和重载有哪些区别 jdk1.8的新特性有哪些 内部类 1. 成员内部类(Member Inner Class): 2. 静态内部类(Static Nested Class&#…...
搭建LNMP环境并搭建论坛和博客
目录 一、LNMP架构原理 二、编译安装Nginx 三、编译安装MySQL 四、编译安装PHP 五、配置Nginx支持PHP解析 六、安装论坛 七、安装博客 一、LNMP架构原理 LNMP架构,是指在Linux平台下,由运行Nginx的web服务器,运行PHP的动态页面解析程序…...
蓝桥杯刷题2
1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…...
低代码与国产化部署:软件开发的未来趋势与应用实践
在数字化时代,软件开发已经成为企业创新和竞争力提升的关键。随着我国科技实力的不断提升,国产化部署逐渐成为软件开发领域的重要趋势。与此同时,低代码技术的发展也为国产化部署提供了新的机遇。本文将探讨如何在软件开发过程中充分发挥两者…...
【Python笔记-设计模式】迭代器模式
一、说明 迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素,而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…...
Linux基本指令(上)
在Linux中,将文件夹称为目录,后面的内容都与目录相关。 1. ls指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项 …...
浅谈XSS简单漏洞xss-labs-master(初级)
一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介: 当用户访问被XSS注入的网页,XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网,并且浏览器中有J…...
WordPress分类目录ID怎么看?如何查找WordPress标签ID?
在WordPress网站中,我们需要判断某篇文章是否属于某个分类目录,或者是否拥有某个标签,那么就需要用到分类目录ID和标签ID,那么WordPress分类目录ID怎么看?如何查找WordPress标签ID?下面boke112百科就跟大家…...
达梦数据库基础操作(一):用户操作
达梦数据库基础操作(一):用户操作 1 达梦运行状态 SELECT banner as 版本信息 FROM v$version;1.2 达梦版本号 SELECT banner as 版本信息 FROM v$version;1.3 用户相关操作 默认用户名密码:SYSDBA/SYSDBA 注意:在哪个数据库下创建的用户…...
Java进阶(锁)——锁的升级,synchronized与lock锁区别
目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶(锁)——锁的升级,synchronized与lock锁区别 Java中锁升级 看一段代码: public class…...
Flask+Gunicorn中文乱码解决方案
在使用FlaskGunicorn部署应用时,发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII,而ASCII并不支持中文字符。 解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时,应该使用UTF-8编码。UTF-8是一…...
vue3的开发小技巧
「总之岁月漫长,然而值得等待。」 目录 父组件调用子组件函数 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });...
十三、Qt多线程与线程安全
一、多线程程序 QThread类提供了管理线程的方法:一个对象管理一个线程一般从QThread继承一个自定义类,重载run函数 1、实现程序 (1)创建项目,基于QDialog (2)添加类,修改基于QThr…...
今日话题:---自卑
自卑是一种普遍存在的心理现象,它可能源于个人对自身能力、外貌、社会地位等方面的不满意或不自信。自卑感可能会导致消极的情绪和行为,如焦虑、抑郁、逃避现实等。然而,适度的自卑感也可能激发个人努力提升自己,从而实现自我成长…...
Unity 预制体与变体
预制体作用: 更改预制体,则更改全部的以预制体复制出的模型。 生成预制体: 当你建立好了一个模型,从层级拖动到项目中即可生成预制体。 预制体复制模型: 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…...
leetcode:860.柠檬水找零
题意:按照支付顺序,进行支付,能够正确找零。 解题思路:贪心策略:针对支付20的客人,优先选择消耗10而不是消耗5,因为5可以用来找零10或20. 代码实现:有三种情况(代表三种…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...
