TCP/IP 前传:破晓与传奇

news/2025/1/13 19:07:28/

再次从回顾分组交换网开始。美苏争霸的 1950 年代后期,美军需要一个能抵御核打击的健壮通信网络,保罗・巴兰提出一个去中心化方案被大美丽国军方采纳,当将此方案交给世界上最懂电话网的 AT&T 去实现时,却被高傲的 AT&T 高调否决,AT&T 决不允许一个自以为是的年轻人教自己如何建立一个电话网络

几年过去了,苏联卫星上天刺激到了大美丽国,慌乱中草创了 ARPA(高级研究计划局) 以应对技术威胁,由于行为过于草率,该局除了一间办公室和少量预算,什么也没有,更不知道自己的核心使命,谈何使命必达。

当 ARPA 终于知道自己大致要干什么时,经理劳伦斯・罗伯茨开始关注通信网络本身,而不是它连接的东西(电话?小型机?)。经理联系了各种专家频繁开会对齐方案。1967 年下半年一次会议上,经理惊讶于一个英国人唐纳德・戴维斯已经实现了一个分组交换网原型,该原型的思想正来自早就被 AT&T 鄙视的保罗・巴兰。

照此原型部署的最初的 ARPAnet(来自 ARPA 的 net) 由一系列节点织成,每个节点由一个 IMP(接口消息处理器) 和一台主机(小型机)组成,事后看来,这个思想非常简单,我也能想到,无非就是将集中式的 PBX(电话交换机) 拆分成与电话数量相同的一个个相同小件,并移送部署到每一部电话附近,然后这些小件分布式协同完成原先集中式 PBX 的工作:
在这里插入图片描述

偏个题插一句,将整个过程反着来也有一个例子,即分布式总线以太网将网卡的 MAC 的 CSMA/CD 功能集中在一起就是交换式以太网。

说回 ARPAnet。有了最初的物理形态,下一步就是设计通信协议,如上图所示,作为首个大型且正式的分组交换网的 ARPAnet 主要涉及三类接口,主机-IMP接口,IMP-IMP接口,主机-主机接口。
1969 年,在与加州大学洛杉矶分校,犹他大学和斯坦福研究院的工程师们进行一系列会议对齐后,NCP 于 1970 年在 RFC33(我还真花了几个小时读了读) 中被最终确定为 ARPAnet 标准协议,并于当年 12 月部署到 ARPAnet 的所有节点。

NCP 提供了主机到主机的连接功能和传输层,并支撑上层应用,这正是唐纳德・戴维斯最初的愿景,而连接功能需求则来自美国国防部。然而 NCP 却不支持异构网络互联,也就是主机到 IMP 以及 IMP 到另一个 IMP 必须使用相同至少相似的网络技术。

一次从卡车经过卫星通达伦敦大学的演示证实了 ARPAnet 并不适合跨越异构网络,这个问题催生了有关 ARPAnet 协议互操作的更多研究,并最终导致 TCP(即后来的 TCP/IP) 的诞生。而 TCP 解决的核心问题就是异构网络互联(关键中的关键),我们现在知道,IP 最终从 TCP 剥离,专门负责这件事,以至于这个细腰协议作为一个稳定平台,直接导致了后来的 Internet 应用寒武纪大爆发。

但不管怎样,NCP 一直工作到 1982 年底。随着 TCP/IP 在 1981 年 9 月的 RFC791/793 中被标准化,1983 年 1 月 1 日起,ARPAnet 将网络核心协议由 NCP 替换为 TCP/IP 协议。后面的故事大家都知道了。

有个小插曲不得不提。

虽然 TCP/IP 在 1983 年初取代了运行了十多年的 NCP,它自己就没有任何缺陷吗?这些缺陷会严重到成为阻碍部署的力量吗?如果是,这个力量有多大,后果有多严重?即便是标准化的 TCP/IP 也有可能被另一种事实上的标准所取代。事后看来,这个担心是多余的,TCP/IP 几乎以摧枯拉朽之势迅速铺开,这背后到底是谁在神助攻呢?

答案是 BSD Socket!本文讲的是 TCP/IP 和网络,插入过多别的内容不太合适,但在这里我要说的是,这里缺省了另一条几乎平行的线索,UNIX 之于操作系统的历史主线和网络一样精彩,UNIX 自 1960 年代后期诞生几乎与 ARPAnet 同时,同样经历了 1970 年代的诸侯纷争,在 1983 年,两条线实现了最完美交汇。

真是机缘巧合!UNIX,TCP/IP,还有一个是谁?以太网!致敬!【UNIX 应用通过 TCP/IP 在以太网上交互】

迁移到新协议并支持应用是困难的,4.2 BSD 恰好在 1983 年 8 月发布,它提供了一个非常方便的 TCP/IP 编程接口,BSD Socket,这让网络编程变得更加容易,这件事离全面部署 TCP/IP 只有 8 个月,完美交接。

若不是 Socket 接口,TCP/IP 的前路肯定不会太平坦,至少不会被快速认定为事实标准,别忘了彼时还有一个巨无霸 ISO/OSI 协议族呢,它会像 AT&T 鄙视保罗・巴兰一样鄙视 TCP/IP。

有了 Socket 接口提供的便利,各操作系统为了联网应用,迅速支持,以至于到了后来我开始找工作时,精通 Socket 竟然成了精通网络的代名词。

这就是今天我要讲的 TCP/IP 前传。

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


http://www.ppmy.cn/news/1562869.html

相关文章

C#语言的软件工程

C#语言的软件工程 引言 在信息技术飞速发展的今天,软件工程作为一种系统化、规范化的软件开发方法论,逐渐成为了软件开发行业的标准。C#语言作为一种现代化的编程语言,凭借其强大而易用的特性,广泛应用于企业级应用、游戏开发和…

C# 告别FirstOrDefault

一、开篇:FirstOrDefault 的 “江湖地位” 在 C# 编程的世界里,FirstOrDefault 可谓是一位 “常客”,被广大开发者频繁地运用在各种项目场景之中。无论是 Windows 窗体应用程序,需要从数据集中检索第一条记录,或是满足…

【深度学习】多目标融合算法(二):底部共享多任务模型(Shared-Bottom Multi-task Model)

目录 一、引言 1.1 往期回顾 1.2 本期概要 二、Shared-Bottom Multi-task Model(SBMM) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 三、总结 一、引言 在朴素的深度学习ctr预估模型中(如DNN),通常以一个行…

Golang笔记——切片与数组

本文详细介绍Golang的切片与数组,包括他们的联系,区别,底层实现和使用注意事项等。 文章目录 数组与切片的异同相同之处区别 切片(Slice)源码解析Go 源码中 len() 和 cap() 定义长度与容量示例 append() 函数Go 切片扩…

一文通透OpenVLA及其源码剖析——基于Prismatic VLM(SigLIP、DinoV2、Llama 2)及离散化动作预测

前言 当对机器人动作策略的预测越来越成熟稳定之后(比如ACT、比如扩散策略diffusion policy),为了让机器人可以拥有更好的泛化能力,比较典型的途径之一便是基于预训练过的大语言模型中的广泛知识,然后加一个policy head(当然,一开…

C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序

一、弗洛伊德沃肖尔算法 Floyd-Warshall算法是图的最短路径算法。与Bellman-Ford算法或Dijkstra算法一样,它计算图中的最短路径。然而,Bellman Ford和Dijkstra都是单源最短路径算法。这意味着他们只计算来自单个源的最短路径。另一方面,Floy…

IOS网络协议HTTP

1、网络层基础知识 1.1、HTTP 协议层级连接性可靠性应用场景TCP传输层面向连接高文件传输、网页浏览UDP传输层无连接低实时通信、流媒体HTTP应用层基于TCP由TCP保证网页浏览、API通信 HTTP通过过程 ④⑤ 是应用层通信,①②③⑥⑦⑧⑨是运输层通信①②③是三次握手…

【Rust】函数

目录 思维导图 1. 函数的基本概念 1.1 函数的定义 2. 参数的使用 2.1 单个参数的示例 2.2 多个参数的示例 3. 语句与表达式 3.1 语句与表达式的区别 3.2 示例 4. 带返回值的函数 4.1 返回值的示例 4.2 返回值与表达式 5. 错误处理 5.1 错误示例 思维导图 1. 函数…