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

TCP/IP 前传:破晓与传奇

再次从回顾分组交换网开始。美苏争霸的 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.kler.cn/a/501345.html

相关文章:

  • ElasticSearch | Elasticsearch与Kibana页面查询语句实践
  • 【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)
  • java项目之在线文档管理系统源码(springboot+mysql+vue+文档)
  • 【源码解析】Java NIO 包中的 ByteBuffer
  • Notepad++上NppFTP插件的安装和使用教程
  • Photon最新版本PUN 2.29 PREE,在无网的局域网下,无法连接自己搭建的本地服务器
  • 基于单片机的公交车报站系统设计
  • windows:下RabbitMQ安装后,无法进入web管理页面
  • 青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理
  • 基于大语言模型的组合优化
  • 【Java 学习】Java的生命之源:走进Object类的神秘花园,解密Object类的背后故事
  • go语言学习(数组,切片,字符串)
  • ES6的高阶语法特性
  • OpenCV相机标定与3D重建(51)对 3x3 矩阵进行 RQ 分解(RQ Decomposition)函数RQDecomp3x3()的使用
  • Oracle Dataguard(主库为双节点集群)配置详解(3):配置主库
  • 《零基础Go语言算法实战》【题目 2-16】接口的实现
  • PCL 连通域点云聚类
  • Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)
  • 为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器
  • 【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
  • 接口测试之测试原则、测试用例、测试流程
  • python循环结构(for)
  • ros2笔记-4.3 用C++做一个巡逻海龟
  • 将PHP函数转换为Python
  • 人才选拔中,如何优化面试流程
  • 项目开发版本控制Git流程规范