歡迎光臨
每天分享高質量文章

Chaosnet 簡史 | Linux 中國

唯一一個可見的 Chaosnet 殘留就是 DNS 的 CH 類。這個事實讓我著迷。CH 類別是那被遺忘的幽魂 —— 在 TCP/IP 廣泛部署中存在的一個替代協議 Chaosnet 的最後棲身之地。

— Two-bit History

 

如果你輸入 dig 命令對 google.com 進行 DNS 查詢,你會得到如下答覆:

  1. $ dig google.com
  2. ; <<>> DiG 9.10.6 <<>> google.com
  3. ;; global options: +cmd
  4. ;; Got answer:
  5. ;; ->>HEADER< opcode: QUERY, status: NOERROR, id: 27120
  6. ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
  7. ;; OPT PSEUDOSECTION:
  8. ; EDNS: version: 0, flags:; udp: 512
  9. ;; QUESTION SECTION:
  10. ;google.com. IN A
  11. ;; ANSWER SECTION:
  12. google.com. 194 IN A 216.58.192.206
  13. ;; Query time: 23 msec
  14. ;; SERVER: 8.8.8.8#53(8.8.8.8)
  15. ;; WHEN: Fri Sep 21 16:14:48 CDT 2018
  16. ;; MSG SIZE rcvd: 55

這個輸出一部分描述了你的問題(google.com 的 IP 地址是什麼?),另一部分則詳細描述了你收到的回答。在答案區段ANSWER SECTION里,dig 為我們找到了一個包含五個欄位的記錄。從左數第四個欄位 A 定義了這個記錄的型別 —— 這是一個地址記錄。在 A 的右邊,第五個欄位告知我們 google.com 的 IP 地址是 216.58.192.206。第二個欄位,194 則代表這個記錄的快取時間是 194 秒。

那麼,IN 欄位告訴了我們什麼呢?令人尷尬的是,在很長的一段時間里,我都認為這是一個介詞。那時候我認為 DNS 記錄大概是表達了“在 A 記錄里,google.com 的 IP 地址是 216.58.192.206。”後來我才知道 IN 是 “internet” 的簡寫。IN 這一個部分告訴了我們這個記錄分屬的類別class

那麼,除了 “internet” 之外,DNS 記錄還會有什麼別的類別嗎?這究竟意味著什麼?你怎麼去搜尋一個不位於 internet 上的地址?看起來 IN 是唯一一個可能有意義的值。而且的確,如果你嘗試去獲得除了 IN 之外的,關於 google.com 的記錄的話,DNS 服務器通常不能給出恰當的回應。以下就是我們嘗試向 8.8.8.8(谷歌公共 DNS 服務器)詢問在 HS 類別里 google.com 的 IP 地址。我們得到了狀態為 SERVFAIL 的回覆。

  1. $ dig -c HS google.com
  2. ; <<>> DiG 9.10.6 <<>> -c HS google.com
  3. ;; global options: +cmd
  4. ;; Got answer:
  5. ;; ->>HEADER< opcode: QUERY, status: SERVFAIL, id: 31517
  6. ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
  7. ;; OPT PSEUDOSECTION:
  8. ; EDNS: version: 0, flags:; udp: 512
  9. ;; QUESTION SECTION:
  10. ;google.com. HS A
  11. ;; Query time: 34 msec
  12. ;; SERVER: 8.8.8.8#53(8.8.8.8)
  13. ;; WHEN: Tue Sep 25 14:48:10 CDT 2018
  14. ;; MSG SIZE rcvd: 39

所以說,除了 IN 以外的類別沒有得到廣泛支持,但它們的確是存在的。除了 IN 之外,DNS 記錄還有 HS(我們剛剛看到的)和 CH 這兩個類別。HS 類是為一個叫做 Hesiod[1] 的系統預留的,它可以利用 DNS 來儲存並讓用戶訪問一些文本資料。它通常在本地環境中作為 LDAP[2] 的替代品使用。而 CH 這個類別,則是為 Chaosnet 預留的。

如今,大家都在使用 TCP/IP 協議族。這兩種協議(TCP 及 UDP)是絕大部分電腦遠程連接採用的協議。不過我覺得,從互聯網的垃圾堆里翻出了一個佈滿灰塵,絕跡已久,被人們遺忘的系統,也是一件令人愉悅的事情。那麼,Chaosnet 是什麼?為什麼它像恐龍一樣,走上了毀滅的道路呢?

在 MIT 的機房裡

Chaosnet 是在 1970 年代,由 MIT 人工智慧實驗室的研究員們研發的。它是一個宏偉標的的一部分 —— 設計並製造一個能比其他通用電腦更高效率運行 Lisp 代碼的機器。

Lisp 是 MIT 教授 John McCarthy 的造物,他亦是人工智慧領域的先驅者。在 1960 年發佈的一篇論文[3]中,他首次描述了 Lisp 這個語言。在 1962 年,Lisp 的編譯器和解釋器誕生了。Lisp 引入了非常多的新特性,這些特性在現在看來是每一門編程語言不可或缺的一部分。它是第一門擁有垃圾回收器的語言,是第一個有 REPL(Read-eval-print-loop:交互式解析器)的語言,也是第一個支持動態型別的語言。在人工智慧領域工作的程式員們都十分喜愛這門語言,比如說,大名鼎鼎的 SHRDLU[4] 就是用它寫的。這個程式允許人們使用自然語言,向機器下達挪動玩具方塊這樣的命令。

Lisp 的缺點是它太慢了。跟其它語言相比,Lisp 需要使用兩倍的時間來執行相同的操作。因為 Lisp 在運行中仍會檢查變數型別,而不僅是編譯過程中。在 MIT 的 IBM 7090 上,它的垃圾回收器也需要長達一秒鐘的時間來執行。1 這個性能問題急需解決,因為 AI 研究者們試圖搭建類似 SHRDLU 的應用。他們需要程式與使用者進行實時互動。因此,在 1970 年代的晚期,MIT 人工智慧實驗室的研究員們決定去建造一個能更高效運行 Lisp 的機器來解決這個問題。這些“Lisp 機器”們擁有更大的儲存和更精簡的指令集,更加適合 Lisp。型別檢查由專門的電路完成,因此在 Lisp 運行速度的提升上達成了質的飛躍。跟那時流行的計算機系統不同,這些機器並不支持分時,整臺電腦的資源都用來運行一個單獨的 Lisp 程式。每一個用戶都會得到他自己單獨的 CPU。MIT 的 Lisp 機器小組Lisp Machine Group在一個備忘錄里提到,這些功能是如何讓 Lisp 運行變得更簡單的:

Lisp 機器是個人電腦。這意味著處理器和主記憶體並不是分時復用的,每個人都能得到單獨屬於自己的處理器和記憶體。這個個人運算系統由許多處理器組成,每個處理器都有它們自己的記憶體和虛擬記憶體。當一個用戶登錄時,他就會被分配一個處理器,在他的登錄期間這個處理器是獨屬於他的。當他登出,這個處理器就會重新可用,等待被分配給下一個用戶。通過採取這種方法,當前用戶就不用和其他用戶競爭記憶體的使用,他經常使用的記憶體頁也能儲存在處理器核心裡,因此頁面換出的情況被顯著降低了。這個 Lisp 機器解決了分時 Lisp 機器的一個基本問題。2

這個 Lisp 機器跟我們認知的現代個人電腦有很大的不同。該小組原本希望今後用戶不用直接面對 Lisp 機器,而是面對終端。那些終端會與位於別處的 Lisp 機器進行連接。雖然每個用戶都有自己專屬的處理器,但那些處理器在工作時會發出很大的噪音,因此它們最好是位於機房,而不是放在本應安靜的辦公室里。3 這些處理器會通過一個“完全分佈式控制”的高速本地網絡共享訪問一個檔案系統和設備,例如印表機。4 這個網絡的名字就是 Chaosnet。

Chaosnet 既是硬體標準也是軟體協議。它的硬體標準與以太網類似,事實上 Chaosnet 軟體協議是運行在以太網之上的。這個軟體協議在網絡層和傳輸層之間交互,它並不像 TCP/IP,而總是控制著本地網絡。Lisp 機器小組的一個成員 David Moon 寫的另一個備忘錄中提到,Chaosnet “目前並不打算為低速鏈接、高信噪鏈接、多路徑、長距離鏈接做特別的優化。” 5 他們專註於打造一個在小型網絡里表現極佳的協議。

因為 Chaosnet 連接在 Lisp 處理器和檔案系統之間,所以速度十分重要。網絡延遲會嚴重拖慢一些像打開文本文件這種簡單操作的速度,為了提高速度,Chaosnet 結合了在Network Control Program網絡控製程式中使用的一些改進方法,隨後的 Arpanet 專案中也使用了這些方法。據 Moon 所說,“為了突破諸如在 Arpanet 中發現的速率瓶頸,很有必要採納新的設計。目前來看,瓶頸在於由多個鏈接分享控制鏈接,而且在下一個信息發送之前,我們需要知道本次信息已經送達。” 6 Chaosnet 協議族的批量 ACK 包跟當今 TCP 的差不多,它減少了 1/3 到一半的需要傳輸的包的數量。

因為絕大多數 Lisp 機器使用較短的單線進行連接,所以 Chaosnet 可以使用較為簡單的路由演算法。Moon 在 Chaosnet 路由方案中寫道“預計要適配的網絡架構十分簡單,很少有多個路徑,而且每個節點之間的距離很短。所以我認為沒有必要進行複雜的方案設計。” 7 因為 Chaosnet 採用的演算法十分簡單,所以實現它也很容易。與之對比明顯,其實現程式據說只有 Arpanet 網絡控製程式的一半。8

Chaosnet 的另一個特性是,它的地址只有 16 位,是 IPv4 地址的一半。所以這也意味著 Chaosnet 只能在局域網裡工作。Chaosnet 也不會去使用端口號;當一個行程試圖連接另一個機器上的另外一個行程時,需要首先初始化連接,獲取一個特定的標的“聯繫名稱contact name”。這個聯繫名稱一般是某個特定服務的名字。比方說,一個主機試圖使用 TELNET 作為聯繫名稱,連接另一個主機。我認為它的工作方式在實踐中有點類似於 TCP,因為有些非常著名的服務也會擁有聯繫名稱,比如運行在 80 端口上的 HTTP 服務。

在 1986 年,RFC 973[5] 通過了將 Chaosnet DNS 類別加入域名解析系統的決議。它替代了一個早先出現的類別 CSNETCSNET 是為了支持一個名叫計算機科學網絡Computer Science Network而被製造出來的協議。我並不知道為什麼 Chaosnet 能被域名解析系統另眼相待。很多別的協議族也有資格加入 DNS,但是卻被忽略了。比如 DNS 的主要架構師之一 Paul Mockapetris 提到說在他原本的構想里,施樂Xerox的網絡協議應該被包括在 DNS 里。9 但是它並沒有被加入。Chaosnet 被加入的原因大概是因為 Arpanet 專案和互聯網的早期工作,有很多都在麻省劍橋的博爾特·貝拉尼克—紐曼公司,他們的雇員和 MIT 大多有緊密的聯繫。在這一小撮致力於發展計算機網絡人中,Chaosnet 這個協議應該較為有名。

Chaosnet 隨著 Lisp 機器的衰落漸漸變得不那麼流行。儘管在一小段時間內 Lisp 機器有實際的商業產品 —— Symbolics 和 Lisp Machines Inc 在 80 年代售賣了這些機器。但它們很快被更便宜的微型計算機替代。這些計算機沒有特殊製造的迴路,但也可以快速運行 Lisp。Chaosnet 被製造出來的目的之一是解決一些 Apernet 協議的原始設計缺陷,但現在 TCP/IP 協議族同樣能夠解決這些問題了。

殼中幽靈

非常不幸的是,在互聯網中留存的關於 Chaosnet 的資料不多。RFC 675 —— TCP/IP 的初稿於 1974 年發佈,而 Chasnet 於 1975 年開始開發。10 但 TCP/IP 最終征服了整個互聯網世界,Chaosnet 則被宣佈技術性死亡。儘管 Chaosnet 有可能影響了接下來 TCP/IP 的發展,可我並沒有找到能夠支持這個猜測的證據。

唯一一個可見的 Chaosnet 殘留就是 DNS 的 CH 類。這個事實讓我著迷。CH 類別是那被遺忘的幽魂 —— 在 TCP/IP 廣泛部署中存在的一個替代協議 Chaosnet 的最後棲身之地。至少對於我來說,這件事情是十分讓人激動。它告訴我關於 Chaosnet 的最後一絲痕跡,仍然藏在我們日常使用的網絡基礎架構之中。DNS 的 CH 類別是有趣的數碼考古學遺跡。但它同時也是活生生的標識,提醒著我們互聯網並非天生完整成型的,TCP/IP 不是唯一一個能夠讓計算機們交流的協議。“萬維網”也遠遠不是我們這全球交流系統所能有的,最酷的名字。


1. LISP 1.5 Programmer’s Manual, The Computation Center and Research Laboratory of Electronics, 90, accessed September 30, 2018, http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf  
2. Lisp Machine Progress Report (Artificial Intelligence Memo 444), MIT Artificial Intelligence Laboratory, August, 1977, 3, accessed September 30, 2018, https://dspace.mit.edu/bitstream/handle/1721.1/5751/AIM-444.pdf.  
3. Lisp Machine Progress Report (Artificial Intelligence Memo 444), 4.  
4. 同上  
5. Chaosnet (Artificial Intelligence Memo 628), MIT Artificial Intelligence Laboratory, June, 1981, 1, accessed September 30, 2018, https://dspace.mit.edu/bitstream/handle/1721.1/6353/AIM-628.pdf.  
6. 同上  
7. Chaosnet (Artificial Intelligence Memo 628), 16.  
8. Chaosnet (Artificial Intelligence Memo 628), 9.  
9. Paul Mockapetris and Kevin Dunlap, “The Design of the Domain Name System,” Computer Communication Review 18, no. 4 (August 1988): 3, accessed September 30, 2018, http://www.cs.cornell.edu/people/egs/615/mockapetris.pdf.  
10. Chaosnet (Artificial Intelligence Memo 628), 1. 

赞(0)

分享創造快樂