《互联网的世界》第三讲-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 依然重要。

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

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

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

相关文章

图像分割 - 查找图像的轮廓(cv2.findContours函数)

1、前言 轮廓,是指图像中或者物体的外边缘线条。在简单的几何图形中,图形的轮廓是由平滑的线条构成,容易被识别。但不规则的图形或者生活中常见的物体轮廓复杂,识别起来比较困难 2、findContours函数 这里先介绍函数的参数,具体的含义会在下面实验中阐述 opencv 提供的轮…

react 原理揭秘

1.目标 A. 能够知道setState()更新数据是异步的 B. 能够知道JSX语法的转化过程 C. 能够说出React组件的更新机制 D. 能够对组件进行性能优化 E. 能够说出虚拟DOM和Diff算法 2.目录 A. setState()的说明 B. JSX语法的转化过程 C. 组件更新机制 D. 组件性能优化 E. 虚拟DOM和D…

VL53L8CX驱动开发(1)----驱动TOF进行区域检测

VL53L8CX驱动开发----1.驱动TOF进行区域检测 概述视频教学样品申请源码下载主要特点硬件准备技术规格系统框图应用示意图区域映射生成STM32CUBEMX选择MCU 串口配置IIC配置LPn 设置X-CUBE-TOF1串口重定向代码配置Tera Term配置演示结果 概述 VL53L8CX是一款8x8多区域ToF测距传感…

centos物理电脑安装过程(2024年1月)

开机时:CtrlAltDelete键重启电脑 重启开始时:按F11,桌面弹出蓝色框,选择第二个SSK SFD142 1.00,回车 选择install centos7安装 选择后弹出选择安装选项,选择语言 连接无线网络 安装设置,选择磁…

数字生活的未来:Web3如何改变我们的日常

随着技术的飞速发展,我们的生活正变得日益数字化。而Web3作为一种新型的互联网模式,正以前所未有的方式改变着我们的日常生活。在本文中,我们将深入探讨Web3技术的特点以及它如何改变我们的数字生活。 1. Web3的特点 Web3是基于区块链技术和…

基于Siamese网络的zero-shot意图分类

原文地址:Zero-Shot Intent Classification with Siamese Networks 通过零样本意图分类有效定位域外意图 2021 年 9 月 24 日 意图识别是面向目标对话系统的一项重要任务。意图识别(有时也称为意图检测)是使用标签对每个用户话语进行分类的任务,该标签…

指针的传递使用场景

C语言函数调用时为值传递,实参赋值给形参,形参值改变不会影响实参(原理:两个参数地址不同),若要函数改变实参值,应当传递实参的地址,参考以下实例。 代码展示: #includ…

MySQL-MHA搭建、故障测试

一、架构说明 MHA(Master High Availability)是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能,确保在主库发生故障时能够快速切换到备库,降低业务中断时…

在Windows中安装PyTorch

文章目录 1. 创建虚拟环境2. 检查显卡版本和CUDA3. 下载链接4. 下载5. 等待6. 检测 1. 创建虚拟环境 具体查看我之前写的 《在Windows中利用Python的venv和virtualenv创建虚拟环境》 2. 检查显卡版本和CUDA 这种情况是需要电脑上有单独的英伟达的显卡、或者英伟达的显卡和集显…

「MySQL」增删查改

在操作数据库中的表时,需要先使用该数据库: use database;新增 创建表 先用 use 指定一个数据库,然后使用 create 新增一个表 比如建立一个学生表 mysql> use goods; mysql> create table student(-> name varchar(4),-> age int,-> …

2024-02-29(Flink)

1.Flink原理(角色分工) 2.Flink执行流程 on yarn版: 3.相关概念 1)DataFlow:Flink程序在执行的时候会被映射成一个数据流模型; 2)Operator:数据流模型中的每一个操作被称作Operat…

从0到1使用C++实现一个模拟器-1-【实现最简CPU】

文章目录 uint64_tstdstd::arrayCPU和CU类构造函数size_tstatic_caststd::ifstreamriscv64-unknown-elf-objcopy -O binary add-addi add-addi.binriscv64-unknown-elf-gcc -Wl,-Ttext0x0 -nostdlib -o add-addi add-addi.s-wlstd::hex std::setw() std::setfill()各自的用法he…