《图解HTTP》读书笔记--第1章 了解Web及网络基础
寫在前面:本文僅供個人學習使用,如有侵權,請聯系刪除。文章中所用圖片絕大多數來源于《圖解HTTP》,請讀者支持原版。
文章目錄
- 第1章 了解Web及網絡基礎
- 1.1 使用HTTP協議訪問Web
- 1.2 HTTP的誕生
- 1.2.3駐足不前的HTTP
- 1.3 網絡基礎TCP/IP
- 1.3.1TCP/IP協議族
- 1.3.2 TCP/IP的分層管理
- 1.3.3 TCP/IP通信傳輸流
- 1.4 與HTTP關系密切的協議:IP、TCP和DNS
- 1.4.1負責傳輸的IP協議
- 使用ARP協議憑借MAC地址進行通信
- 沒有人能夠全面掌握互聯網中的傳輸狀態
- 1.4.2確保可靠性的TCP協議
- 確保數據能到達目標
- 1.5 負責域名解析的DNS服務
- 1.6 各種協議與HTTP協議的關系
- 1.7URI和URL
- 1.7.1 統一資源標識符
- 1.7.2 URI格式
- 并不是所有的應用程序都符合RFC
第1章 了解Web及網絡基礎
本章概述了Web是建立在何種技術之上,以及HTTP協議是如何誕生并發展的。我們從其背景著手,來深入了解這部分內容。
1.1 使用HTTP協議訪問Web
1.2 HTTP的誕生
1.2.3駐足不前的HTTP
作為Web文檔傳輸協議的HTTP,它的版本幾乎沒有更新。新一代HTTP/2.0 正在制訂中,但要達到較高的使用覆蓋率,仍需假以時日。
當年HTTP協議的出現主要是為了解決文本傳輸的難題。由于協議本身非常簡單,于是在此基礎上設想了很多應用方法并投入了實際使用。現在HTTP協議已經超出了Web這個框架的局限,被運用到了各種場景中。
1.3 網絡基礎TCP/IP
為了理解HTTP,我們有必要事先了解一下TCP/IP協議族。
通常使用的網絡(包括互聯網)是在TCP/IP協議族的基礎上運作的。而HTTP屬于它內部的一個子集。
1.3.1TCP/IP協議族
計算機與網絡設備要相互通信,雙方必須基于相同的方法。比如,如何探測到通信目標、由哪一邊先發起通信、使用哪種語言進行通信、怎樣結束通信等規則都需要事前確定。不同的硬件、操作系統之間的通信,所有的這一切都需要一種規則。而我們就把這種規則稱為協議(protocol)。
協議中存在各式各樣的內容。從電纜的規格到IP地址的選定方法、尋找異地用戶的方法、雙方建立通信的順序,以及Web頁面顯示需要處理的步驟,等等。
像這樣把與互聯網相關聯的協議集合起來總稱為TCP/IP。
1.3.2 TCP/IP的分層管理
TCP/IP協議族里面重要的一點就是分層。按層次分別為以下4層:應用層、傳輸層、網絡層和數據鏈路層。
把TCP/IP層次化是有好處的。比如,如果互聯網只由一個協議統籌,某個地方需要改變設計時,就必須把所有部分整體替換掉。而分層之后只需把變動的層替換掉即可。把各層之間的接口部分規劃好之后,每個層內部的設計就能自由改動了。
值得一提的是,層次化之后,設計也變得相對簡單了。處于應用層上的應用可以只考慮分派給自己的任務,而不需要弄清對方在地球上的哪個地方、對方的傳輸線路是怎樣的、是否能確保傳輸送達等問題。
TCP/IP協議族各層的作用如下。
應用層
應用層決定了向用戶提供應用服務時通信的活動。
TCP/IP協議族內預存了各類通用的應用服務。比如,FTP(File Transfer Protocol,文件傳輸協議) 和DNS(Domain Name System,域名系統)服務就是其中兩類。
HTTP協議也處于該層。
傳輸層
傳輸層對上層應用層,提供處于網絡連接中的兩臺計算機之間的數據傳輸。
在傳輸層有兩個性質不同的協議:TCP(Transmission Control Protocol傳輸控制協議 ) 和 UDP(User Data Protocol,用戶數據報協議)。
網絡層(又稱網絡互連層)
網絡層用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小數據單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,并把數據包傳送給對方。
與對方計算機之間通過多臺計算機或網絡設備進行傳輸時,網絡層所起的作用就是在眾多的選項中選擇一條傳輸線路。
鏈路層(又名數據鏈路層,網絡接口層)
用來處理連接網絡的硬件部分。包括控制操作系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配卡,即網卡),即光纖等物理可見部分(還包括連接器等一些傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍之內。
1.3.3 TCP/IP通信傳輸流
利用TCP/IP協議族進行網絡通信時,會通過分層順序與對方進行通信。發送端從應用層往下走,接收端從鏈路層往上走。
我們用HTTP舉例來說明,首先作為發送端的客戶端在應用層(HTTP協議)發出一個想看某個Web頁面的HTTP請求。
接著,為了傳輸方便,在傳輸層(TCP協議)把從應用層接收到的數據(HTTP請求報文)進行分割,并在各個報文上打上標記序號及端口號后轉發給網絡層。
在網絡層(IP協議),增加作為通信目的地的MAC地址后轉發給鏈路層。這樣一來,發往網絡的通信請求就準備齊全了。
接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才算真正接收到由客戶端發送過來的HTTP請求。
發送端在層與層之間傳輸數據時,沒經過一層時必定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。
這種把數據信息包裝起來的做法稱為封裝(encapsulate).
1.4 與HTTP關系密切的協議:IP、TCP和DNS
下面我們分別針對在TCP/IP協議族中與HTTP密不可分的3個協議(IP、TCP和DNS)進行說明。
1.4.1負責傳輸的IP協議
按層次分,IP(Internet Protocol) 網際協議位于網絡層。幾乎所有使用網絡的系統都會用到IP協議。
IP協議的作用是把各種數據包傳送給對方。而要保證確實傳送到對方那里,則需要滿足各類條件。其中兩個重要的條件是IP地址和MAC地址(Media Access Control Address)。
IP地址指明了節點被分配到的地址,MAC地址是指網卡所屬的固定地址。IP地址可以和MAC地址進行配對。IP地址可變換,但MAC地址基本上不會更改。
使用ARP協議憑借MAC地址進行通信
IP間的通信依賴MAC地址。在網絡上,通信的雙方在同一局域網(LAN)內的情況是很少的,通常是經過多臺計算機和網絡設備中轉才能連接到對方。而在進行中轉時,會利用下一站中轉設備的MAC地址來搜索下一個中轉目標。這時,會采用ARP協議(Address Resolution Protocol,地址解析協議)。ARP是一種用以解析地址的協議,根據通信方的IP地址就可以反查出對應的MAC地址。
沒有人能夠全面掌握互聯網中的傳輸狀態
在到達通信目標前的中轉過程中,那些計算機和路由器等網絡設備只能獲悉很粗略的傳輸路線。
這種機制稱為路由選擇(routing),有點像快遞公司的送貨過程。想要寄快遞的人,只要將自己的貨物送到集散中心,就可以知道快遞公司是否肯收件發貨,該快遞公司的集散中心檢查貨物的送達地址,明確下一站該送往哪個區域的集散中心。接著,那個區域的集散中心自會判斷是否能送到對方的家中。
我們是想通過這個比喻說明,無論哪臺計算機、哪臺網絡設備,它們都無法全面掌握互聯網中的細節。
1.4.2確保可靠性的TCP協議
按層次分,TCP位于傳輸層,提供可靠的字節流服務。
所謂的字節流服務(Byte Stream Service) 是指,為了方便傳輸,將大塊數據分割成以報文段(segment)為單位的數據包進行管理。而可靠的傳輸服務是指,能夠把數據準確可靠地傳給對方。一言以蔽之,TCP協議為了更容易傳送大數據才把數據分割,而且TCP協議能夠確認數據最終是否送達對方。
確保數據能到達目標
為了準確無誤地將數據送達目標處,TCP協議采用了三次握手(three-way handshaking)策略。用TCP協議把數據包發送出去后,TCP不會對傳送后的情況置之不理,它一定會向對方確認是否成功送達。握手過程中使用了TCP的標志(flag)----SYN(synchronize) 和ACK(acknowledgement).
發送端首先發送一個帶SYN標志的數據包給對方。接收端收到后,回傳一個帶有SYN/ACK標志的數據包以示確認。最后,發送端再回傳一個帶ACK標志的數據包,代表”握手“結束。
除了上述三次握手,TCP協議還有其他各種手段來保證通信的可靠性。
1.5 負責域名解析的DNS服務
DNS(Domain Name Service)服務是和HTTP協議一樣位于應用層的協議。它提供域名到IP地址之間的解析服務。
計算機既可以被賦予IP地址,也可以被賦予主機名和域名。比如www.shizhwengli.com。
用戶通常使用主機名或域名來訪問對方的計算機,而不是直接通過IP地址訪問。因為與IP地址的一組純數字相比,用字母配合數字的表示形式來指定計算機名更符合人們的記憶習慣。
但要讓計算機去理解名稱,相對而言就變得困難了。因為計算機更擅長處理一長串數字。
為了解決上述問題,DNS服務應運而生。DNS協議提供通過域名查找IP地址,或逆向從IP地址反查域名的服務。
1.6 各種協議與HTTP協議的關系
學習了和HTTP密不可分的TCP/IP協議族中的各種協議后,我們再通過這張圖來了解下IP協議、TCP協議和DNS服務再使用HTTP協議的通信過程中各自發揮了哪些作用。
1.7URI和URL
與URI(統一資源標識符)相比,我們更熟悉URL(Uniform Resource Locator,統一資源定位符).URL正是使用Web瀏覽器等訪問Web頁面時需要輸入的網頁地址。比如https://www.bilibili.com/就是URL。
1.7.1 統一資源標識符
URI是 Uniform Resource Identifier(統一資源標識符)的縮寫。RFC2396分別對這3個單詞進行了如下定義。
Uniform
規定統一的格式可方便處理多種不同類型的資源,而不用根據上下文環境來識別資源指定的訪問方式。另外,加入新增的協議方案也更容易。
Resource
資源的定義是”可標識的任何東西“。不僅是文檔文件,圖像或服務等能夠區別于其他類型的,全都可作為資源。另外,資源不僅可以是單一的,也可以是多數的集合體。
Identifier
表示可標識的對象。也稱為標識符。
綜上所述,URI(Uniform Resource Identifier,統一資源標識符)就是由某個協議方案表示的資源的定位標識符。協議方案是指訪問資源所使用的協議類型名稱。
采用HTTP協議時,協議方案就是http。除此之外,還有ftp,mailto,telnet.file等。
URI用字符串標識某一互聯網資源,而URL表示資源的地址(在互聯網上所處的位置)。可見URL是URI的子集。
1.7.2 URI格式
表示指定的URI,要使用涵蓋全部必要信息的絕對URI、絕對URL以及相對URL。相對URL,是指從瀏覽器中基本URI處指定的URL,形如/image/hello.gif。
讓我們先來了解一下絕對URI的地址。
協議方案名
使用http: 或https: 等協議方案名獲取訪問資源時要制定的協議類型。不區分大小寫,最后附加一個冒號。
也可使用data:或JavaScript:這類指定數據或腳本程序的方案名。
登錄信息
指定用戶名和密碼作為從服務器端獲取資源時必要的登錄信息(身份認證)。此項是可選項。
服務器地址
使用絕對URL必須指定待訪問的服務器地址。地址可以是類似shizheng.com這種DNS可解析的地址,或是192.168.1.1這類IPv4地址名,還可以是[0:0:0:0:0:0:0:1]這樣用方括號括起來的IPv6地址名。
服務器端口號
指定服務器連接的網絡端口號。此項也是可選項,若用戶省略則自動使用默認端口號。
帶層次的文件路徑
指定服務器上的文件路徑來定位特指的資源。這與UNIX系統的文件目錄結構很相似。
查詢字符串
針對已指定的文件路徑內的資源,可以使用查詢字符串傳入任意參數。此項可選。
片段標識符
使用片段標識符通常可標記出已獲取資源中的子資源(文檔內的某個位置)。但在RFC中并沒有明確規定其使用辦法。該項也是可選項。
并不是所有的應用程序都符合RFC
有一些用來制定HTTP協議技術標準的文檔,它們被稱為RFC(Request for Comments,征求修正意見書)。
通常,應用程序會遵照由RFC確定的標準實現。但是也存在某些應用程序因客戶端或服務器端不同,而未遵照RFC標準,反而將自成一套的”標準“擴展的情況。
總結
以上是生活随笔為你收集整理的《图解HTTP》读书笔记--第1章 了解Web及网络基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《大话数据结构》读书笔记-栈与队列
- 下一篇: 百货店进货渠道 给大家介绍些技巧