代計算機 閱讀筆記 16)
《計算機是如何工作的人人都能懂的計算機軟硬件工作原理》第 13 章 現(xiàn)代計算機 閱讀筆記 16第 13 章 現(xiàn)代計算機本章將對現(xiàn)代計算機的幾個精選領域進行概要介紹??紤]到計算機的多樣性和廣泛性可選擇的主題有很多。我所選擇的領域并不是當今計算機所發(fā)生趣事的詳盡清單。相反它們代表了我認為值得考慮的一些主題。本章將介紹 app、虛擬化、云計算、比特幣等。我們以一個最終設計作為結束這個設計匯集了本書介紹的許多主題。13.1 app從計算機發(fā)展的早期開始人們就把被用戶直接使用的軟件程序稱為應用程序 **(application)。為了方便將這個詞縮寫為 app。**在過去這兩個詞是可以互換的。不過隨著蘋果在 2008 年開設 iPhone 應用商店以來app 一詞已經(jīng)有了不同的含義。雖然沒有標準技術定義把軟件程序定義為 app但 app 通常具有許多共同特征。app 是為最終用戶設計的。app 一般面向的是移動設備比如智能手機或平板電腦。app 通常通過基于互聯(lián)網(wǎng)的數(shù)字商店應用商店—比如蘋果應用商店、Google 播放商店或者 Microsoft 商店分發(fā)。app 對運行其的系統(tǒng)只有有限的訪問權限而且常常必須聲明它們需要哪些特定功能才能操作。app 傾向于使用觸摸屏作為用戶輸入的主要方式。在單獨使用的時候app 一詞通常是指安裝在直接使用操作系統(tǒng) API 的設備上的軟件。換句話說app 這個詞一般意味著 “本機 app”?即為特定操作系統(tǒng)構建的 app。反過來網(wǎng)絡 app 是用網(wǎng)絡技術HTML、CSS和JavaScript設計的 app不與特定的操作系統(tǒng)綁定。圖 13-1 提供了本機 app 和網(wǎng)絡 app 的高級視圖。圖 13-1 本機 app 為特定操作系統(tǒng)構建網(wǎng)絡 app 用網(wǎng)絡技術構建如圖 13-1 所示本機 app 通常從應用商店安裝旨在利用特定操作系統(tǒng)的功能。網(wǎng)絡 app 通常從網(wǎng)站運行旨在使用網(wǎng)絡技術。網(wǎng)絡 app 在瀏覽器或其他呈現(xiàn)網(wǎng)絡內(nèi)容的進程中運行。現(xiàn)在讓我們更細致地看看本機 app 和網(wǎng)絡 app。13.1.1 本機 app如前所述本機 app 為特定操作系統(tǒng)而構建。蘋果應用商店和之后類似的應用商店開創(chuàng)了本地軟件開發(fā)的新時代為開發(fā)人員提供了新的目標平臺、新的軟件分發(fā)方法以及用軟件賺錢的新方法。本機 app 的開發(fā)目前主要集中在兩個平臺上iOS 和 Android。當然仍然要為其他操作系統(tǒng)開發(fā)軟件但一般這樣的軟件不具備 app 的典型特性移動友好、基于觸摸屏的輸入、通過應用商店分發(fā)等?。**Android 和 iOS 的區(qū)別在于它們的編程語言和 API 等。**因此編寫在 Android 和 iOS 上都運行的 app 需要維護獨立的代碼庫或者使用跨平臺框架比如 Xamarin、React Native、Flutter、Unity。這些跨平臺解決方案把每個操作系統(tǒng) API 的底層細節(jié)進行了抽象使得開發(fā)人員可以編寫能在多個平臺上運行的代碼。許多本機 app 也依賴于網(wǎng)絡服務這意味著 app 開發(fā)人員不僅必須為 iOS 和 Android 編寫并維護代碼而且還必須構建或集成網(wǎng)絡服務。開發(fā)跨平臺的、網(wǎng)絡連接 app 需要大量的工作和專業(yè)知識過去開發(fā)人員一般只關注一個平臺比如 Windows PC 或 Mac。對于針對多個平臺和網(wǎng)絡的開發(fā)人員來說現(xiàn)在的工作當然更為復雜。平臺競爭對于用戶而言通常是好事但對于開發(fā)人員而言則意味著更多的工作。有意思的是app 開發(fā)的當前狀態(tài)本可能會完全不同。當 2007 年 1 月發(fā)布 iPhone 時關于 iPhone 上的第三方 app 開發(fā)Steve Jobs蘋果當時的 CEO是這樣說的iPhone 內(nèi)部有完整的 Safari 引擎。你可以編寫令人驚嘆的 Web 2.0 和 Ajax app它們在外觀和行為上與 iPhone 的 app 完全一樣。這些 app 可以與 iPhone 服務完美地集成。它們可以打電話可以發(fā)郵件可以在 Google 地圖上查找位置。你猜怎么著你不需要 SDK注意SDKSoftware Development Kit軟件開發(fā)工具包是開發(fā)人員用于為特定平臺構建應用程序時使用的軟件集合。根據(jù)這段話蘋果對于第三方 app 開發(fā)的初始計劃是簡單地讓開發(fā)人員構建能使用 iPhone 功能的類 app 網(wǎng)站。本機 app 的開發(fā)將局限于蘋果開發(fā)比如相機、電子郵件、日歷app。當時把網(wǎng)絡用作應用程序開發(fā)的平臺并不常見。蘋果的立場是具有前瞻性的??上У氖?007 年網(wǎng)絡的底層技術還不夠成熟不能讓網(wǎng)絡成為真正的 app 平臺。到 2007 年 10 月蘋果改變了它的說法宣布蘋果將允許開發(fā)人員為 iPhone 構建本機 app。2008 年蘋果開放了應用商店作為向用戶分發(fā)本地 iPhone app 的唯一受支持的機制。蘋果策略的逆轉使公司受益因為應用商店成為蘋果收入的來源。注冊為應用商店開發(fā)人員需要付費蘋果還從每一筆銷售額中收取一定比例的費用。應用商店和本機 iPhone 開發(fā)也為獨家內(nèi)容打開了大門app 只能在蘋果設備上運行。應用商店還為最終用戶帶來了好處。帶有評級的精選 app 列表很有幫助且商店提供了對用戶信任度的度量。進入應用商店的 app 必須符合特定的質量標準。集中式支付服務意味著用戶不必把自己的支付信息提供給多個公司。app 自動更新這相對于傳統(tǒng) PC 軟件來說是一個優(yōu)勢不過對于網(wǎng)絡來說不算優(yōu)勢因為網(wǎng)絡 app 也能在沒有用戶參與的情況下更新。隨著蘋果應用商店的成功其他公司也創(chuàng)建了類似的數(shù)字商店來分發(fā)軟件。Google 播放商店、Microsoft 商店和 Amazon 應用商店的運營模式都與蘋果商店類似而且提供的好處也類似。盡管這個系統(tǒng)對這些公司和最終用戶都有很好的效果但它也給開發(fā)人員創(chuàng)造了一個復雜的環(huán)境多個商店、多個平臺以及各種技術。每個數(shù)字市場都有自己的需求而 app 開發(fā)人員必須滿足這些需求而且每個商店都占銷售收入的一定份額。13.1.2 網(wǎng)絡 app伴隨本機 app 的興起網(wǎng)絡逐漸成熟成為有相當能力運行 app 的平臺。一種被稱為 HTML5 的成熟 HTML 版本被引入其中網(wǎng)絡瀏覽器在處理內(nèi)容方面變得更加強大更加一致。瀏覽器開發(fā)人員使其 JavaScript 實現(xiàn)符合 ECMAScript 5 標準為 JavaScript 代碼提供了更好的基礎。在瀏覽器更新之外網(wǎng)絡開發(fā)人員社區(qū)接受一種被稱為響應式網(wǎng)絡設計的概念即不論顯示屏幕的大小如何都能確保網(wǎng)絡內(nèi)容得到很好呈現(xiàn)的一種方法。使用響應式設計技術網(wǎng)絡開發(fā)人員可以維護一個跨不同設備仍然運行良好的網(wǎng)站而不是針對不同設備創(chuàng)建不同的網(wǎng)站。此外近年來還發(fā)布了多個網(wǎng)絡開發(fā)框架比如 Angular 和 React。這些框架讓開發(fā)人員更加輕松地編寫和維護網(wǎng)絡 app——行為類似于 app 的網(wǎng)站。開發(fā)人員已經(jīng)意識到現(xiàn)代網(wǎng)絡技術可以用于構建與本機 app 非常相似的體驗許多開發(fā)人員搭建了充當 app 的網(wǎng)站。一些開發(fā)人員選擇完全放棄本機 app而只構建網(wǎng)絡 app。這個方法的好處是網(wǎng)絡 app 可以在具有現(xiàn)代網(wǎng)絡瀏覽器的任意設備上運行而代碼只需要編寫一次。不過網(wǎng)絡 app 也有一些缺點。網(wǎng)絡 app 不能訪問全部的設備功能往往比本機 app 要慢要求用戶在線而且通常不會出現(xiàn)在應用商店中。為了解決網(wǎng)絡 app 的一些不足漸進式網(wǎng)絡 app (Progressive Web AppPWA) 提供了一組技術和指南來幫助彌補本機 app 和網(wǎng)絡 app 之間的差距。PWA 只是一個具有一些額外功能的網(wǎng)站這些功能有助于使它更像 app。漸進式網(wǎng)絡 app 必須通過 HTTPS 提供服務在移動設備上恰當?shù)爻尸F(xiàn)下載后能離線加載向瀏覽器提供描述 app 的清單在頁面之間快速轉換。對最終用戶而言運行 PWA 與運行本機 app 應該是一樣的響應迅速且自然。如果網(wǎng)站符合 PWA 的標準那么現(xiàn)代網(wǎng)絡瀏覽器會給用戶提供為其主屏幕或桌面添加 PWA 圖標的選項。這表示用戶可以像啟動本機 app一樣啟動網(wǎng)絡 app。app 在自己的窗口而不是瀏覽器窗口中打開而且一般表現(xiàn)得就像本機 app 一樣。PWA 可以為那些希望把網(wǎng)絡技術用于其 app但又不想針對不同平臺構建多個 app 的開發(fā)人員提供非常大的好處。不過PWA 仍然存在一些缺點。一個重要問題就是PWA 不會出現(xiàn)在應用商店中。多年以來移動操作系統(tǒng)一直使用戶認為app 應該通過應用商店獲得。用戶不習慣通過瀏覽網(wǎng)頁獲得 app。在撰寫本書的時候只有 Microsoft 商店允許PWA直接發(fā)布到商店。其他平臺希望從瀏覽器安裝 PWA或者將其重新打包成呈現(xiàn)網(wǎng)絡內(nèi)容的本機 app然后把這個重新打包的 app 提交到商店。另一個潛在的缺點是 PWA 可能看起來不像本機 app它們在所有平臺上的外觀通常都基本一樣盡管有些人可能認為這是件好事。PWA 仍然不具有本機 app 的性能也不能訪問底層平臺的所有功能但根據(jù) app 的需求這不一定是個問題。13.2 虛擬化和仿真什么時候計算機不是物理設備當然是在它是虛擬計算機的時候虛擬化 是使用軟件 創(chuàng)建計算機 虛擬表示的 過程。相關的 仿真技術 允許 為某種類型的設備 設計的應用程序 運行在完全不同的設備上。本節(jié)將探討虛擬化和仿真。13.2.1 虛擬化虛擬計算機被稱為虛擬機 (Virtual MachineVM)它像物理計算機一樣運行操作系統(tǒng)。應用程序可以在這個操作系統(tǒng)上運行。從應用程序的角度來看虛擬化硬件就像物理計算機一樣。虛擬化支持幾個有用的場景。運行一個操作系統(tǒng)的計算機可以在虛擬機中運行另一個操作系統(tǒng)。例如運行 Windows 的計算機可以在虛擬機中運行 Linux 的實例。虛擬機還允許數(shù)據(jù)中心在一個物理服務器上托管多個虛擬服務器。這為互聯(lián)網(wǎng)托管公司提供了一種方法只要客戶愿意使用虛擬服務器就能輕松迅速地為客戶提供專用服務器。VM 易于備份、還原和部署。管理程序 (hypervisor) 是運行虛擬機的軟件平臺。管理程序有兩種類型如圖 13-2 所示。圖 13-2 類型 1 管理程序和類型 2 管理程序如圖 13-2 左側所示管理程序可以直接與底層硬件交互實際上管理程序放置在技術棧中內(nèi)核的下面。管理程序與物理硬件通信并把虛擬化硬件呈現(xiàn)給 OS 內(nèi)核它被稱為類型 1 管理程序。與之相比圖 13-2 右側所示的類型2管理程序則作為應用程序運行在操作系統(tǒng)上。微軟的 Hyper-V 和 VMware ESX 是類型1管理程序而VMware Player 和 VirtualBox 是類型 2 管理程序。另一種常見的虛擬化方法是使用容器。容器提供隔離的用戶模式環(huán)境應用程序在這個環(huán)境中運行。與虛擬機不同容器與主機操作系統(tǒng)以及在同一臺計算機上運行的其他容器共享內(nèi)核。在容器中運行的進程只能看到物理計算機上部分可用資源。例如每個容器都能被授予自己的獨立的文件系統(tǒng)。容器可隔離 VM無須為每個 VM 運行單獨的內(nèi)核。通常由于內(nèi)核是共享的容器被限制運行于主機相同的操作系統(tǒng)。像 OpenVZ 一樣的容器技術被用于虛擬化操作系統(tǒng)的整個用戶模式部分而其他的容器技術比如Docker則被用于在獨立的容器中運行單個應用程序。注意你可能還記得第 10 章將操作系統(tǒng)進程描述為 “容器”?這與虛擬化容器不是一回事。13.2.2 仿真仿真 是用軟件 讓一種類型的 設備的 行為 類似于 另一種類型的 設備的 行為的 過程。仿真和虛擬化的相似點在于它們都為軟件運行提供虛擬環(huán)境但虛擬化提供的是底層硬件的一部分而仿真提供的虛擬硬件則與使用的物理硬件不同。例如在 x86 處理器上運行的虛擬機或容器直接使用物理 CPU 運行為 x86 編譯的軟件。相比之下在 x86 處理器上運行的仿真器執(zhí)行仿真的程序可以運行為完全不同的處理器編譯的軟件。除了處理器之外仿真器通常還提供其他虛擬硬件。例如世嘉 Genesis20 世紀 90 年代的電子游戲系統(tǒng)的完整仿真器可以模擬摩托羅拉 68000 處理器、雅馬哈 YM2612 聲音芯片、輸入控制器以及世嘉 Genesis 中的所有其他硬件。運行時這樣的仿真器會把最初設計在世嘉 Genesis 上運行的 CPU 指令轉換為在 x86 代碼中實現(xiàn)的功能。這帶來了巨大的開銷因為每條CPU 指令都必須進行轉換但足夠快的現(xiàn)代計算機仍然可以全速仿真速度慢得多的世嘉 Genesis。其結果就是能在完全不同的平臺上運行針對某個平臺設計的軟件如圖 13-3 所示。圖 13-3 為系統(tǒng) A 編譯的代碼可以在系統(tǒng) A 的仿真器上運行仿真在保留為過時平臺所設計的軟件方面起著重要作用。隨著計算機平臺的老化找到能工作的硬件變得越來越難。那些希望把舊軟件引入現(xiàn)代平臺的軟件開發(fā)人員往往就使用仿真技術。最初的源代碼可能會丟失或者對其進行現(xiàn)代化的任務可能會很繁重。在這種情況下使用仿真器能讓原始已編譯的代碼無須修改就可在新平臺上運行。進程虛擬機還有另外一類虛擬機它與仿真器有一些共同特性。進程虛擬機運行應用程序的執(zhí)行環(huán)境是對底層操作系統(tǒng)細節(jié)的抽象。它與仿真器類似因為它提供了一個與運行它的硬件和操作系統(tǒng)分離的執(zhí)行平臺。但是與仿真器不同的是進程 VM 不會嘗試模擬真實硬件。相反它提供的環(huán)境旨在運行平臺無關的軟件。如同我們在第 9 章討論的一樣Java 和 .NET 利用了運行字節(jié)碼的進程虛擬機。13.3 云計算云計算是指通過互聯(lián)網(wǎng)提供計算服務。本節(jié)將介紹各種類型的云計算但首先讓我們快速回顧一下遠程計算的歷史。13.3.1 遠程計算的歷史從有計算以來我們就可以觀察到一個鐘擺模式從遠程集中式計算從終端訪問的服務器到本地計算桌面計算機?現(xiàn)在再回到從智能本地設備如智能手機訪問的遠程計算網(wǎng)絡?。當前許多應用程序同時依賴于遠程計算和本地計算。對于網(wǎng)絡有些代碼在瀏覽器上運行有些代碼在網(wǎng)絡服務器上運行。與早期那些像房間那么大的計算機相比今天我們在口袋里揣著的設備要強大得多但是很多我們想在這些設備上做的工作都涉及與其他計算機的通信因此在本地設備與遠程服務器之間分擔處理責任是有意義的。隨著遠程計算的重新出現(xiàn)組織需要維護服務器。在過去這意味著購買物理服務器按需對其進行配置將其與網(wǎng)絡連接并讓它在某個地方的機柜中運行。組織可以物理訪問計算機并完全控制其配置。但是維護一臺服務器或一組服務器可能是一項復雜且成本高昂的工作這涉及購買和維護硬件、及時更新軟件、處理安全問題和容量規(guī)劃問題、管理網(wǎng)絡配置等。一般來說這項工作所需的技能和專業(yè)知識與組織目標并不一致。即便是以技術為主的公司也不一定想要做維護服務器的業(yè)務。這就是云計算的用武之地。云計算通過互聯(lián)網(wǎng)云提供遠程計算功能。**底層硬件由云服務公司云提供商維護使需要這些功能的組織或用戶云用戶免于維護服務器。**云計算允許按需購買計算服務。對于云用戶而言這就意味著釋放對某些事物的控制權并相信第三方可提供可靠服務。云計算有多種形式讓我們看看其中的一些。13.3.2 云計算的分類云計算的各種類別通常由在云提供商和云用戶之間劃分責任的界限來定義。圖 13-4 展示了四類云計算IaaS、PaaS、FaaS 和 SaaS及各自的責任劃分。稍后我們將逐一介紹它們。圖 13-4 各類云計算產(chǎn)品的責任劃分圖 13-4 中的垂直棧表示應用程序運行所需的組件。不論使用哪種云計算產(chǎn)品都需要全部的組件——不同類型之間的差異在于每個組件是由云用戶負責管理還是由云提供商負責管理。每個棧中的各種組件應該看著很熟悉因為我們之前已經(jīng)介紹過這些內(nèi)容了。但是?“運行時” 還需要解釋一下。運行時環(huán)境是應用程序執(zhí)行的環(huán)境它包括了所有需要的庫、解釋器、進程虛擬機等?,F(xiàn)在讓我們從左到右介紹一下圖 13-4 中的四類云計算?;A設施即服務 (Infrastructure as a ServiceIaaS)是一種云計算場景在這個場景中云提供商只管理硬件和虛擬化允許用戶管理操作系統(tǒng)、運行時環(huán)境、應用程序代碼和數(shù)據(jù)。IaaS 的用戶通常會得到連接到互聯(lián)網(wǎng)的虛擬計算機以按照他們認為合適的方式使用一般是作為某種類型的服務器使用。這個虛擬計算機常常實現(xiàn) 為基于管理程序的虛擬機 或者Linux發(fā)行版的 用戶模式部分的 容器。IaaS 虛擬服務器的用戶可以訪問虛擬機的操作系統(tǒng)還可以按照自己的想法對它進行設置。這給了用戶最大的靈活性但這也意味著維護系統(tǒng)軟件包括操作系統(tǒng)、第三方軟件等的責任完全落在了用戶的肩上。IaaS 提供了一臺虛擬計算機用戶負責在該計算機上運行的所有內(nèi)容。Amazon Elastic Compute Cloud(EC2)、Microsoft Azure Virtual Machines和Google Compute Engine 都是 IaaS 的例子。平臺即服務 (Platform as a ServicePaaS)賦予云提供商更多的責任。在 PaaS 場景中云提供商不僅管理硬件和虛擬化還要管理用戶希望使用的操作系統(tǒng)和運行時環(huán)境。PaaS 用戶開發(fā)一個應用程序這個應用程序的目的是在他們選擇的云平臺上運行它會利用這個平臺的各種功能。PaaS 產(chǎn)品的云用戶不需要關心如何維護底層 OS 或運行時環(huán)境可以只關注應用程序代碼。盡管云提供商確實抽象了底層系統(tǒng)的詳細信息但是用戶還是需要管理提供商預配了哪些資源以處理應用程序。預配置資源包括所需的存儲容量和被分配的虛擬機類型。PaaS 為運行中的代碼提供了一個托管平臺用戶負責在該平臺上運行的應用程序。Amazon Web Services Elastic Beanstalk、Microsoft Azure App Service和Google App Engine 都是 PaaS 的例子。函數(shù)即服務 (Function as a ServiceFaaS) 采用了 PaaS 模型但是比它更進一步。FaaS 不需要用戶部署完整的應用程序或提前給出平臺實例相反用戶只需要部署響應某些事件的運行代碼函數(shù)?。例如開發(fā)人員可以編寫一個函數(shù)返回到最近雜貨店的距離。這個函數(shù)可以響應網(wǎng)絡瀏覽器把它當前的 GPS 坐標發(fā)送到 URL。這種事件驅動模型意味著云提供商負責按需調用用戶代碼。用戶不再需要一直運行應用程序代碼等待請求。這可以簡化用戶的工作并降低成本盡管在函數(shù)尚未運行時這可能意味著在請求到來時響應時間會更長。FaaS 是一種無服務器計算即一種用戶無須處理管理服務器或虛擬機問題的云計算模型。當然這個術語用法不當服務器實際上是要運行代碼的只是用戶不需要考慮這些問題罷了FaaS 為運行代碼提供了一個事件驅動平臺用戶負責為了響應事件而運行的代碼。Amazon Web Services Lambda、Microsoft Azure Functions和Google Cloud Functions 是 FaaS 的例子。軟件即服務 (Software as a ServiceSaaS) 是一種完全不同的云服務。SaaS 向用戶交付完全在云中管理的應用程序。IaaS、PaaS 和 FaaS 適合于希望在云中運行自己代碼的軟件工程團隊而 SaaS 則向最終用戶或組織交付已編寫好的、完整的云應用程序?,F(xiàn)在有那么多軟件都在云上運行這看起來似乎并不顯眼但是它卻與用戶或組織在本地設備和網(wǎng)絡上安裝并維護軟件形成了鮮明對比。SaaS 提供了在云中管理的完整應用程序用戶只需負責存儲在該應用程序中的數(shù)據(jù)。甚至連數(shù)據(jù)管理也有部分是提供商處理的包括數(shù)據(jù)如何存儲、備份等細節(jié)。Microsoft 365、Google G Suite和Dropbox 是 SaaS 的例子。云提供商領域的一些主要參與者包括Amazon Web Services、Microsoft Azure、Google Cloud Platform、IBM Cloud、Oracle Cloud 和Alibaba Cloud。13.4 深網(wǎng)和暗網(wǎng)你可能已經(jīng)看過關于發(fā)生在暗網(wǎng)(dark Web)或深網(wǎng)(deep Web)中的邪惡事件的新聞。不幸的是這兩個術語經(jīng)常被搞混但它們的含義是不同的。如圖 13-5 所示網(wǎng)絡可以分成三大類表層網(wǎng)、深網(wǎng)和暗網(wǎng)。圖 13-5 表層網(wǎng)、深網(wǎng)和暗網(wǎng)**任何人都可以免費訪問的內(nèi)容是表層網(wǎng)的一部分。**公共博客、新聞網(wǎng)站、公共推特帖子都是表層網(wǎng)內(nèi)容的例子。表層網(wǎng)由搜索引擎索引有時表層網(wǎng)也被定義為可以用搜索引擎找到的內(nèi)容。**深網(wǎng)是指不登錄網(wǎng)站或網(wǎng)絡服務就無法訪問的網(wǎng)絡內(nèi)容。**大多數(shù)互聯(lián)網(wǎng)用戶會定期訪問深網(wǎng)內(nèi)容。查看銀行賬戶余額、通過像Gmail這樣的網(wǎng)站閱讀電子郵件、登錄Facebook、查看Amazon上的個人購買記錄——這些都是深網(wǎng)活動的例子。**深網(wǎng)只是一些不公開的內(nèi)容通常需要某種密碼才能訪問。**大多數(shù)用戶不想公開自己的電子郵件或銀行賬戶所以有充分的理由說明為什么這種內(nèi)容不公開且不能被搜索引擎索引。**暗網(wǎng)是需要用專用軟件來訪問的網(wǎng)絡內(nèi)容。**只使用標準的網(wǎng)絡瀏覽器是無法訪問暗網(wǎng)的。最流行的暗網(wǎng)技術是 Tor洋蔥路由器?。通過加密和中繼系統(tǒng)Tor 允許匿名訪問網(wǎng)絡防止用戶的 ISP 監(jiān)控訪問了哪些網(wǎng)站也防止網(wǎng)站知道訪問者的 IP 地址。此外Tor 還允許用戶訪問那些被稱為洋蔥服務的網(wǎng)站如果沒有 Tor 就根本無法訪問它們——這些網(wǎng)站就是暗網(wǎng)的一部分。Tor 隱藏了洋蔥服務的 IP 地址使它們變成匿名的。如你所料暗網(wǎng)的匿名性有時會被用于犯罪目的。但是暗網(wǎng)提供的隱私也有其合法用途比如舉報和政治討論。建議在訪問暗網(wǎng)內(nèi)容時要謹慎。13.5 比特幣**加密貨幣是一種用于金融交易的數(shù)字資產(chǎn)是傳統(tǒng)貨幣的替代品。**加密貨幣的用戶持有該貨幣的余額就像在傳統(tǒng)的銀行一樣也可以把這些貨幣用于購物和服務。有些用戶主要把加密貨幣看作一種投資而不是一種商業(yè)手段對這些用戶來說它更類似于黃金。與傳統(tǒng)貨幣不同的是加密貨幣通常是分散的 (decentralized)沒有單一組織控制它們。13.5.1 比特幣基礎**比特幣于 2009 年推出是第一種分布式加密貨幣也是現(xiàn)在最著名的加密貨幣。**從那時起大量的加密貨幣稱為山寨幣如雨后春筍般涌現(xiàn)但沒有一個能挑戰(zhàn)比特幣的主導地位。比特幣的主要貨幣單位也簡稱為比特幣縮寫為 BTC。**比特幣和類似的加密貨幣都以區(qū)塊鏈技術為基礎。**在區(qū)塊鏈中信息被分組成稱為區(qū)塊的數(shù)據(jù)結構區(qū)塊按照時間順序鏈接在一起。也就是說當創(chuàng)建一個新區(qū)塊時它被添加到區(qū)塊鏈的末端。以比特幣為例區(qū)塊保存著交易記錄跟蹤比特幣的移動軌跡。圖 13-6 展示了比特幣的區(qū)塊鏈。圖 13-6 比特幣的區(qū)塊鏈按時間順序鏈接交易記錄區(qū)塊區(qū)塊鏈通過互聯(lián)網(wǎng)等網(wǎng)絡運行由多臺計算機一起來處理交易和更新區(qū)塊鏈。一起工作以處理比特幣交易的計算機被稱為比特幣網(wǎng)絡。連接到比特幣網(wǎng)絡的計算機被稱為節(jié)點某些節(jié)點保存了區(qū)塊鏈的副本沒有單一的底本。通過加密和解密來保證交易的完整性并防止篡改區(qū)塊鏈中的數(shù)據(jù)。一旦寫入?yún)^(qū)塊鏈中的數(shù)據(jù)就是不可變的即無法更改。比特幣的區(qū)塊鏈是一個公開的、分布式的、不可變的交易賬本。這個賬本用于記錄比特幣網(wǎng)絡上發(fā)生的所有事件比如比特幣的轉賬。13.5.2 比特幣錢包最終用戶的比特幣存儲在所謂的比特幣錢包中。不過更準確地說是比特幣錢包持有加密密鑰對的集合如圖 13-7 所示。圖 13-7 比特幣錢包包含密鑰對比特幣地址派生于公鑰如圖 13-7 所示錢包中的每一對密鑰都含有兩個數(shù)字一個私鑰和一個公鑰。私鑰是一個隨機生成的 256 位數(shù)字。這個數(shù)字必須保密任何知道私鑰的人都可以使用與該密鑰對關聯(lián)的比特幣。公鑰用于接收比特幣它從私鑰派生而來。在接收比特幣時公鑰表示為比特幣地址一個由公鑰生成的文本字符串例如 13pB1brJqea4DYXkUKv5n44HCgBkJHa2v1。假設我有一個比特幣要發(fā)給你。這個比特幣和我控制的一個地址關聯(lián)。也就是說我有這個地址的私鑰。如果你把由你控制的比特幣地址的文本字符串給我我就可以把我的比特幣發(fā)送到這個地址。你不需要也不應該把你的私鑰發(fā)給我。我可以把我的比特幣發(fā)給你是因為我有自己地址的私鑰這允許我使用自己的比特幣。反過來我不能從你的地址轉出任何比特幣因為我沒有你的私鑰。這段話其實是在講一件事為什么你可以把比特幣地址給別人收錢但別人不能憑地址偷走你的幣??梢赃@樣理解概念相當于什么能不能給別人比特幣地址銀行賬號 / 收款碼可以給私鑰銀行卡密碼 / 支付密碼絕對不能給轉賬用私鑰簽名證明“我同意轉走這筆錢”只有私鑰持有者能做原話拆成白話版“我有一個比特幣它和我控制的一個地址關聯(lián)”意思是這筆幣記錄在區(qū)塊鏈上屬于某個地址?!拔矣羞@個地址的私鑰”意思是我掌握這個地址的“支付密碼”所以能花里面的幣?!澳惆涯愕牡刂方o我我就能把幣轉給你”意思是你只需要給我收款地址就像給我銀行賬號我就能往里面打錢?!澳悴粦摪阉借€發(fā)給我”意思是私鑰等于資產(chǎn)控制權誰拿到私鑰誰就能轉走那個地址里的所有幣?!拔夷苻D幣是因為我有自己地址的私鑰”意思是轉賬時我用我的私鑰對交易做數(shù)字簽名網(wǎng)絡驗證簽名合法后才承認這筆錢是我同意轉出去的?!拔也荒軓哪愕牡刂忿D出幣因為我沒有你的私鑰”意思是我知道你的地址只能往里面打錢沒有你的私鑰就簽不了名也就動不了你的幣。最簡版本地址 收錢用的門牌號私鑰 開門用的鑰匙。別人知道門牌號只能往你家寄東西但只有拿著鑰匙的人才能從屋里把東西拿走。要不要順帶說說公鑰在這套機制里起什么作用私鑰和公鑰的配合方式其實是理解為什么地址不能反推私鑰的關鍵。13.5.3 比特幣交易讓我們仔細看看這是如何工作的。比特幣的轉賬被稱為交易。為了發(fā)送比特幣錢包軟件會構造一個交易指定轉賬的細節(jié)用私鑰對其進行數(shù)字簽名并向比特幣網(wǎng)絡廣播該交易。比特幣網(wǎng)絡中的計算機會驗證交易并把它添加到區(qū)塊鏈的一個新區(qū)塊中。圖 13-8 展示了一個比特幣交易例子。圖 13-8 比特幣交易把 0.5 比特幣移動到地址 B忽略交易費用如圖 13-8 所示交易包含輸入和輸出表示比特幣從哪里來到哪里去。圖的左側是前一個交易只顯示了輸出因為與前一個交易的輸入無關。在前一個交易中有 0.5 比特幣被送到了地址 A。圖 13-8 的右側是新的交易它把 0.5 比特幣從地址 A 移動到地址 B。為了簡單起見這個交易只有一個輸入和一個輸出。輸入表示要轉賬的比特幣的來源。你可能認為這是個比特幣地址但它不是的。相反這個輸入是前一個交易的輸出。我們假設地址 A 是我的地址我想把 0.5 比特幣轉到你的地址即地址 B?,F(xiàn)在我知道之前的 0.5 比特幣已經(jīng)轉到了我的地址所以我可以把前一個交易的輸出當作新交易的輸入從而把 0.5 比特幣轉給你。交易的輸出部分包含了發(fā)送比特幣的地址。盡管你可以認為地址具有比特幣余額但與地址關聯(lián)的比特幣數(shù)量并不存儲在比特幣錢包中并且余額也不會直接存儲在區(qū)塊鏈中。相反與這個地址相關的交易歷史被存儲在區(qū)塊鏈中而且根據(jù)這個歷史可以計算出某個地址的余額。提醒一下比特幣錢包只包含支持比特幣交易的密鑰。13.5.4 比特幣挖掘**維護比特幣區(qū)塊鏈的過程稱為比特幣挖掘 (Bitcoin mining)。**來自全球的計算機把交易區(qū)塊添加到區(qū)塊鏈中這些計算機被稱為礦工(miner)。圖 13-9 展示了比特幣挖掘過程。圖 13-9 比特幣挖掘過程為了把交易區(qū)塊添加到區(qū)塊鏈礦工必須驗證區(qū)塊中包含的交易確保每個交易在語法上是正確的輸入的貨幣尚未被消費等?還必須完成一個困難問題的計算。要求礦工解決這個問題可以防止篡改區(qū)塊鏈因為改變一個區(qū)塊 就需解決 被改變區(qū)塊以及該區(qū)塊鏈上 其后所有區(qū)塊的問題。作為阻止不需要行為的手段這種解決困難問題的系統(tǒng)被稱為 “工作證明” (proof of work)。**要找到計算問題的解決方案就需要大量的試錯計算。**解決方案難以產(chǎn)生但易于驗證。第一個解決問題的礦工將獲得一筆比特幣。這就是新比特幣產(chǎn)生并被引入系統(tǒng)的方式。在這種情況下比特幣挖掘就類似于傳統(tǒng)的挖礦——礦工進行工作并在可能的情況下 “挖到金子”?。除了獲得新 “鑄造” 的比特幣之外礦工還可以對該區(qū)塊中包含的每筆交易收取一定費用這個費用要從交易的比特幣總量中扣除。比特幣被設計成總共只允許挖掘2100萬比特幣。一旦達到這個數(shù)字比特幣礦工將不再獲得比特幣只能依靠交易費用來獲得其運營資本。比特幣的開端比特幣區(qū)塊鏈開始于 2009 年 “挖掘” 的第一個區(qū)塊這個區(qū)塊被稱為 “創(chuàng)世區(qū)塊”?。這個區(qū)塊由 Satoshi Nakamoto 挖掘他被視為比特幣的發(fā)明人。?“Satoshi Nakamoto” 被認為是一個化名在撰寫本書時此人的身份仍存在爭議。要通過比特幣挖掘獲利運行挖掘硬件的成本不能超過獲得的比特幣的價值。比特幣挖掘硬件常常很耗電所以比特幣挖掘者的電費可能很高。最初比特幣是在普通計算機上挖掘的但現(xiàn)在使用專門的昂貴硬件進行盡可能快的挖掘請記住獎勵授予第一個解決問題的計算機?。這些成本加上比特幣高度波動的價格意味著比特幣挖掘不是一個有保障的盈利途徑比特幣區(qū)塊鏈是公開的——任何人都可以查看全部交易。但是區(qū)塊鏈不包含比特幣轉賬的個人身份記錄。所以雖然余額和交易歷史記錄是公開的但并沒有便捷的方法能把地址和個人聯(lián)系起來。出于這個原因比特幣吸引了那些想要保持匿名的人比如那些在暗網(wǎng)上經(jīng)營商業(yè)網(wǎng)站的人。區(qū)塊鏈技術與加密貨幣密切相關它被用作金融賬本還可以用于其他目的。任何需要防篡改歷史記錄的系統(tǒng)都可以使用區(qū)塊鏈。時間會證明比特幣或其他加密貨幣是否能取得長期成功但無論如何我們可能都會看到區(qū)塊鏈以其他新穎的方式發(fā)揮作用。13.6 虛擬現(xiàn)實和增強現(xiàn)實虛擬現(xiàn)實 (Virtual RealityVR) 和增強現(xiàn)實 (Augmented RealityAR) 這兩項技術有可能從根本上改變我們與計算機交互的方式。虛擬現(xiàn)實是一種計算形式它讓用戶沉浸在三維虛擬空間中這個空間一般通過頭戴式設備來呈現(xiàn)。VR 允許用戶通過各種輸入方式與虛擬對象交互輸入方式包括用戶的注視、語音命令和專用手持控制器。相比之下增強現(xiàn)實是把虛擬元素疊加到現(xiàn)實世界中要么通過頭戴式設備實現(xiàn)要么由用戶 “通過” 手持便攜設備比如智能手機或平板電腦實現(xiàn)。VR 讓用戶沉浸在另一個世界AR 改變現(xiàn)實世界。盡管幾十年以來已經(jīng)對 VR 進行了各種嘗試但直到 21 世紀 10 年代VR 才變成主流。Google 在 2014 年通過 Google Cardboard 幫助推廣了VRGoogle Cardboard 的命名出自 VR 頭戴式設備可以由紙版、鏡片和智能手機構成的想法。通過把左眼內(nèi)容呈現(xiàn)在智能手機一半屏幕上右眼內(nèi)容呈現(xiàn)在屏幕的另一半上專門設計的 Cardboard 應用程序把 VR 內(nèi)容呈現(xiàn)給用戶如圖 13-10 所示。圖 13-10 專門為 Google Cardboard 設計的應用程序的 VR 模式為 Cardboard 設計的應用程序依賴于智能手機檢測陀螺儀運動的能力允許顯示內(nèi)容隨著用戶頭部的移動而更新。這樣的頭戴式設備據(jù)說有 3 個自由度 (3DoF)頭戴式設備可以追蹤有限的頭部運動但無法追蹤空間中的其他運動。這使得用戶可以使用頭戴式設備環(huán)顧但不能移動。Cardboard 還支持基本的一鍵輸入。Cardboard 簡單但有效。它向許多用戶介紹了 VR否則他們可能不會嘗試 VR。更具有沉浸感的體驗需要 6 個自由度 (6DoF)用戶可以通過在現(xiàn)實空間中物理移動身體以實現(xiàn)在 VR 中的四處移動。有些 VR 頭戴式設備支持6DoFVR 控制器可以支持 3DoF 或 6DoF。握在用戶手中的 6DoF 控制器可以追蹤控制器在 VR 空間中的位置從而允許與 VR 環(huán)境進行更自然的互動。自 Google Cardboard 推出以來消費市場已經(jīng)發(fā)布了許多 VR 解決方案。有些依賴于智能手機Samsung Gear VR和Google Daydream?。另外一些通過連接 VR 頭戴式設備和控制器Oculus Rift、HTC Vive和Windows Mixed Reality?使用個人計算機進行處理。還有一些是獨立設備不需要智能手機或 PCOculus Go、Oculus Quest和Lenovo Mirage Solo?。一般來說連接 PC 的解決方案提供了最高的圖形保真度但也是最貴的特別是考慮到所需計算機的成本時。如前所述增強現(xiàn)實 (AR) 是一種相似但獨特的技術。VR 試圖讓用戶完全沉浸在虛擬世界中而 AR 則把虛擬元素疊加到現(xiàn)實世界中。這可以通過移動設備來完成使用后置攝像頭觀察現(xiàn)實世界將模擬元素疊加到攝像頭所看到的內(nèi)容上。先進的 AR 技術允許軟件理解房間內(nèi)的物理元素這樣疊加的虛擬元素就可以與環(huán)境進行無縫交互。移動應用程序中的 AR 是以基本形式實現(xiàn)的但在專用設備中它的實現(xiàn)更為充分比如在Google Glass、Magic Leap 的頭戴式設備和 Microsoft HoloLens。將這種 AR 設備戴在頭上可以把計算機生成的圖形疊加到用戶視野中。用戶能以各種方式比如語音命令或手部跟蹤與虛擬元素進行交互。各種 VR 和 AR 技術統(tǒng)稱為XR為軟件開發(fā)人員提供了多種目標平臺。許多 VR 開發(fā)人員依賴于現(xiàn)有的游戲引擎這些游戲引擎一般用于制作 3D 游戲比如 Unity 游戲引擎或 Unreal 游戲引擎。游戲開發(fā)人員對這些游戲引擎已經(jīng)非常熟悉了使用它們能讓開發(fā)人員相對輕松地面向多個 VR 平臺制作自己的軟件。網(wǎng)絡開發(fā)人員可以使用被稱為 WebVR 和 WebXR 的 JavaScript API 開發(fā) VR 和 AR 內(nèi)容。WebVR 先出現(xiàn)它專注于 VR。WebXR 緊隨其后出現(xiàn)它同時支持 AR 和 VR。13.7 物聯(lián)網(wǎng)傳統(tǒng)上我們認為服務器在互聯(lián)網(wǎng)上提供服務用戶通過聯(lián)網(wǎng)的個人計算機設備比如PC、筆記本計算機和智能手機與這些服務器進行交互。近些年我們已經(jīng)看到與互聯(lián)網(wǎng)連接的新型設備越來越多—如揚聲器、電視機、恒溫器、門鈴、汽車、燈泡應有盡有這種把各種設備連接到互聯(lián)網(wǎng)的概念稱為物聯(lián)網(wǎng) (Internet of ThingsIoT)。電子元件的成本和物理尺寸正在下降Wi-Fi 和蜂窩互聯(lián)網(wǎng)接入正在普及消費者希望他們的設備更加 “智能”?。所有這些都促成了把一切都連接到互聯(lián)網(wǎng)的趨勢。如果沒有某種網(wǎng)絡服務的支持IoT 設備一般不會運行所以云計算的興起也促進了物聯(lián)網(wǎng)的傳播。對消費者而言IoT 設備在 “智能家居” 中很突出而 “智能家居” 中所有類型的家用電器都能被監(jiān)視和控制。在商業(yè)領域在制造業(yè)、醫(yī)療保健、交通運輸?shù)阮I域中都能找到 IoT 設備。雖然這些類型的連接設備帶來了明顯的好處但這些設備也帶來了風險。它們的安全性是一個特別值得關注的領域。不是所有的 IoT 設備都能很好地抵御惡意攻擊。即使攻擊者對設備上的數(shù)據(jù)沒興趣攻擊者也可能將這個設備充當攻擊其他防御良好的網(wǎng)絡的一個據(jù)點或者當成對不同目標進行遠程攻擊的發(fā)射點。特別是對消費者來說IoT 設備似乎已經(jīng)足夠無害了并且在把這樣的設備連接到家庭網(wǎng)絡時安全問題通常不是首要考慮的問題。隱私是 IoT 設備帶來的另一個風險。許多這樣的設備本質上就是收集數(shù)據(jù)的。這些數(shù)據(jù)常常被發(fā)送給云服務進行處理。最終用戶應該在多大程度上信任使用他們的個人數(shù)據(jù)運行這些服務的組織即使是善意的組織也有可能成為數(shù)據(jù)泄露的受害者用戶數(shù)據(jù)可能以意想不到的方式被暴露。**像智能音箱這樣的設備必須一直處于聽的狀態(tài)以等待口頭命令。這就產(chǎn)生了意外記錄私人對話的風險。**看到今天的消費者心甘情愿用隱私換取便利George Orwell 的小說《1984》的現(xiàn)代讀者可能會發(fā)現(xiàn)某種諷刺意味。IoT 設備的所有功能常常依賴于云服務這也是它們帶來的一個風險。如果一個設備與互聯(lián)網(wǎng)的連接中斷這個設備可能會暫時變得不那么有用。更令人擔憂的是設備制造商可能會在某天永久關閉支持該設備的服務。那時智能設備就會還原成非智能設備13.8 總結本章討論了與現(xiàn)代計算機相關的各種主題。你學習了 app包括本機 app 和網(wǎng)絡 app。你了解了虛擬化和仿真是如何讓計算機在虛擬硬件上運行軟件的。你還了解了云計算是如何為運行軟件提供新平臺的。你學習了表層網(wǎng)、深網(wǎng)和暗網(wǎng)的區(qū)別以及比特幣等加密貨幣如何實現(xiàn)分布式支付系統(tǒng)。我們談到了虛擬現(xiàn)實和增強現(xiàn)實以及它們?nèi)绾螢橛嬎銠C提供獨特的用戶界面。你還了解了 IoT并有機會搭建一個聯(lián)網(wǎng)的 “自動販賣機”?。在這里讓我們總結性地回顧一些主要的計算機概念看看它們是如何結合在一起的。計算機是二進制數(shù)字設備其中的所有信息都表示為 0 和 1。二進制邏輯也被稱為布爾邏輯為計算機運算打下了基礎。計算機用數(shù)字電路實現(xiàn)其電平表示為二進制狀態(tài)—低電平為 0高電平為 1。數(shù)字邏輯門是基于晶體管的電路它能執(zhí)行布爾運算比如 AND 和 OR。我們可以把這樣的邏輯門排布成更加復雜的電路比如計數(shù)器、存儲設備和加法電路。這些類型的電路為計算機硬件提供了概念基礎這些硬件包括執(zhí)行指令的中央處理器 (CPU)上電時存儲指令和數(shù)據(jù)的隨機存取存儲器 (RAM) 以及與外界交互的輸入/輸出 (I/O) 設備。計算機是可編程的它們可以在不改變硬件的情況下執(zhí)行新任務。告訴計算機要做什么的指令被稱為軟件或代碼。CPU 執(zhí)行機器碼而軟件開發(fā)人員則通常用高級編程語言編寫源代碼。計算機程序一般在操作系統(tǒng)上運行操作系統(tǒng)即與計算機硬件通信并為程序執(zhí)行提供環(huán)境的軟件。計算機用互聯(lián)網(wǎng)通信互聯(lián)網(wǎng)是一組全球連接的計算機網(wǎng)絡這些網(wǎng)絡都使用 TCP/IP 協(xié)議套件?;ヂ?lián)網(wǎng)的一個流行的應用是萬維網(wǎng)它是一組分布式的、可尋址的、鏈接的資源通過 HTTP 在互聯(lián)網(wǎng)上傳遞。所有這些技術都為現(xiàn)代計算機的創(chuàng)新提供了一個蓬勃發(fā)展的環(huán)境。我希望這本書能讓你全面了解計算機是如何工作的。本書涵蓋了大量的基礎知識但我們?nèi)匀恢簧婕按蠖鄶?shù)主題的表面。**如果某個特定的領域引起了你的注意那么我鼓勵你繼續(xù)探索這個主題**還有大量關于計算機的知識有待發(fā)現(xiàn)。