TCP/IP和Linux的發展歷史

前言:文章是基於"極客時間"中盛延敏老師的課程——"網絡編程實戰"來摘錄的。自己本科也是計算機科學與技術嵌入式方向,但是有時候提到Linux和unix還是一頭霧水分不清,以及linux爲什麼和Mac OS那麼相似,posix標準又是什麼等等問題都有解答,所以準備記錄一下。

主要內容:看一看TCP/IP事實標準和Linux操作系統是如何一步一步發展到今天的。

 

TCP發展歷史

一般來說,我們認爲互聯網起源於阿帕網(ARPANET),最早的阿帕網還是非常簡陋的,網絡控制協議(Network Control Protocol,縮寫NCP)是阿帕網中連接不同計算機的通信協議。在構建阿帕網(ARPANET)之後,其他數據傳輸技術的研究又被擺上案頭。NCP誕生兩年後,NCP的開發者溫特·瑟夫(Vinton Cerf)和羅伯特·卡恩(Robert E. Kahn)一起開發了一個阿帕網的下一代協議,並在1974年發表了以分組、序列化、流量控制、超時和容錯等爲核心的一種新型的網絡互聯協議,一舉奠定了TCP/IP協議的基礎。

OSI & TCP/IP

TCP/IP在逐漸發展的同時,一個叫ISO的組織發現"計算機設備的互聯互通"是一個值得研究的新領域,於是這個組織出面和衆多廠商遊說,“我們一起定義,出一個網絡互聯互通的標準吧,這樣大家都遵守這個標準,一起把這件事情做大,大家就有錢賺了”。經過一段時間還真的搞出來一個非常強悍的標準,這就是OSI參考模型。

這個標準發佈的時候已經是1984年了,有點尷尬的是,OSI搞得是很好,大家也都很滿意,不過,等它發佈的時候,ISO組織卻驚訝地發現滿世界都在用一個叫做TCP/IP協議棧的東西,而且,跟OSI標準半毛錢關係都沒有。

事實上卡恩和瑟夫,一直都在不遺餘力地推廣TCP/IP。當然,TCP/IP的成功也不是偶然的,而是綜合了幾個因素後的結果:

  1. TCP/IP是免費或者是少量收費的,這樣就擴大了使用人羣;
  2. TCP/IP搭上了UNIX這輛時代快車,很快推出了基於套接字(socket)的實際編程接口;
  3. 這是最重要的一點,TCP/IP來源於實際需求,大家都在翹首盼望出一個統一標準,可是在此之前實際的問題總要解決啊,TCP/IP解決了實際問題,並且在實際中不斷完善。

OSI的七層模型定得過於複雜,並且沒有參考實現,在一定程度上阻礙了普及。不過,OSI教科書般的層次模型,對後世的影響很深遠,一般我們說的4層、7層,也是遵從了OSI模型的定義,分別指代傳輸層和應用層。

OSI和TCP/IP的層次模型如下圖:

 

UNIX操作系統發展歷史

TCP/IP協議的成功,離不開UNIX操作系統的發展。接下來我們就看下UNIX操作系統是如何誕生和演變的。下圖是Unix操作系統幾十年的發展歷史表:

主要從這張圖上看3個分支:

  • 圖上標示的Research橘黃色部分,是由AT&T貝爾實驗室不斷開發的UNIX研究版本,從此引出UNIX分時系統第8版、第9版,終止於1990年的第10版(10.5)。這個版本可以說是操作系統界的少林派。天下武功皆出少林,世上UNIX皆出自貝爾實驗室。
  • 圖中最上面所標識的操作系統版本,是加州大學伯克利分校(BSD)研究出的分支,從此引出4.xBSD實現,以及後面的各種BSD版本。這個可以看做是學院派。在歷史上,學院派有力地推動了UNIX的發展,包括我們後面會談到的socket套接字都是出自此派。
  • 圖中最下面的那一個部分,是從AT&T分支的商業派,致力於從UNIX系統中謀取商業利潤。從此引出了System III和System V(被稱爲UNIX的商用版本),還有各大公司的UNIX商業版。

網絡編程套接字接口,最早是在BSD 4.2引入的,這個時間大概是1983年,幾經演變後,成爲了事實標準,包括System III/V分支也吸收了這部分能力。

BSD分支、System III/System V分支、正統的UNIX分時系統分支都是互相借鑑的,也可以說是互相“抄襲”吧。但如果這樣發展下去,互相不買對方的賬,導致上層的應用程序在不同的UNIX版本間不能很好地兼容,這該怎麼辦?這裏先留一個疑問,你也可以先想一想,稍後我會給你解答。

 

介紹幾個你耳熟能詳的重要UNIX玩家。

SVR 4

SVR4(UNIX System V Release 4)是AT&T的UNIX系統實驗室的一個商業產品。它基本上是一個操作系統的大雜燴,這個操作系統之所以重要,是因爲它是System III/V分支各家商業化UNIX操作系統的“先祖”,包括IBM的AIX、HP的HP-UX、SGI的IRIX、Sun(後被Oracle收購)的Solaris等等。

Solaris

Solaris是由Sun Microsystems(現爲Oracle)開發的UNIX系統版本,它基於SVR4,並且在商業上獲得了不俗的成績。2005年,Sun Microsystems開源了Solaris操作系統的大部分源代碼,作爲OpenSolaris開放源代碼操作系統的一部分。相對於Linux,這個開源操作系統的進展比較一般。

BSD

BSD(Berkeley Software Distribution),我們上面已經介紹過了,是由加州大學伯克利分校的計算機系統研究組(CSRG)研究開發和分發的。4.2BSD於1983年問世,其中就包括了網絡編程套接口相關的設計和實現,4.3BSD則於1986年發佈,正是由於TCP/IP和BSD操作系統的完美拍檔,纔有了TCP/IP逐漸成爲事實標準的這一歷史進程

Mac OS X

用Mac筆記本的同學都有這樣的感覺:Mac OS提供的環境和Linux環境非常像,很多代碼可以在Mac上以接近線上Linux真實環境的方式運行。那是因爲Mac OS和Linux的血緣是相近的,它們都是UNIX基礎上發展起來的,或者說,它們各自就是一個類UNIX的系統。Mac系統又被稱爲Darwin,它已被驗證過就是一個UNIX操作系統。如果打開Mac系統的socket.h頭文件定義,你會明顯看到Mac系統和BSD千絲萬縷的聯繫,說明這就是從BSD系統中移植到Mac系統來的。

義,你會明顯看到Mac系統和BSD千絲萬縷的聯繫,說明這就是從BSD系統中移植到Mac系統來的。

Linux

我們把Linux操作系統單獨拿出來講,是因爲它實在太重要了,全世界絕大部分數據中心操作系統都是跑在Linux上的,就連手機操作系統Android,也是一個被“裁剪”過的Linux操作系統。

Linux操作系統的發展有幾個非常重要的因素,這幾個因素迭加在一起,造就瞭如今Linux非凡的成就。我們一一來看有哪些因素:

  • UNIX的出現和發展

第一個就是UNIX操作系統,要知道,Linux操作系統剛出世的時候, 4.2/4.3 BSD都已經出現快10年了,這樣就爲Linux系統的發展提供了一個方向,而且Linux的開發語言是C語言,C語言也是在UNIX開發過程中發明的一種語言。

  • POSIX標準

UNIX操作系統雖然好,但是它的源代碼是不開源的。那麼如何向UNIX學習呢?這就要講一下POSIX標準了,POSIX(Portable Operating System Interface for Computing Systems)這個標準基於現有的UNIX實踐和經驗,描述了操作系統的調用服務接口。有了這麼一個標準,Linux完全可以去實現併兼容它。

POSIX相當於給大廈畫好了圖紙,給Linux的發展提供了非常好的指引。這也是爲什麼我們的程序在Mac OS和Linux可以兼容運行的原因,因爲大家用的都是一張圖紙,只不過製造商不同,程序當然可以兼容運行了。

  • Minix操作系統

剛纔提到了UNIX操作系統不開源的問題,那麼有沒有一開始就開源的UNIX操作系統呢?這裏就要提到Linux發展的第三個機遇,Minix操作系統,它在早期是Linux發展的重要指引。這個操作系統是由一個叫做安迪·塔能鮑姆(Andy Tanenbaum)的教授開發的,他的本意是用來做UNIX教學的。Linux早期從Minix中借鑑了一些思路,包括最早的文件系統等。

  • GNU

Linux操作系統得以發展還有一個非常重要的因素,那就是GNU(GNU’s NOT UNIX),它的創始人就是鼎鼎大名的理查·斯托曼(Richard Stallman)。斯托曼的想法是設計一個完全自由的軟件系統,用戶可以自由使用,自由修改這些軟件系統。

GNU爲什麼對Linux的發展如此重要呢?事實上,GNU之於Linux是要早很久的,GNU在1984年就正式誕生了。最開始,斯托曼是想開發一個類似UNIX的操作系統的。

From CSvax:pur-ee:inuxc!ixn5c!ihnp4!houxm!mhuxi!eagle!mit-vax!mit-eddie!RMS@ MIT-OZ
From: RMS% MIT-OZ@ mit-eddie
Newsgroups: net.unix-wizards,net.usoft
Subj ect: new UNIX implementation
Date: Tue, 27-Sep-83 12:35:59 EST
Organization: MIT AI Lab, Cambridge, MA
Free Unix!
Starting this Thanksgiving I am going to write a complete Unix-compatible software system called GNU
(for Gnu’s Not Unix),and give it away free to everyone who can use it.
Contributions of time,money, programs and equipment are greatly needed.
To begin with, 
GNU will be a kernel plus all the utilities needed to write and run C programs: 
editor, shell, C compiler, linker, assembler, and a few other things.
After this we will add a text formatter, a YACC, an Empire game, a spreadsheet, and hundreds of other things. 
We hope to supply, eventually, everything useful that normally comes with a Unix system,
and anything else useful, including on-line and hardcopy documentation.

在這個設想宏大的GNU計劃裏,包括了操作系統內核、編輯器、shell、編譯器、鏈接器和彙編器等等,每一個都是極其難啃的硬骨頭。

不過斯托曼可是個牛人,單槍匹馬地開發出世界上最牛的編輯器Emacs,繼而組織和成立了自由軟件基金會(the Free Software Foundation - FSF)。

GNU在自由軟件基金會統一組織下,相繼續推出了編譯器GCC、調試器GDB、Bash Shell等運行於用戶空間的程序。正是這些軟件爲Linux 操作系統的開發創造了一個合適的環境,比如編譯器GCC、Bash Shell就是Linux能夠誕生的基礎之一。

你有沒有發現,GNU獨缺操作系統核心?

實際上,1990年,自由軟件基金會開始正式發展自己的操作系統Hurd,作爲GNU項目中的操作系統。不過這個項目再三耽擱,1991年,Linux出現,1993年,FreeBSD發佈,這樣GNU的開發者開始轉向於Linux或FreeBSD,其中,Linux成爲更常見的GNU軟件運行平臺。

斯托曼主張,Linux操作系統使用了許多GNU軟件,正式名應爲GNU/Linux,但沒有得到Linux社羣的一致認同,形成著名的GNU/Linux命名爭議。

GNU是這麼解釋爲什麼應該叫GNU/Linux的:“大多數基於Linux內核發佈的操作系統,基本上都是GNU操作系統的修改版。我們從1984 年就開始編寫GNU 軟件,要比Linus開始編寫它的內核早許多年,而且我們開發了系統的大部分軟件,要比其它項目多得多,我們應該得到公平對待。”

 

操作系統對TCP/IP的支持

下圖展示了TCP/IP在各大操作系統的演變歷史。可以看到,即使是大名鼎鼎的Linux以及90年代大發光彩的Windows操作系統,在TCP/IP網絡這塊,大大的借鑑了加州大學伯克利分校(BSD)的TCP/IP版本,也只能算是一個後來者。

發佈了275 篇原創文章 · 獲贊 37 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章