JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
Back to the library
计算机网络 1974

分组网络互通协议

文顿·瑟夫 与 罗伯特·卡恩

用一套共同的协议,把各自为政的网络,织成同一个互联网。

Choose your version
In depth · the introduction

在这篇论文之前,世上有许多网络;在它之后,世上有了互联网——一套规则,让每一个各自独立的网络,都能像一个网络那样运作。

把这个想法拆开看

到 1970 年代初,已经存在好几个分组交换网络——ARPANET、分组无线网、卫星链路——但每一个都是一座孤岛,各有各的规则;这个网络上的一台计算机,与那个网络上的一台计算机,根本说不上话。瑟夫与卡恩的想法,不是把它们合并,而是让每一个都保持原样,再在它们之上铺一种共同的语言。

把每段消息切成带编号的小分组,让任何网络都按自己的方式去搬运,再让两端的计算机负责把碎片重新排好顺序、并为丢失的部分重新索要。中间的网络可以保持简单、甚至可以不可靠;真正的巧思,活在两端。

它从哪里来

曾参与建造 ARPANET 的鲍勃·卡恩,在 1973 年把「网络互联」这道难题带给了斯坦福的文特·瑟夫;两人在旧金山一家旅馆的大堂里,留下了一份著名的草稿,敲定了这套设计,并于 1974 年发表。它汲取了一个广阔群体的成果——分组交换来自保罗·巴兰与唐纳德·戴维斯,「数据报」来自路易·普赞的法国 CYCLADES 网络——并经一个国际工作组打磨多年。1983 年 1 月 1 日,ARPANET 切换到了它,我们所知的互联网,就此开始运转。

它为何重要

真正的天才之处,在于他们把「聪明」放在了哪里。让中间的网络保持简单、只「尽力而为」——允许它丢包、允许它打乱顺序——而让两端的计算机去做排序与重新索要这些细致的活。正是这一个决定,使互联网无需任何人批准便能生长:任何一个新网络、任何一种新链路,只要在自己的边缘讲那个共同的头部,就能加入进来。网页、电子邮件、流媒体、视频通话,全都跑在这里勾画的设计之上。

一个可以想象的画面

把寄一封长信,想象成寄一摞编了号的明信片。你把它们投进邮筒;有的走快路,有的走慢路,几张在途中丢了,到达时乱成一团。另一端的读信人,按号码把它们摆好,发现第 5 张始终没来,便回一句话:「把 5 重发一下。」等每个号码都齐了,信便按顺序读得通。邮政系统从不需要看懂你的信——TCP 对待网络,正是这样。在下方的组件里试试看。

一张 TCP 重组的可交互示意图。一段消息被切成八个带编号的段,拼出 INTERNET。三个滑块分别设定网络把分组打乱得多严重、丢失了几个、以及目前到达了多少。到达条显示分组乱序进来,丢失的稍后被重传;一个有八个槽位的接收缓冲区按序号填充,从头连续的那一截变绿;交付行显示目前已拼好的消息。

它身处何处

这是信息时代的第三根支柱,与香农的「比特」(shannon-1948)、冯·诺伊曼的「存储程序计算机」(von-neumann-1945)并立:香农指出了如何度量与守护一条消息,冯·诺伊曼指出了如何造出那台机器,而瑟夫与卡恩指出了如何让这些机器跨越任意网络彼此交谈。公钥密码(diffie-hellman-1976)与比特币(nakamoto-2008),都是建在这篇论文所成就的互联网之上的、更晚的层。

The original document
Original source text
Vinton G. Cerf & Robert E. Kahn · IEEE Transactions on Communications, vol. COM-22, no. 5 (May 1974): 637–648
Abstract
A protocol that supports the sharing of resources that exist in different packet switching networks is presented.
The protocol provides for variation in individual network packet sizes, transmission failures, sequencing, flow control, end-to-end error checking, and the creation and destruction of logical process-to-process connections.
Some implementation issues are considered, and problems such as internetwork routing, accounting, and timeouts are exposed.
Gateways between networks
The paper proposes connecting distinct packet-switching networks through gateways — nodes that belong to two networks at once, accept a packet from one and forward it into the next, route on a common internetwork address, and break a packet into smaller pieces when the next network demands it. Each underlying network is left unchanged and need not know it is part of a larger whole. (Paraphrase of the design; the full argument is at the source.)
[ … ]
The transmission control program
Reliability is made the end hosts' job, not the network's. A transmission control program (TCP) in each host opens a logical connection between two processes — addressed through their ports — and turns the network's best-effort delivery into an ordered, reliable stream of bytes. (Paraphrase.)
[ … ]
Sequencing, flow control, and retransmission
Each segment carries a sequence number, so the receiver can reassemble out-of-order arrivals, discard duplicates, and detect gaps; it returns acknowledgements, the sender retransmits anything left unacknowledged past a timeout, a window paces the sender to the receiver's capacity, and an end-to-end checksum catches corruption the lower layers miss. (Paraphrase.)
Stanford & DARPA · IEEE · May 1974