超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。HTTP 也屬於 TCP/IP 協議族的子集,想要學習 HTTP ,先須要瞭解 TCP/IP。服務器
TCP/IP 協議族裏重要的一點就是分層,按層次分爲如下4層:應用層、傳輸層、網絡層 、數據鏈路層。網絡
層次化的好處是,各層之間的協議改變能夠互不影響,只須要按照接口規劃好。學習
應用層
應用層決定了向用戶提供應用服務時通訊的活動。TCP/IP 協議族內預存了各種通用的應用服務。spa
包括 HTTP,FTP(File Transfer Protocol,文件傳輸協議),DNS(Domain Name System,域名系統)服務。htm
傳輸層
傳輸層提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。blog
有兩個性質不一樣的協議:TCP(Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol,用戶數據報協議)接口
網絡層
網絡層用來處理在網絡上流動的數據包,數據包是網絡傳輸的最小數據單位。該層規定了經過怎樣的路徑到達對方計算機,並把數據包傳送給對方。three
與對方計算機之間經過多臺計算機或網絡設備進行傳輸時,網絡層所起的做用就是在衆多的選項內選擇一條傳輸路線。ip
鏈路層
用來處理鏈接網絡的硬件部分。硬件上的範疇均在鏈路層的做用範圍以內。get
如圖1所示,發送端在層與層之間傳輸數據時,每通過一層時一定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每通過一層時會把對應的首部消去。
這種把數據信息包裝起來的作法成爲封裝。
3.1 負責傳輸的 IP 協議
IP(Internet Protocol)網際協議位於網絡層。其做用是把各類數據包傳送給對方,須要知足各種條件,最重要的兩個條件即是 IP 地址 和 MAC 地址。IP 地址能夠和 MAC 地址進行配對,IP 地址可變換,但 MAC 地址基本不會更改。
在網絡上,通訊的雙方在同一局域網(LAN)內的狀況是不多的,一般是通過多臺計算機和網絡設備中轉才能鏈接到對方。而在進行中轉時,會利用下一站中轉設備的 MAC 地址來搜索下一個中轉目標。這時,會採用 ARP (Address Resolution Protocol)協議。 ARP 是一種用以解析地址的協議,根據通訊方的 IP 地址就能夠反查出對應的 MAC 地址。
3.2 確保可靠性的 TCP 協議
TCP 位於傳輸層,提供可靠的字節流服務。字節流服務是指將大塊數據分割成報文段(segment)爲單位的數據包進行管理
爲了保證準確性,TCP 協議採用了三次握手(three-way handshaking)策略。握手過程當中使用了 TCP 的標誌(flag)—— SYN(synchronize)、ACK(acknowledgement)和 FIN(finish)。
TCP創建鏈接—三次握手:發送端首先發送一個帶SYN標誌的數據包給對方。接收端收到後,回傳一個帶有 SYN/ACK 標誌的數據包以示傳達確認信息。最後,發送端再回傳一個帶 ACK 標誌的數據包,表明「握手」結束,過程見圖2。
TCP釋放鏈接—四次握手:發送端首先發送一個帶 FIN 標誌的數據包給對方,而後進入 FIN-WAIT-1 狀態。接收端收到後不能當即斷開鏈接(防止數據丟失),先發送帶 ACK 標誌的數據包,此時發送端進入 FIN-WAIT-2 狀態。而後接收端將沒有傳輸完的數據繼續傳完,傳完以後發送一個帶 ACK 和 FIN 標誌的數據包,通知發送端。發送端發送 ACK 標誌的數據包給接收端,並進入 TIME-WAIT 狀態,等待 2MSL 後斷開鏈接。
上述三種協議在 HTTP 通訊過程當中的做用能夠用一張圖來表示: