前言
? ? ? ?
? ? ? ? 以<深入理解計算機系統>(以下稱“本書”)內容為基礎,對程序的整個過程進行梳理。本書內容對整個計算機系統做了系統性導引,每部分內容都是單獨的一門課.學習深度根據自己需要來定
引入?
? ? ? ? 網絡是計算機科學中非常重要的部分,筆者過去看過相關的內容,但都理解得不是很透徹.本書內容從網絡基本面講起,有了前面進程,文件等概念的基礎,挺適合入門.
網絡概述
所有程序都遵循的開發思路
?????????本書P642:所有的網絡應用都是基于相同的基本編程模型,有著相似的整體邏輯結構,并且依賴相同的編程接口 ---黑體字是原話
? ? ? ? ----解讀:這句話有兩層含義:
? ? ? ? ? ? ? ? ? ? ? ? 1>不管是web端還是移動端,或者桌面端的通信模塊,使用的api都差不多
? ? ? ? ? ? ? ? ? ? ? ? 2>編程模型=思想,邏輯結構=程序結構,編程接口=api.網絡之外的程序也是同樣的思路:先有編程思想,再設計程序結構,最后寫代碼-api實現.
所有程序開發的過程:選擇編程模型,設計程序結構,寫代碼
客戶端-服務器編程模型
? ? ? ? 1.每個網絡應用都是基于客戶端-服務器模型的.采用這個模型,一個應用是由一個服務器進程和一個或多個客戶端進程組成.服務器管理某種資源,并且通過操作這種資源來為它的客戶端提供某種服務.? ---黑體字是原話
? ? ? ? ????????----解讀:網絡應用包含了兩個層面:進程和數據交換.是的,又回到了熟悉的部分:操作數據.
? ? ? ? 2.客戶端-服務器模型中的基本操作是事務.一個事務包含4個步驟.
? ? ? ? ????????1>客戶端發送請求 2>服務器處理請求 3>服務器發送相應 4>客戶端處理響應.
? ? ? ? 3.客戶端和服務器都屬于進程,而不是常提到的機器或者主機.
? ? ? ? ? ? ? ? 進程和主機的關系分析:
? ? ? ? ? ? ? ? ? ? ? ? 1>一臺主機可以運行多個進程,所以一臺主機可包括多個客戶端和服務器
? ? ? ? ? ? ? ? ? ? ? ? 2>一個進程可以屬于這臺或那臺主機,所以客戶端和服務器可以分布于不同主機上
網絡的物理部分
? ? ? ? 客戶端和服務器通常運行在不同主機上,并且通過計算機網絡的硬件和軟件資源來通信.
? ? ? ? 對主機而言,網絡只是又一種I/O設備,是數據源和數據接收方.一個插到I/O總線擴展槽的適配器提供了到網絡的物理接口.從網絡上接收到的數據從適配器經過I/O和內存總線復制到內存,通常通過DMA傳送.相似地,數據也能從內存復制到網絡.? ---黑體字是原話
????????????????----解讀:網絡是一種I/O設備,意味著被抽象成文件,同時有對應的標準來操作.見筆者另一篇貼理解計算機系統_文件管理_系統級I/O(一)-CSDN博客? ? ? ??
各種網絡簡單示意?
1>局域網(以太網)
? ? ? ? 由集線器連接多臺主機
2>大型局域網
? ? ? ? 由網橋連接多個集線器
局域網概念圖--把前面兩種綜合起來
3>廣域網
? ? ? ? 內部由路由器連接網橋或集線器,外部以多個路由器作結點組成互聯網絡.
? ? ? ? 每個路由器都身處內部和外部兩個網絡,在每個網絡中均有自己的ip地址.
注意:internet和Internet不一樣,internet是概念上的互聯網,由路由器完成.而Internet指的是國際互聯網.?
? ? ? ? 本書在網絡這塊的內容,偏向于底層實現.而網絡的應用層,傳輸層,物理層等概念,屬于在底層的基礎上建立起來的內容,本書中提及不多,筆者找了篇寫得比較詳細且生動的帖子以供參考一文講透TCP/IP協議 | 圖解+秒懂+史上最全_tcpip協議-CSDN博客
網絡數據怎樣傳遞
? ? ? ? 簡單的說,數據傳遞遵循某種協議.
? ? ? ? 本書原話:互聯網絡至關重要的特性是,它能由采用完全不同和不兼容技術的各種局域網和廣域網組成.每臺主機和其他每臺主機都是物理相連的.但是如何能夠讓某臺源主機跨過所有這些不兼容的網絡發送數據位到另一臺目的主機呢?
? ? ? ? 解決方法是一層運行在每臺主機和路由器上的協議軟件,它消除了不同網絡之間的差異.這個軟件實現一種協議,提供兩種基本能力:命名機制和傳送機制.? ?---黑體字是原話
? ? ? ? ----解讀:協議和筆者前面帖子中的"標準"是相同意義.這段話表達了協議的設計思想.協議正是依據這些思想設計出來的,如TCP/IP協議,UDP協議等.而在網絡世界里,程序員面向協議編程.
? ? ? ? ? ? ? ? 命名機制:每臺主機會分配至少一個互聯網絡地址(Internet address),標識主機
? ? ? ? ? ? ? ? 傳送機制:采用數據包封裝數據
=========================內容分割線↓=======================================
引入一點知識:庫
和上一篇帖子對照:程序員可以面向標準,面向庫或者面向框架編程.
????????框架包含的內容多,需要程序員考慮的少,自由空間少,簡單;
????????庫和協議包含的內容少,需要程序員考慮的內容多,自由空間大,復雜 ;
? ? ? ? 對于技術水平來講,筆者偏向于程序員除了用框架,自己能使用標準(協議)的api,能自己寫庫.
=========================內容分割線↑=======================================
? ? ? ? 下面講了一個數據傳輸的示例,數據從應用層到傳輸層到物理層(沒顯式提出),再到另一臺主機
其中提到互聯網絡思想的精髓是封裝.?
小結
? ? ? ? 網絡編程基礎
????????