理解HTTP協議(1):TCP/IP協議族
最初HTTP協議的出現是為解決文字傳輸的問題,由於協議本身比較簡單,於是在此基礎上設想了很多應用方法並投入實際使用。
為了理解HTTP協議,需要先了解TCP/IP協議族。
概念
1.TCP/IP 協議族
計算機與網路裝置要相互通訊,雙方就必須基於相同的方法。比如,如何探測到通訊目標、由哪一邊先發起通訊、使用哪種語言進行通訊、怎樣結束通訊等規則都需要事先確定。不同的硬體、作業系統之間的通訊,所有的這一切都需要一種規則。而我們就把這種規則稱為協議(protocol)。
協議中存在各式各樣的內容。從電纜的規格到 IP 地址的選定方法、尋找異地使用者的方法、雙方建立通訊的順序,以及 Web 頁面顯示需要處理的步驟等等。像這樣把與網際網路相關聯的協議集合起來總稱
2.分層管理
TCP/IP 協議族裡重要的一點就是分層。TCP/IP 協議族按層次分別分為以下 4 層:應用層、傳輸層、網路層和資料鏈路層。
把 TCP/IP 層次化是有好處的。比如,如果網際網路只由一個協議統籌,某個地方需要改變設計時,就必須把所有部分整體替換掉。而分層之後只需把變動的層替換掉即可。把各層之間的介面部分規劃好之後,每個層次內部的設計就能夠自由改動了。
值得一提的是,層次化之後,設計也變得相對簡單了。處於應用層上的應用可以只考慮分派給自己的任務,而不需要弄清對方在地球上哪個地方、對方的傳輸路線是怎樣的、是否能確保傳輸送達等問題。
OSI參考模型、TCP/IP參考模型對比
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,網路介面卡,即網絡卡),及光纖等物理可見部分(還包括聯結器等一切傳輸媒介)。硬體上的範疇均在鏈路層的作用範圍之內。
3.TCP/IP 通訊傳輸流
利用 TCP/IP 協議族進行網路通訊時,會通過分層順序與對方進行通訊。傳送端從應用層往下走,接收端則往應用層方向上走。
我們用 HTTP 舉例來說明,首先作為傳送端的客戶端在應用層(HTTP 協議)發出一個想看某個 Web 頁面的 HTTP 請求。接著,為了傳輸方便,在傳輸層(TCP 協議)把從應用層處收到的資料(HTTP 請求報文)進行分割,並在各個報文上打上標記序號及埠號後轉發給網路層。
在網路層(IP 協議),增加作為通訊目的地的 MAC 地址後轉發給鏈路層。這樣一來,發往網路的通訊請求就準備齊全了。
接收端的伺服器在鏈路層接收到資料,按序往上層傳送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端傳送過來的 HTTP 請求。
傳送端在層與層之間傳輸資料時,每經過一層時必定會被打上一個該層所屬的首部資訊。反之,接收端在層與層傳輸資料時,每經過一層時會把對應的首部消去。這種把資料資訊包裝起來的做法稱為封裝(encapsulate)。
4.與 HTTP 關係密切的協議 : IP、TCP 和 DNS
名稱 | 分層結構 | 主要作用 | 作用描述 |
---|---|---|---|
DNS服務 | 應用層 | 負責域名解析 | 根據域名查詢IP地址,或根據IP地址反查域名 |
TCP協議 | 傳輸層 | 確保可靠性 | 提供可靠的位元組流服務 |
IP協議 | 網路層 | 負責傳輸 | 把各種資料包傳送給對方 |
(1)負責域名解析的 DNS 服務
DNS(Domain Name System)服務是和 HTTP 協議一樣位於應用層的協議。它提供域名到 IP 地址之間的解析服務。
計算機既可以被賦予 IP 地址,也可以被賦予主機名和域名。比如 www.hackr.jp。
使用者通常使用主機名或域名來訪問對方的計算機,而不是直接通過 IP 地址訪問。因為與 IP 地址的一組純數字相比,用字母配合數字的表示形式來指定計算機名更符合人類的記憶習慣。但要讓計算機去理解名稱,相對而言就變得困難了。因為計算機更擅長處理一長串數字。
為了解決上述的問題,DNS 服務應運而生。DNS 協議提供通過域名查詢 IP 地址,或逆向從 IP 地址反查域名的服務。
(2)TCP協議
TCP協議位於傳輸層,提供可靠的位元組流服務。
所謂的位元組流服務(Byte Stream Service)是指,為了方便傳輸,將大塊資料分割成以報文段(segment)為單位的資料包進行管理。而可靠的傳輸服務是指,能夠把資料準確可靠地傳給對方。一言以蔽之,TCP 協議為了更容易傳送大資料才把資料分割,而且 TCP 協議能夠確認資料最終是否送達到對方。
為了準確無誤地將資料送達目標處,TCP 協議採用了三次握手策略。用 TCP 協議把資料包送出去後,TCP 不會對傳送後的情況置之不理,它一定會向對方確認是否成功送達。握手過程中使用了 TCP 的標誌(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。
傳送端首先發送一個帶 SYN 標誌的資料包給對方。接收端收到後,回傳一個帶有SYN/ACK 標誌的資料包以示傳達確認資訊。最後,傳送端再回傳一個帶 ACK 標誌的資料包,代表“握手”結束。
若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序傳送相同的資料包。
(3)IP協議
IP網際協議位於網路層。Internet Protocol 這個名稱可能聽起來有點誇張,但事實正是如此,因為幾乎所有使用網路的系統都會用到 IP 協議。TCP/IP 協議族中的 IP 指的就是網際協議,它的作用是把各種資料包傳送給對方。而要保證確實傳送到對方那裡,則需要滿足各類條件。其中兩個重要的條件是 IP 地址和 MAC 地址(Media Access ControlAddress)。
IP 地址指明瞭節點被分配到的地址,MAC 地址是指網絡卡所屬的固定地址。IP 地址可以和 MAC 地址進行配對。IP 地址可變換,但 MAC 地址基本上不會更改。
名稱 | 描述 |
---|---|
IP 地址 | 指明瞭節點被分配到的地址,容易發生改變 |
MAC 地址 | 是指網絡卡所屬的固定地址,一般不會發生改變 |
使用 ARP 協議憑藉 MAC 地址進行通訊
IP 間的通訊依賴 MAC 地址。在網路上,通訊的雙方在同一區域網(LAN)內的情況是很少的,通常是經過多臺計算機和網路裝置中轉才能連線到對方。而在進行中轉時,會利用下一站中轉裝置的 MAC 地址來搜尋下一個中轉目標。這時,會採用ARP 協議(Address Resolution Protocol)。ARP 是一種用以解析地址的協議,根據通訊方的 IP 地址就可以反查出對應的 MAC 地址。當主機A要與主機B通訊時,ARP協議(地址解析協議)可以將主機B的IP地址解析成主機B的MAC地址,MAC地址一旦確定,主機A就能向主機B傳送IP通訊了。
沒有人能夠全面掌握網際網路中的傳輸狀況
在到達通訊目標前的中轉過程中,那些計算機和路由器等網路裝置只能獲悉很粗略的傳輸路線。
這種機制稱為路由選擇(routing),有點像快遞公司的送貨過程。想要寄快遞的人,只要將自己的貨物送到集散中心,就可以知道快遞公司是否肯收件發貨,該快遞公司的集散中心檢查貨物的送達地址,明確下站該送往哪個區域的集散中心。接著,那個區域的集散中心自會判斷是否能送到對方的家中。
無論哪臺計算機、哪臺網路裝置,它們都無法全面掌握網際網路中的細節。