1. 程式人生 > >TCPIP之四書五經---學習Linux網路程式設計經典推薦

TCPIP之四書五經---學習Linux網路程式設計經典推薦

作者:孟巖

來源:不詳

    TCP/IP協議是當前廣域網和區域網通用的網路協議,因此,基於TCP/IP的程式設計就格外重要。從應用上來說,現在直接利用C層次Socket API進行TCP/IP程式設計的人確實越來越少了,各種現成的框架(如ACE、Java、.NET FCL)和控制元件(如IP*Works)大大簡化了TCP/IP程式設計的難度。但是,如果想要在這個領域達到融會貫通的地步,不打下堅實的基礎是不可想象的。正如Richard Stevens在TCP/IP Illustrated中所說,在網路程式設計領域,開發者所遇到的實際問題中,大約有90%都與開發者對於TCP/IP的理解相關。高層的框架和控制元件總結了TCP/IP的主要使用模式,並且進行了抽象和封裝,這固然非常好,但是想要真正掌握TCP/IP網路程式設計的真諦,恐怕需要認真學習下面幾本著作。 
1.Richard Stevens,TCP/IP Illustrated, Vol.1 / Vol.2 / Vol.3
《 TCP/IP詳解(第一卷)協議 》《 TCP/IP詳解 卷2:實現 》《 TCP/IP詳解卷3:TCP事務協議、HTTP、NNTP和UNIX域協議 》
《 TCP/IP詳解卷1:協議(英文版) 》《 TCP/IP詳解卷2:實現(英文版)》《 TCP/IP詳解卷3:TCP事務協議、HTTP、NNTP和UNIX域協議(英文版)》


  這是一本眾望所歸的書。自從1994年出版以來,TCP/IP Illustrated就一直是TCP/IP領域具有傳奇色彩的聖經級著作。這一套著作共分為三卷,第一卷通過實際動手實驗的方式深入探討TCP/IP協議,第二卷逐行解釋了4.4BSD系統TCP/IP協議棧的15,000行實現程式碼,第三卷探討了T/TCP和HTTP等高階協議。整套書最大的特點就是貼近實戰,完全符合程式設計師的胃口,不空談,不說教,用實驗和程式碼來說明問題。寫作這樣的書,對於作者要求非常之高,即使在今天看來,敢於這麼寫作的作者也是鳳毛麟角。Richard Stevens以他的寫作風格和作品,在TCP/IP程式設計領域豎立起一座豐碑,令其他作者高山仰止,心嚮往之。在下文將要提到的Effective TCP/IP Programming一書中,甚至把“讀Stevens的書”專門列為一個條款。這套著作的地位,可見一斑。


  學習這套書,與其說需要讀,不如說需要做。Stevens最強調程式設計師的兩項能力,一是讀程式碼,二是動手實驗。他在自己所有的書裡都敦促讀者將範例輸入電腦,親自編譯、執行和除錯。這當然需要花費大量的時間和精力,但是如果有讀者能夠紮紮實實地這麼做,那麼他所付出的每一分鐘都將會有雙倍的回報。


2.Richard Stevens, UNIX Network Programming, 2/e, Vol.1 / Vol.2
《 UNIX網路程式設計卷2:程序間通訊(影印版·第2版) 》《 UNIX網路程式設計(第2版)第1卷:套介面API和X/Open傳輸介面API 》


  又是Richard Stevens,又是經典名著。這本書的第一版問世於1990年,是Stevens的開山之作,一舉奠定了Stevens在網路程式設計領域的重要地位。如果說TCP/IP Illustrated解答了“什麼是TCP/IP”和“TCP/IP是怎麼實現的”兩個問題,那麼這本書則是在回答“怎樣運用TCP/IP開發網路應用程式”的問題。顯而易見,這本書的內容更加貼近普通程式設計師,因此,大多數人是先學習UNP,然後再深入學習TCP/IP Illustrated。


  這也是一本讓人傷感的書,Richard Stevens從1997年開始撰寫此書第二版,制定了一個巨集大的計劃,卷1闡述Socket API和TLI API,卷2闡述除Socket之外的其他IPC機制,卷3闡述網路程式設計應用。應該說,卷1和卷2都是為了給卷3打基礎。然而天妒英才,就在世人翹首企盼第三卷的時候,1999年9月1日,Richard Stevens英年早逝。留下這套未完成的鉅著,讓人感慨不已。不過最近從Prentice Hall傳來好訊息,出版社已經找到合適的作者,重新修訂這套經典鉅著,其中第一卷即將問世,並且已經在Amazon上熱賣。相信會有當世高人沿著Stevens的足跡給我們續寫第三卷的,讓我們拭目以待。


可選圖書:Douglas E. Comer, Internetworking with TCP/IP, Vol.1 / Vol.2 / Vol.3
《 用TCP/IP進行網際互聯第一卷:原理、協議與結構(第四版) 》《用TCP/IP進行網際互聯-第二卷:設計、實現與核心(第三版) 》《用TCP/IP進行網際互聯第三卷:客戶-伺服器程式設計與應用(Linux/POSIX套接字版) 》


  這套書也是三卷,前兩卷內容與TCP/IP Illustrated相似,最後一卷則偏重應用程式的開發。總體上來看,這三卷書的內容與上述Stevens的兩套著作相當。Comer教授的這套書定位是教材,因此寫出來中規中矩,寓精彩於平和之中。讀者如果喜歡閱讀教材風格的書,這套應該是很好的選擇。


3.Jon C. Snader, Effective TCP/IP Programming
(中文版《 高階TCP/IP程式設計 》,中國電力出版社)
自徹讀Effective C++之後,我總結出一條經驗。無論在哪個領域中,一旦掌握基礎知識,則應該迅速去尋找該領域中一本名為“Effective XXX”的著作並閱讀之,一定可取得事半功倍的效果。Effective C++如此,Effective STL如此,Effective Java如此,這本Effective TCP/IP同樣如此,也是一劑功效強大的催化劑。


  本書作者是經驗豐富的TCP/IP程式設計師,他在這本書中總結了44個難得的TCP/IP開發經驗,並且將每條經驗背後的道理都詳細地講解。毫無疑問,這種“專家經驗”型著作對於提高讀者水平,能夠起到最高效、最直接的作用。


  初學TCP/IP的朋友可能覺得,自己應該先把基本知識熟練掌握,再看這本書,效果會更好。我認為不必如此,您可以在基本觀念建立起來之後直接品讀此書。這本書篇幅不大,起點不高,卻對很多關鍵問題進行了全面而細緻地介紹,在具體問題的闡述上頗有Richard Stevens之風,也是純而又純的程式設計師風格——拿程式碼說話。


  系統學習和重點難點的突破相結合,歷來是快速掌握一門技術的良方。由Scott Meyers開創的“Effective”之風,已有愈演愈烈之勢,這是程式設計師們的巨大福音。我強烈建議大家,不要放過任何一本以“Effective”為名的技術書籍。


4. Douglas Schmidt, Steven Huston,C++ Network Programming, Vol.1 / Vol.2 (中文版將分別由華中科技大學出版社和電子工業出版社出版)
《 C++網路程式設計 卷1:運用ACE和模式消除複雜性 》《 C++網路程式設計,卷2 基於ACE和框架的系統化複用 》


ACE介紹
  今天的網路程式設計環境是建立在C的基礎之上。如果你滿足於C層次的TCP/IP程式設計,那麼Stevens的書可以說達到了一個最高境界,你大可以登東山而小魯。但是如果再上一個層次,考慮如何運用C++強大的抽象機制是網路程式設計變得更加富於藝術性,更加高效可靠,那麼恐怕必須要高度重視這套書。


  這套書共兩卷,篇幅都不大,主要內容是介紹ACE。在C++領域,由於這套書被Bjarne Stroustrup編入C++ In Depth系列,因此具有崇高的地位。而在網路程式設計領域,也有人稱讚此書為Stevens之後最重要的網路程式設計著作。作者Douglas Schmidt是C++、網路程式設計和模式領域中國際公認的權威專家,潛心研究C++網路程式設計已經十多年。他發起的ACE開源專案是目前當之無愧的最優秀和最成功的C++網路程式設計環境,不僅具有非常出色的可移植性,而且效能卓越。美國國防部的ARPA已經支援這個專案好幾年了,其最終目的是在ACE的基礎上建立可用於現代戰爭的分散式實時嵌入式系統。毫無疑問,ACE無論在理論上還是在實踐中,都是最值得程式設計師關注的網路程式設計典範專案,而這一套兩卷對ACE的介紹性書籍,也毫無疑問是最值得網路程式設計師品讀分析的經典。學習這兩本書,你可以將經典的基於C API的網路程式設計知識與現代面向物件、模式和框架等最新技術思想結合起來,從而使你對網路程式設計的認識上升到一個新的高度。