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

《互联网的世界》第三讲-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。 计算机网络领域的特定技术是最后当你干这个事时才要用的,我对孩子们这样说,实际上你可以随便看一个快递单子来理解端到端传输协议。 源地址&#xff0c…...

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…...

低代码与国产化部署:软件开发的未来趋势与应用实践

在数字化时代&#xff0c;软件开发已经成为企业创新和竞争力提升的关键。随着我国科技实力的不断提升&#xff0c;国产化部署逐渐成为软件开发领域的重要趋势。与此同时&#xff0c;低代码技术的发展也为国产化部署提供了新的机遇。本文将探讨如何在软件开发过程中充分发挥两者…...

【Python笔记-设计模式】迭代器模式

一、说明 迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式&#xff08;列表、栈和树等&#xff09;的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素&#xff0c;而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…...

Linux基本指令(上)

在Linux中&#xff0c;将文件夹称为目录&#xff0c;后面的内容都与目录相关。 1. ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项 …...

浅谈XSS简单漏洞xss-labs-master(初级)

一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介&#xff1a; 当用户访问被XSS注入的网页&#xff0c;XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码&#xff0c;也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网&#xff0c;并且浏览器中有J…...

WordPress分类目录ID怎么看?如何查找WordPress标签ID?

在WordPress网站中&#xff0c;我们需要判断某篇文章是否属于某个分类目录&#xff0c;或者是否拥有某个标签&#xff0c;那么就需要用到分类目录ID和标签ID&#xff0c;那么WordPress分类目录ID怎么看&#xff1f;如何查找WordPress标签ID&#xff1f;下面boke112百科就跟大家…...

达梦数据库基础操作(一):用户操作

达梦数据库基础操作(一)&#xff1a;用户操作 1 达梦运行状态 SELECT banner as 版本信息 FROM v$version;1.2 达梦版本号 SELECT banner as 版本信息 FROM v$version;1.3 用户相关操作 默认用户名密码&#xff1a;SYSDBA/SYSDBA 注意&#xff1a;在哪个数据库下创建的用户…...

Java进阶(锁)——锁的升级,synchronized与lock锁区别

目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶&#xff08;锁&#xff09;——锁的升级&#xff0c;synchronized与lock锁区别 Java中锁升级 看一段代码&#xff1a; public class…...

Flask+Gunicorn中文乱码解决方案

在使用FlaskGunicorn部署应用时&#xff0c;发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII&#xff0c;而ASCII并不支持中文字符。 解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时&#xff0c;应该使用UTF-8编码。UTF-8是一…...

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });...

十三、Qt多线程与线程安全

一、多线程程序 QThread类提供了管理线程的方法&#xff1a;一个对象管理一个线程一般从QThread继承一个自定义类&#xff0c;重载run函数 1、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QDialog &#xff08;2&#xff09;添加类&#xff0c;修改基于QThr…...

今日话题:---自卑

自卑是一种普遍存在的心理现象&#xff0c;它可能源于个人对自身能力、外貌、社会地位等方面的不满意或不自信。自卑感可能会导致消极的情绪和行为&#xff0c;如焦虑、抑郁、逃避现实等。然而&#xff0c;适度的自卑感也可能激发个人努力提升自己&#xff0c;从而实现自我成长…...

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…...

leetcode:860.柠檬水找零

题意&#xff1a;按照支付顺序&#xff0c;进行支付&#xff0c;能够正确找零。 解题思路&#xff1a;贪心策略&#xff1a;针对支付20的客人&#xff0c;优先选择消耗10而不是消耗5&#xff0c;因为5可以用来找零10或20. 代码实现&#xff1a;有三种情况&#xff08;代表三种…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

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 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...