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