《圖解HTTP》讀后筆記01
《圖解HTTP》讀后筆記01

1、TCP/IP 的分層管理
TCP/IP 協議族里重要的一點就是分層。TCP/IP 協議族按層次分別分 為以下 4 層:
(1)應用層
(2)傳輸層
(3)網絡層
(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,網絡適配器,即網卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍之內
2、與 HTTP 關系密切的協議 : IP、TCP 和 DNS
(1)負責傳輸的 IP 協議
按層次分,IP(Internet Protocol)網際協議位于網絡層。Internet Protocol 這個名稱可能聽起來有點夸張,但事實正是如此,因為幾乎 所有使用網絡的系統都會用到 IP 協議。TCP/IP 協議族中的 IP 指的就 是網際協議,協議名稱中占據了一半位置,其重要性可見一斑。可能 有人會把“IP”和“IP 地址”搞混, “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),有點像快遞公司的送貨過程。想 要寄快遞的人,只要將自己的貨物送到集散中心,就可以知道快遞公 司是否肯收件發貨,該快遞公司的集散中心檢查貨物的送達地址,明 確下站該送往哪個區域的集散中心。接著,那個區域的集散中心自會 判斷是否能送到對方的家中。
我們是想通過這個比喻說明,無論哪臺計算機、哪臺網絡設備,它們 都無法全面掌握互聯網中的細節
(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 協議會再次以相同的順序發 送相同的數據包。
(3)負責域名解析的 DNS 服務
DNS(Domain Name System)服務是和 HTTP 協議一樣位于應用層的 協議。它提供域名到 IP 地址之間的解析服務。 計算機既可以被賦予 IP 地址,也可以被賦予主機名和域名。比如 www.hackr.com。 用戶通常使用主機名或域名來訪問對方的計算機,而不是直接通過 IP 地址訪問。因為與 IP 地址的一組純數字相比,用字母配合數字的表 示形式來指定計算機名更符合人類的記憶習慣。
但要讓計算機去理解名稱,相對而言就變得困難了。因為計算機更擅 長處理一長串數字。
為了解決上述的問題,DNS 服務應運而生。DNS 協議提供通過域名 查找 IP 地址,或逆向從 IP 地址反查域名的服務。
(4)各種協議與 HTTP 協議的關系
3、URI 和 URL
與 URI(統一資源標識符)相比,我們更熟悉 URL(Uniform Resource Locator,統一資源定位符)。URL 正是使用 Web 瀏覽器等 訪問 Web 頁面時需要輸入的網頁地址。比如,下圖的 http://hackr.jp/ 就是 URL
(1)統一資源標識符
URI 是 Uniform Resource Identifier 的縮寫。RFC2396 分別對這 3 個單 詞進行了如下定義。
Uniform
規定統一的格式可方便處理多種不同類型的資源,而不用根據上下文 環境來識別資源指定的訪問方式。另外,加入新增的協議方案(如 http: 或 ftp:)也更容易。
Resource
資源的定義是“可標識的任何東西”。除了文檔文件、圖像或服務(例 如當天的天氣預報)等能夠區別于其他類型的,全都可作為資源。另 外,資源不僅可以是單一的,也可以是多數的集合體。
Identifier
表示可標識的對象。也稱為標識符。
綜上所述,URI 就是由某個協議方案表示的資源的定位標識符。協議 方案是指訪問資源所使用的協議類型名稱。
采用 HTTP 協議時,協議方案就是 http。除此之外,還有 ftp、mailto、telnet、file 等。標準的 URI 協議方案有 30 種左右,由隸屬于國際互聯網資源管理的非營利社團 ICANN(Internet Corporation for Assigned Names and Numbers,互聯網名稱與數字地址分配機構)的 IANA(Internet Assigned Numbers Authority,互聯網號碼分配局)管理頒布
URI 用字符串標識某一互聯網資源,而 URL 表示資源的地點(互聯 網上所處的位置)。可見 URL 是 URI 的子集。
4、持久連接節省通信量
為解決上述 TCP 連接的問題,HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久連接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或 HTTP connection reuse)的方法。持久連接的特點是,只要任意一端 沒有明確提出斷開連接,則保持 TCP 連接狀態
持久連接旨在建立 1 次 TCP 連接后進行多次請求和響應的交互
持久連接的好處在于減少了 TCP 連接的重復建立和斷開所造成的額外開銷,減輕了服務器端的負載。另外,減少開銷的那部分時間,使 HTTP 請求和響應能夠更早地結束,這樣 Web 頁面的顯示速度也就相應提高了。
在 HTTP/1.1 中,所有的連接默認都是持久連接,但在 HTTP/1.0 內并未標準化。雖然有一部分服務器通過非標準的手段實現了持久連接, 但服務器端不一定能夠支持持久連接。毫無疑問,除了服務器端,客戶端也需要支持持久連接
持久連接使得多數請求以管線化(pipelining)方式發送成為可能。從 前發送請求后需等待并收到響應,才能發送下一個請求。管線化技術 出現后,不用等待響應亦可直接發送下一個請求。
這樣就能夠做到同時并行發送多個請求,而不需要一個接一個地等待響應了
不等待響應,直接發送下一個請求
比如,當請求一個包含 10 張圖片的 HTML Web 頁面,與挨個連接相 比,用持久連接可以讓請求更快結束。而管線化技術則比持久連接還 要快。請求數越多,時間差就越明顯
5、使用 Cookie 的狀態管理
假設要求登錄認證的 Web 頁面本身無法進行狀態的管理(不記錄已 登錄的狀態),那么每次跳轉新頁面不是要再次登錄,就是要在每次 請求報文中附加參 數來管理登錄狀態。
不可否認,無狀態協議當然也有它的優點。由于不必保存狀態,自然 可減少服務器的 CPU 及內存資源的消耗。從另一側面來說,也正是 因為 HTTP 協議本身是非常簡單的,所以才會被應用在各種場景里">HTTP 是無狀態協議,它不對之前發生過的請求和響應的狀態進行管 理。也就是說,無法根據之前的狀態進行本次的請求處理。
假設要求登錄認證的 Web 頁面本身無法進行狀態的管理(不記錄已登錄的狀態),那么每次跳轉新頁面不是要再次登錄,就是要在每次 請求報文中附加參數來管理登錄狀態。
不可否認,無狀態協議當然也有它的優點。由于不必保存狀態,自然 可減少服務器的 CPU 及內存資源的消耗。從另一側面來說,也正是 因為 HTTP 協議本身是非常簡單的,所以才會被應用在各種場景里
6、請求報文及響應報文的結構
7、提升傳輸速率
HTTP 在傳輸數據時可以按照數據原貌直接傳輸,但也可以在傳輸過 程中通過編碼提升傳輸速率。通過在傳輸時編碼,能有效地處理大量的訪問請求。但是,編碼的操作需要計算機來完成,因此會消耗更多的 CPU 等資源
8、與 HTTP 協作的 Web 服務
客戶端使用 HTTP 協議訪問服務器時,會經常采用類似 www.hackr.jp 這樣的主機名和域名。
在互聯網上,域名通過 DNS 服務映射到 IP 地址(域名解析)之后訪 問目標網站。可見,當請求發送到服務器時,已經是以 IP 地址形式訪問了。
所以,如果一臺服務器內托管了 www.tricorder.jp 和 www.hackr.jp 這 兩個域名,當收到請求時就需要弄清楚究竟要訪問哪個域名。
在相同的 IP 地址下,由于虛擬主機可以寄存多個不同主機名和域名 的 Web 網站,因此在發送 HTTP 請求時,必須在 Host 首部內完整指定主機名或域名的 URI。
代理服務器的基本行為就是接收客戶端發送的請求后轉發給其他服務器。代理不改變請求 URI,會直接發送給前方持有資源的目標服務器,持有資源實體的服務器被稱為源服務器。從源服務器返回的響應經過 代理服務器后再傳給客戶端。
每次通過代理服務器轉發請求或響應時,會追加寫入 Via 首部信息
在 HTTP 通信過程中,可級聯多臺代理服務器。請求和響應的轉發會 經過數臺類似鎖鏈一樣連接起來的代理服務器。轉發時,需要附加 Via 首部字段以標記出經過的主機信息
使用代理服務器的理由有:利用緩存技術(稍后講解)減少網絡帶寬的流量,組織內部針對特定網站的訪問控制,以獲取訪問日志為主要目的,等等。
代理有多種使用方法,按兩種基準分類。一種是是否使用緩存,另一 種是是否會修改報文。
利用網關可以由 HTTP 請求轉化為其他協議通信
網關的工作機制和代理十分相似。而網關能使通信線路上的服務器提 供非 HTTP 協議服務。
利用網關能提高通信的安全性,因為可以在客戶端與網關之間的通信線路上加密以確保連接的安全。比如,網關可以連接數據庫,使用 SQL 語句查詢數據。另外,在 Web 購物網站上進行信用卡結算時, 網關可以和信用卡結算系統聯動
隧道可按要求建立起一條與其他服務器的通信線路,屆時使用 SSL 等 加密手段進行通信。隧道的目的是確保客戶端能與服務器進行安全的 通信。
隧道本身不會去解析 HTTP 請求。也就是說,請求保持原樣中轉給之后的服務器。隧道會在通信雙方斷開連接時結束。
通過隧道的傳輸,可以和遠距離的服務器安全通信。隧道本身是透明的,客戶端不用在意隧道的存在
HTTP TCP/IP 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。