菜鳥面試必知的 Http 知識
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。HTTP 也屬于 TCP/IP 協議族的子集,想要學習 HTTP ,先需要了解 TCP/IP。
1 - TCP/IP 的分層管理
TCP/IP 協議族里重要的一點就是分層,按層次分為以下4層:應用層、傳輸層、網絡層和數據鏈路層。層次化的好處是,各層之間的協議改變可以互不影響,只需要按照接口規劃好。
-
應用層
應用層決定了向用戶提供應用服務時通信的活動。TCP/IP 協議族內預存了各類通用的應用服務。包括 HTTP,FTP(File Transfer Protocol,文件傳輸協議),DNS(Domain Name System,域名系統)服務。 -
傳輸層
傳輸層提供處于網絡連接中的兩臺計算機之間的數據傳輸。有兩個性質不同的協議:TCP(Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol,用戶數據報協議) -
網絡層
網絡層用來處理在網絡上流動的數據包,數據包是網絡傳輸的最小數據單位。該層規定了通過怎樣的路徑到達對方計算機,并把數據包傳送給對方。與對方計算機之間通過多臺計算機或網絡設備進行傳輸時,網絡層所起的作用就是在眾多的選項內選擇一條傳輸路線。 -
鏈路層
用來處理連接網絡的硬件部分。硬件上的范疇均在鏈路層的作用范圍之內。
2 - TCP/IP 通信傳輸流
如圖1所示,發送端在層與層之間傳輸數據時,每經過一層時必定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。
這種把數據信息包裝起來的做法成為封裝。
圖1 - HTTP通信傳輸過程
3 - 與 HTTP 關系密切的協議:IP、TCP 和 DNS
-
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。
圖2 - TCP建立連接—三次握手
TCP釋放連接—四次握手:發送端首先發送一個帶 FIN 標志的數據包給對方,然后進入 FIN-WAIT-1 狀態。接收端收到后不能立即斷開連接(防止數據丟失),先發送帶 ACK 標志的數據包,此時發送端進入 FIN-WAIT-2 狀態。然后接收端將沒有傳輸完的數據繼續傳完,傳完之后發送一個帶 ACK 和 FIN 標志的數據包,通知發送端。發送端發送 ACK 標志的數據包給接收端,并進入 TIME-WAIT 狀態,等待 2MSL 后斷開連接。
圖3 - TCP釋放連接—四次握手
- 3.3 負責域名解析的 DNS 服務
DNS (Domain Name System)服務是和 HTTP 協議一樣位于應用層的協議。它提供域名到 IP 地址之間的解析服務。用戶通常通過主機名或域名來訪問對方的計算機,計算機則通過 IP 地址查詢服務器。所以 DNS 就提供了域名查找 IP 地址和從 IP 地址反查域名的服務。
上述三種協議在 HTTP 通信過程中的作用可以用一張圖來表示: