描述
內容簡介
本書有以下幾個特點。
第一,會從身邊經常見到的事情出發,用講故事的方式來說明各種協定,然後慢慢擴大到不熟悉的領域。舉例來說,每個人都會使用檢視IP 位址的指令,我們就從這個指令開始,說明一些相關概念。每個人都在大學宿舍組過簡單的網路來打電動,我們就從宿舍網路有關的最簡單的網路概念開始講,然後說到辦公室網路,再說到日常常用的與上網、購物、視訊下載等活動相關的網路通訊協定,最 後才說到最陌生的資料中心。說到這裡的時候,很多概念已經在前面的「宿舍」和「辦公室」的實例中都出現過,因此更容易接受和了解。
第二,說明網路通訊協定時會更加接近使用場景,將各個層次的關係串連起來,而非孤立地說明某個概念。常見的電腦網路課程常常會按照網路分層,一層一層地講,卻很少講層與層之間的關係。舉例來說,我們在學習路由式通訊協定的時候,在真實場景中,這麼多的演算法和二層是什麼關係呢?和四層又是什麼關係呢?再舉例來說,我們在真實的網路通訊中造訪一個網站、進行一次支付,那麼在TCP 三次驗證的時候,IP 層在做什麼? MAC 層在做什麼?這些內容本書都會逐一說明。
第三,在說明完各個層次的協定之後,會說明如何在目前熱門領域(例如雲端運算、容器和微服務)中使用這些協定。透過學習本書,讀者一方面可以了解這些網路通訊協定的真實應用場景,另一方面也可以透過上手使用雲端運算、容器、微服務來進一步加深對於網路通訊協定的了解。
透過學習本書,讀者一方面可以了解這些網路通訊協定的真實應用場景,另一方面也可以透過上手使用雲端運算、容器、微服務來進一步加深對於網路通訊協定的了解。 |
作者簡介
|
目錄
01通訊協定概述
1.1為什麼要學習網路通訊協定 1.2 網路分層的真實含義 1.3 ifconfig:熟悉又陌生的命令列 1.4 DHCP 與PXE:IP 位址是怎麼來的,又是怎麼沒的
02 從二層到三層 2.1 從實體層到MAC 層:如何在宿舍裡自己網路拓樸玩連線遊戲 2.2 交換機與VLAN:辦公室太複雜,我要回學校 2.3 ICMP 與ping:投石問路的偵察兵 2.4 世界這麼大,我想出閘道:歐洲十國游與玄奘西行 2.5 路由式通訊協定:「西出閘道無故人」「敢問路在何方」
03 最重要的傳輸層 3.1 UDP:雖然簡單但是可以訂製化 3.2 TCP(上):雖然複雜,使用起來卻輕鬆 3.3 TCP(下):西行必定多妖孽,恆心智慧消磨難 3.4 socket:Talk is cheap, show me the code
04 最常用的應用層 4.1 HTTP:看個新聞原來這麼麻煩 4.2 HTTPS:點外賣的過程原來這麼複雜 4.3 串流媒體協定:如何在直播裡看到帥哥美女 4.4 P2P 協定:下載電影,分散式協定速度快
05 陌生的資料中心 5.1 DNS:網路世界的地址簿 5.2 HTTPDNS:網路世界的地址簿也會指錯路 5.3 CDN:你去超商取過快遞嗎 5.4 資料中心:我是開發廠商,自己拿地蓋別墅 5.5 VPN:朝中有人好做官 5.6 行動網路:去巴塞隆納,手機也上不了「臉書」
06 雲端運算中的網路 6.1 雲端網路:自己拿地成本高,購買公寓更靈活 6.2 軟體定義網路:共用基礎設施的社區物業管理辦法 6.3 雲端網路之安全:雖然不是土豪,也需要基本保障 6.4 雲端網路之QoS:室友瘋狂下電影,我該怎麼辦 6.5 雲端網路之隔離GRE、VXLAN:雖然住一個社區,也要保護隱私
07 容器技術中的網路 7.1 容器網路:來去自由的日子,不買公寓去合租 7.2 容器網路之Flannel:每人一畝三分地 7.3 容器網路之Calico:為了高效說出善意的謊言 7.4 RPC 概述:遠在天邊,近在眼前
08 微服務相關協定 8.1 以XML 為基礎的SOAP:不要說NBA,請說美國職業籃球聯賽 8.2 以JSON 為基礎的RESTful 介面協定:我不關心過程,請給我結果 8.3 二進位類別RPC 協定:還是叫NBA,總說全稱多費勁 8.4 跨語言類別RPC 協定:交流之前,雙方先交換一下專業術語表
09 網路通訊協定知識串講 9.1 知識串講:用「雙11」的故事串起網路通訊協定的碎片知識(上) 9.2 知識串講:用「雙11」的故事串起網路通訊協定的碎片知識(中) 9.3 知識串講:用「雙11」的故事串起網路通訊協定的碎片知識(下) 9.4 架設一個網路實驗環境:授人以魚不如授人以漁 |
序
前言
為什麼要寫網路通訊協定 寫一本通俗地說明網路通訊協定的書,一直是我的夢想。 在我十多年的職業生涯中,對網路通訊協定愛恨交加,學習過程大致分為以下三個階段。
第一階段:難且無從下手。雖然我們在大學都學過網路通訊協定,但是感覺網路通訊協定的基礎知識非常多、非常複雜。學的時候就渾渾噩噩,真正到了實作中更是糊裡糊塗,一旦工作中遇到了網路問題,除了會簡單地ping 幾下,基本沒有什麼解決問題的想法。然而當我想拿起書來學習,或看一些官方文件的時候,各種生僻的專業詞彙馬上撲面而來。每了解其中的詞彙,都要看n 篇文章,讀n 本書,導致一篇即使很短的有關網路技術的文章也要幾個星期才能看完。這嚴重打擊著我的自信心,並且很容易讓人在技術的海洋中迷失自我,進一步產生「從入門到放棄」的衝動。
第二階段:苦且繞不過去。經過多次放棄之後,我發現在我的職業生涯中,網路這一關無論如何也繞不過去。本來覺得寫Java 程式時可以依賴別人的函數庫,所以就不用關心這麼多底層的技術了,但是到後來才發現,服務數量一多,傳輸量一大,我們關心的不再僅是某個Java 應用,而是要提升整個叢集的效能,這時網路問題就會出現。而且大規模的微服務架構必定要上雲端、使用VPC 網路,這時就必定要考慮主備同時上線和高可用性,必定要做各個層次的負載平衡,這些都需要網路方面的技術。既然繞不過去,那就必須「啃」下它,於是我就進入了暗無天日的網路通訊協定學習的過程。逢山開路、遇水搭橋,遇到一個基礎知識攻克一個,再將其寫到部落格或筆記裡面。有時候要看很多文章和書才能攻克一個基礎知識,但我還是每天下班抱著網路技術相關的文章和書看,直到將各個零散的基礎知識串連了起來。後來在定位網路問題的時候,我開始有了自己的想法,這時才感覺算是暫時渡過了這條河。
第三階段:有趣且受益匪淺。網路通訊協定和變化萬千的前端技術不同,它的變化比較小,一旦掌握到某種程度,就會一直受益。技術變化很快,這幾年OpenStack、Docker、Mesos、Kubernetes、微服務、Serverless、AIOps 等技術層出不窮,讓大多數技術人員應接不暇,但是掌握了基礎知識以後,我反而發現很多技術看起來「轟轟烈烈」,扒下外衣,其實本質還是作業系統、電腦網路、演算法與資料結構、編譯原理、電腦組成與系統結構。如果基礎打得好,最大的收益就是,在最新的技術出來以後,只要經過短時間的學習,就很容易上手,就能在新技術的滾滾浪潮中保持快速學習的能力。這點讓我受益匪淺。既然網路通訊協定是基礎,又繞不過去,還這麼難,但是跨過去之後又不怎麼變,收益越來越大,那為什麼不寫一本書,給大家一點可參考的經驗,幫助大家儘快透過第一和第二階段呢?
為什麼要趣談 決定寫網路通訊協定,但是怎樣寫呢?其實網路通訊協定相關的文章已經非常多了,但是我自己學習網路通訊協定的時候,還是遇到了很多的困難。網路通訊協定基礎知識太多,學完記不住。大部分讀者應該都學過電腦網路課程,學的時候感覺並不難,尤其這門課沒有公式,更像是文科的東西。學了一大堆東西,也背了一大堆東西,但是最後應付完考試之後,都「還給了老師」。
網上有很多關於網路通訊協定的文章,看的時候感覺別人說得很有道理,自己好像了解了,但是經不住問,一問就會發現,大概的流程明白了,可是很多細節還是不知道。從能看懂到能真正明白,中間還有很長一段路要走。
每次都感覺自己好像學會了,但實際應用的時候依舊無從下手。雖然很多細節都摸索得差不多了,但是當自己去應用和偵錯時,才發現還是沒有任何想法。舉例來說,當建立出來的虛擬機器不能上網時,還是無從下手,學過的很多東西,似乎都用不上。
我把這種現象歸納為:一看覺得懂,一問就打鼓,一用就糊塗。 所以本書使用了「趣談」這種方式,它可以解決從「入門到放棄」的問題,把晦澀的基礎知識和一些有趣的故事透過比喻的方式結合起來,這樣更容易幫助讀者系統、深入地了解網路技術的基礎知識和大致的工作流程。當然用來做比喻的實例和真實的基礎知識以及工作流程會有一定的差別,但是沒有關係,我們的大腦應該是一個快取,而非一個硬碟,透過通俗容易的方式記住知識系統和大致流程,真正到解決問題的時候,再去查閱更加準確的資料,就可以了。 |