《網路是怎樣連線的》探索之旅

阿狸不歌發表於2017-07-14

封面

圖靈出的網路基礎相關的書我也看了不少了,像《HTTP權威指南》、《圖解HTTP》、《HTTPS權威指南:在伺服器和Web應用上部署SSL/TLS和PKI》、《HTTP 小書》專門講述 HTTP/HTTPS協議;《圖解TCP/IP》、《TCP/IP詳解》專門介紹TCP/IP協議;《圖解網路硬體》、《圖解伺服器端網路架構》、《以太 網權威指南》則主要介紹網路硬體。像本書一樣囊括主要的網路協議、網路硬體等綜合性的書,圖靈倒好像是出的第一本。 要說類似本書這樣介紹網路基礎原理的書,市面其實還是很多的,一般名字就叫《計算機網路原理/計算機網路概論》,通常出自各大學出版社,如果你是計算機系的學生,那這門課是要必過的。但是這些都是典型的教材風格,內容嘛,大概只能以枯燥來形容,要不是為了考試,你可能是很難啃下去的。而《網路是怎樣連線的》這本書的原版(日文)竟然已經重印了32次,號稱“蹲馬桶就能看懂”,並且適合“向老媽、女友等普及計算機知識”,究竟是如何做到?讓我們來看一看吧……


全書圍繞著一張網路旅程地圖來說,每一章的內容都在這張圖上 ——

萬一在旅途中迷失了方向,請務必回來看一看這張地圖

探索之旅路線圖

如果開啟幾本大學版《計算機網路》的目錄,你會發現,它們的目錄幾乎都是一樣的:第一章:概述、第二章:物理層、第3章:資料鏈路層、第4章:網路層、第5章:傳輸層、第6章:應用層、第7章:網路安全。按部就班的介紹網路協議棧的每一層,而且還是從離使用者“最遠”的物理層說起。

本書沒有采用這種套路,而是從每個網民都會的“上網”(三步:開啟瀏覽器、輸入網址、瀏覽網頁)這件事說開去,揭示了“上網”背後的全過程。作者從“上網”這個常見的場景切入,把整個網路的全貌清晰地展現出來,並引導著讀者在思考“網路是怎樣連線的”過程中層層遞進,環環相扣的不斷追問與回答。並最終“實現” “不理解網路的全貌,也就無法理解每一種網路技術背後的本質意義”的目標。


本書的特點不是生硬的列出概念,而是用比較淺顯易懂的詞語來解釋概念,比如以DNS域名結構為例:

某《計算機網路原理》教材中如是說——

在分層結構的DNS域名中,必須有一個是頂級域名,然後在這個頂級域名下面再申請,或者註冊二級、三級,甚至更多級別的域名,各級域名間同樣是以小圓點(.)分隔、連線的。最右邊的部分代表的是頂級域名,左邊部分代表的是子域名,而且是級別最低的域名寫在最前面,級別最高的域名寫在最後面。下級域名必須隸屬於上級域名。例如,itct.com.cn這個DNS域名是一個三級域名,其中itct是三級域名(在本域名中級別最低),它隸屬於其二級域名com,而二級域名com又隸屬於其一級域名(又稱頂級域名)cn。

《網路是怎樣連線的》則是用了大家比較熟悉的 事業集團、部門、科室 來舉例 ——

DNS伺服器中的所有資訊都是按照域名以分層次的結構來儲存的。層次結構這個詞聽起來可能有點不容易懂,其實就類似於公司中的事業集團、部門、科室這樣的結構。層次結構能夠幫助我們更好地管理大量的資訊。DNS中的域名都是用句點來分隔的,比如www.lab.glasscom.com,這裡的句點代表了不同層次之間的界限,就相當於公司裡面的組織結構不用部、科之類的名稱來劃分,只是用句點來分隔而已A。在域名中,越靠右的位置表示其層級越高,比如www.lab.glasscom.com這個域名如果按照公司裡的組織結構來說,大概就是“com事業集團glasscom部lab科的www”這樣。其中,相當於一個層級的部分稱為域。因此,com域的下一層是glasscom域,再下一層是lab域,再下面才是www這個名字。

很顯然,“向老媽、女友等”普及DNS域名的知識用公司裡面的組織結構來舉例更好令人理解。


日式科普書有個特點,就是喜歡在書中設計幾個人物,以打諢插科的方式伴隨讀者的閱讀過程,把一些值得思考的問題或者是重要的概念通過幽默的問答方式展現出來,讓人輕鬆的就能記住知識要點。本書當中的人物是探索隊員與探索隊長,下面一段關於socket(套接字)的對話就很典型——

探索隊員: Socket庫也好,套接字(socket)也好,這個名字到底是怎麼來的呢?

探索隊長: 你知道燈泡 ? 的插座嗎?就是燈具裡面把燈泡 ? 擰進去的那個孔。

隊員: 知道呀。

隊長: 其實那個就是socket。

隊員: 啥?你說Socket庫就是燈泡? 的插座?

隊長: 你想象一下,假設我們有一段程式,把它“咔”一下插到一個套接字裡,於是我們就可以開始通訊了,就跟燈泡 ? 插進去就亮一樣。

隊員: 似乎有點牽強吧?

隊長: 哪有?套接字的背後就是傳輸資料的通道,這個通道和我們的通訊物件是相連線的,就像流過電線的電流一樣,資料就在這個通道中流動,所以我們插進去一個程式,就可以和對方通訊了,能理解不?

看了這一段對話,你對於向向老媽或者女友解釋什麼是“套接字”就一定很有信心了吧? ! 燈泡?  vs Socket

再看看某《計算機網路原理》教材裡關於Socket的解釋——

前面介紹OSI/RM的傳輸層服務時,提到過傳輸通訊兩端的端點就是TSAP地址,對應的就是傳輸層協議埠。在TCP/IP網路中,同樣有端點的概念,但它並不是直接採用OSI/RM中的TSAP叫法,而是稱為“套接字”(Socket),就像在TCP中仍然把所傳輸的資料稱為“資料段”,而沒有采用OSI/RM中的TPDU叫法一樣。當然,需要說明的是,Socket並不能直接等同於TSAP,它們只是類似,實際上Socket只是利用了TSAP地址,因為在它所包括的一組引數中就有TSAP地址—埠。“套接字”最早使用於UNIX作業系統中,後來被廣泛地應用於Windows和Linux系統中,成為了事實上的TCP標準。

Socket可以看成是在兩個網路應用程式進行通訊連線時的一個端點(或者稱為“邏輯介面”),它是連線應用程式和網路驅動程式的橋樑,如圖10-35所示。從位置上看,它與本章前面介紹的TSAP是不一樣的,因為TSAP是位於傳輸層上邊緣(但仍屬於傳輸層),而Socket是完全位於應用層,但它呼叫了傳輸層的埠。Socket包括了TSAP地址,同樣它還包括了在本章前面所介紹的服務原語。

看著上面這一堆的縮寫、術語、你懵逼了沒有呢?上面固然也用了“橋樑”來做比喻,可是哪有

就像流過電線的電流一樣,資料就在這個通道中流動,所以我們插進去一個程式,就可以和對方通訊了。

這樣的比喻來的淺顯易懂呢?

很多年前,我買的第一本程式設計書,滿篇都是“控制程式碼”(handler) 、“巨集”(Macro)這樣令人費解的詞,看得我很快就從入門到放棄了。如今,有這樣一本讀起來輕鬆愉快的《網路是怎樣連線的》就在你面前,不快下手還等什麼呢? lucky

相關文章