
在B站上有一門被大家口口相傳的計算機網絡課程,「計算機網絡微課堂」,粉絲們給予了極高的評價:


還有很多公號、自媒體人自發推廣:


課程的授課老師「湖科大教書匠」高軍老師,不愧為一位「匠人」,在20多年的教學生涯中,他不斷聽取學生的反饋,反思如何講才能把計算機網絡這門抽象的課程講得通俗、易懂,最好還生動、有趣。
正是這樣年復一年的優化、改進,讓高老師的課成為學生們最喜愛的一門課。2019年,高老師製作了微課視頻,並上傳到B站。高老師從未主動宣傳過這門課,但是如前所述,無論學生還是流量大咖,都主動把這門課推薦給別人,目前這系列視頻的播放量已經達到160萬+:

非常高興地告訴大家,這門課程經過進一步升級後,在清華大學出版社出書啦——《深入淺出計算機網絡(微課視頻版)》,相信不會讓大家失望。
在本文後面的「精彩試讀」部分,摘取了書中一小節的內容「計算機網絡體系結構為什麼要分層」,且有配套的視頻講解,歡迎大家試讀。下面先向你詳細介紹一下這本書。

掃碼優惠購書
書名:深入淺出計算機網絡(微課視頻版)
書號:9787302606260
定價:79元
頁碼:432頁
高老師對這本書的介紹請觀看下面視頻:
如果流量不多,請看下面的圖文介紹。
本書結構如下

本書特色如下
配套110+個講解視頻,
掃碼隨時觀看。

需要說明的是,書中的講解視頻有一大半是高老師全新製作的,有一小半和B站已有視頻重合。
不過,高老師正在重新錄製這部分視頻,也感謝這兩年來粉絲們給高老師的熱心反饋,高老師都做了進一步優化,新視頻預計會在8月底全部完成,到時候會更新書中資源(二維碼不變,放心)。
精美思維導圖,幫你理清知識脈絡。
本書的思維導圖可謂巨大而精美,實話說,我本想全彩印刷出來,並作為贈品給大家。可是和印務同事數次溝通,並兩次打樣後發現,最大的紙(超1米長)也不足以印清楚,下面是第2章的思維導圖打樣效果:

而且全書一共十幾張這樣的圖,調整難度實在太大,成本也實在過高,只好遺憾放棄印出來的想法,只提供電子版思維導圖給大家。不過我們後續還是想精心調整一下,做成超酷的大海報單獨出版,有興趣的讀者可以關注。要知道,這不是一般的梗概圖,而是關鍵知識點都集結於其中的精華圖,考前複習足夠使用!
豐富的配套資源

本書提供詳細的教學大綱、PPT,且作者在中國MOOC大學、學銀在線兩大平台免費開課,老師們可以方便地將其引用為SPOC,開展線上教學或線上線下混合式教學。
2)配套習題和答案

各章都有配套習題和答案。另外,高老師還會在B站講解408考研歷年真題,大家可以通過下面二維碼關註:

3)專業術語中英對照,提供圖、表兩種形式
計算機網絡中的專業術語眾多,為了方便讀者學習,特意整理了術語對照,並提供圖表兩種形式,讀者可以根據需要使用。


540+幅插圖用心繪製,
動態過程躍然紙上
本書中插圖多大540+幅,都是作者用心繪製的,嚴謹、生動,一圖勝千言。來看幾個示例:



最後需要說明的是,課程是持續不斷發展的,所以後面有可能會不定時地更新一些資料,可以請大家時刻關注封底的「本書資源」二維碼,以及高老師的B站動態(B站搜索「湖科大教書匠」)。
粉絲優惠
目前本書正在預售,書圈粉絲可享59.3元包郵的活動,活動截止到9月10號。預計8月15號陸續發貨,北京地區最先發貨,其他地區也會快馬加鞭地安排。

精彩試讀
本部分將以五層原理體系結構為例,介紹計算機網絡體系結構分層的必要性。
計算機網絡是一個非常複雜的系統,「分層」可將龐大而複雜的問題轉化為若干較小的局部問題,而這些較小的局部問題就比較容易研究和處理。
下面按照由簡單到複雜的順序,來看看實現計算機網絡要面臨哪些主要問題,以及如何將這些問題劃分到五層原理體系結構的相應層次,以便層層處理。你也可以點擊觀看本文的配套講解視頻:
01
物理層(Physical Layer)
首先來看最簡單的情況。兩台計算機通過一條鏈路連接起來,如圖2所示。

■圖 2 最簡單的計算機網絡
我們來看看在圖2所示的最簡單的計算機網絡中,需要考慮的主要問題有哪些。
1
●
採用什麼傳輸媒體
可以採用多種傳輸媒體作為傳輸鏈路,例如同軸電纜、雙絞線電纜、光纖和光纜、自由空間等,如圖3所示。

■圖 3傳輸媒體
2
●
採用什麼物理接口
用戶主機、交換機以及路由器等網絡設備需要採用恰當的物理接口來連接傳輸媒體。例如圖4所示的是計算機主板上常見的RJ45以太網接口。

■圖4 計算機主板上的RJ45以太網接口
3
●
採用什麼信號
在確定了傳輸媒體和物理接口後,還要考慮使用怎樣的信號來表示比特0和1,進而在傳輸媒體上進行傳送。例如使用圖5所示的數字基帶信號,低電平表示比特0,高電平表示比特1。

■圖5 使用數字基帶信號表示比特0和1
解決了上述這些問題,兩台計算機之間就可以通過信號來傳輸比特0和1了,如圖6所示。

■圖6 兩台計算機之間通過信號來傳輸比特0和1
我們可以將上述這些問題劃歸到物理層。
請讀者注意,嚴格來說傳輸媒體並不屬於物理層範疇,它並不包含在計算機網絡體系結構之中。另外,計算機網絡中傳輸的信號,並不是我們舉例的簡單的數字基帶信號。我們之所以舉例成數字基帶信號,是為了讓讀者更容易理解。當讀者在學習本身就不容易理解的、概念抽象的計算機網絡體系結構時,不讓其他技術細節再給讀者造成學習障礙。
02
數據鏈路層(data link layer)
實用的計算機網絡往往由多台計算機互連而成,而不是圖6所示的兩台計算機互連。例如主機A、主機B和主機C通過總線互連成了一個總線型網絡,如圖7所示。

■圖7 由3台主機互連成的總線型網絡
假設我們已經解決了物理層的問題,即主機間可以通過信號來傳送比特0和1了。來看看在圖7所示的總線型網絡中,需要考慮的主要問題有哪些。
1
●
如何標識網絡中的各主機
假設主機A要給主機B發送數據,如圖8所示。表示數據的信號會通過總線傳播到總線上的每一個主機。那麼主機B如何知道該數據是主機A發送給自己的,進而接受該數據,而主機C又如何知道該數據並不是發送給自己的,應該丟棄該數據呢?這就需要解決如何標識網絡中各主機的問題,即主機編址問題。讀者可能聽說過網卡上固化的MAC地址,其實MAC地址就是主機在網絡中的地址。

■圖8 信號沿總線傳播
2
●
如何區分出地址和數據
主機在發送數據時應該給數據附加上源地址和目的地址。當其他主機收到後,根據目的地址和自身地址是否匹配來決定是否接受該數據,還可以通過源地址知道是哪個主機發來的數據,如圖9所示。

■圖9 給主機編址的作用
要將源地址和目的地址附加到數據上,這就需要收發雙方約定好數據的封裝格式。發送方將待發送的數據按照事先約定好的格式進行封裝(即在數據前面添加包含源地址、目的地址和其他一些控制信息的首部),然後將封裝好的數據包發送出去。接收方收到數據包後,按照事先約定好的格式對其進行解封。
為了簡單起見,在圖9所示的數據包首部中僅包含了源地址和目的地址,並且僅用一個字母表示地址。
3
●
如何協調各主機爭用總線
對於總線型的網絡,還會出現多個主機爭用總線時產生碰撞的問題。例如,某個時刻總線是空閒的,也就是沒有主機使用總線來發送數據。片刻之後,主機A和主機C同時使用總線來發送數據,這必然會造成信號碰撞,如圖10所示。因此,如何協調各主機爭用總線,也是必須要解決的問題。

■圖10 兩個主機爭用總線時產生碰撞
請讀者注意,上述這種總線型網絡早已淘汰。現在常用的是使用以太網交換機將多台主機互連成交換式以太網,如圖11所示。在交換式以太網中,不會出現主機爭用總線而產生碰撞的問題。那麼以太網交換機又是如何實現的呢?

■圖11 多個主機通過以太網交換機互連
我們可以將上述這些問題劃歸到數據鏈路層。
03
網絡層(network layer)
解決了物理層和數據鏈路層各自所面臨的問題後,就可以實現數據包在一個網絡上傳輸了。然而,網絡應用往往不僅限於在一個單獨的網絡上。例如,我們幾乎每天都會使用的因特網,是由非常多的網絡和路由器互連起來的,僅解決物理層和數據鏈路層的問題,還是不能正常工作。
我們可以把圖12所示的小型互連網看作因特網中很小的一部分,來看看在該小型互連網中,需要考慮的主要問題有哪些。

■圖12 小型互連網
1
●
如何標識互連網中的各網絡
以及網絡中的各主機
由於互連網是由多個網絡通過多個路由器互連起來的,因此我們還需要對互連網中的各網絡進行標識。這就引出了網絡和主機共同編址的問題,相信讀者一定聽說過IP地址。
我們給圖12中的各主機和部分路由器接口分配如圖13所示的IP地址。

■圖 13 小型互連網中各設備的IP地址
網絡N1中的主機H3、主機H4以及路由器R1連接網絡N1的接口,它們都處於同一個網絡,因此它們的IP地址的網絡號相同,在本例中為192.168.0,而它們的主機號分別為1、2以及254,各不相同,用於在網絡N1中唯一標識它們自己。
同理,我們給網絡N2中的主機H1、主機H2以及路由器R2連接網絡N2的接口也分配相應的IP地址。請讀者注意,給網絡N2分配的網絡號為192.168.1,這與給網絡N1分配的網絡號192.168.0是不同的,因為它們是不同的網絡。本書第4章將詳細介紹IP地址的相關內容,這裡就不再深入介紹了。
2
●
路由器如何轉發分組和進行路由選擇
在互連網中,源主機與目的主機之間的傳輸路徑往往不止一條。分組從源主機到目的主機可走不同的路徑,例如圖14所示。這就引出了路由器如何轉發分組以及進行路由選擇的問題。

■圖14 源主機和目的主機之間有多條路徑
可以將上述這些問題劃歸到網絡層。
04
運輸層(transport layer)
解決了物理層、數據鏈路層以及網絡層各自的問題後,就可以實現分組在多個網絡之間的傳送了。然而,對於計算機網絡應用而言,仍有一些重要問題需要考慮。
1
●
如何標識主機中與
網絡通信相關的應用進程
在用戶主機中同時運行着的、與網絡通信相關的應用進程往往不止一個。當主機通過網絡接收到數據包後,應將數據包交付給哪一個應用進程就成為了一個亟待解決的問題。
在圖15中,主機H3中運行着與網絡通信相關的Web服務器進程Nginx,主機H1中運行着與網絡通信相關的瀏覽器進程和QQ進程。當主機H1收到主機H3中Nginx進程發來的數據包後,應將數據包交付給瀏覽器進程還是QQ進程呢?很顯然,如果數據包中含有與進程相關的標誌信息,主機H1就可以根據標誌信息將數據包交付給相應的應用進程。

■圖15 進程之間基於網絡的通信
這就引出了如何標識與網絡通信相關的應用進程、進而解決進程之間基於網絡通信的問題。
2
●
如何處理傳輸差錯
在本書1.5.8節中,曾介紹過分組由於誤碼被路由器或用戶主機丟棄,又或是由於路由器繁忙而主動丟棄正常分組,這些都屬於傳輸差錯。那麼,當出現傳輸差錯時應該如何處理,這也是需要解決的問題。
我們可以將上述這些問題劃歸到運輸層。
05
應用層(application layer)
解決了物理層、數據鏈路層、網絡層以及運輸層各自的問題後,就可以實現進程之間基於網絡的通信了。
在進程之間基於網絡通信的基礎上,可以制定各種應用協議,並按協議標準編寫相應的應用程序,通過應用進程之間的交互來實現特定的網絡應用。例如支持萬維網的HTTP協議、支持電子郵件的SMTP協議以及支持文件傳送的FTP協議等。另外,在制定應用協議時,還需要考慮應用進程基於網絡通信時的會話管理問題和數據表示問題(採用何種編碼、是否加密和壓縮數據)。
我們可以將上述這些問題劃歸到應用層。
至此,我們將實現計算機網絡所需要解決的各種主要問題,分別劃歸到了物理層、數據鏈路層、網絡層、運輸層以及應用層。這就構成了五層原理體系結構,如圖16所示。

■圖16 五層原理體系結構各層的主要功能
五層原理體系結構各層的主要功能分別是:
物理層解決使用何種信號來表示比特0和1的問題;
數據鏈路層解決數據包在一個網絡或一段鏈路上傳輸的問題;
網絡層解決數據包在多個網絡之間傳輸和路由的問題;
運輸層解決進程之間基於網絡的通信問題;
應用層解決通過應用進程的交互來實現特定網絡應用的問題。
請讀者思考一下,如果你是一名程序員,要編程解決實現計算機網絡所面臨的各種軟件問題。那麼,你是願意將這些問題全部放在一個模塊中編程實現呢,還是願意將它們劃分到不同的模塊中,逐個模塊編程實現呢?相信讀者一定會選擇後者。