1. 程式人生 > >HTTP協議---三次握手

HTTP協議---三次握手

load 客戶端和服務器 mtp tran 普通 lin 控制 技術 網絡層

HTTP協議

關於協議

? 對於應用層開發人員,接觸最多的網絡協議通常都是傳輸層的TCP,為什麽這麽說,因為再往上的應用層協議,如:HTTP、HTTPS、POP3、SMTP、RPC、FTP、TELNET等等都是基於TCP傳輸層協議。但對於IP協議,對於應用程序員來說更多的印象還是IP地址這個東西,實際上IP協議是位於TCP協議之下的網絡層,對於應用層程序員來說很難直接接觸

? IP協議 : IP的責任就是把數據從源傳送到目的地。它不負責保證傳送可靠性,流控制,包順序和其它對於主機到主機協議來說很普通的服務

? TCP協議:TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議

? HTTP協議:HTTP 是基於 TCP/IP 協議的應用層協議。它不涉及數據包(packet)傳輸,主要規定了客戶端和服務器之間的通信格式,默認使用80端口

TCP協議的3次握手

? 在我們獲得頁面數據之前,客戶端需要與服務器端進行三次握手的"問候"

技術分享圖片

? 簡單來說:

? 1, 客戶端向服務器發起問候,攜帶編號number

? 2, 服務器如果收到客戶端的問候,回復問候,攜帶其他編號number

? 3,客戶端確認連接成功,回復服務器收到返回的數據

技術分享圖片

?

為什麽是3次握手?

? 這個問題的本質是, 通信不可靠, 但是通信雙發需要就某個問題達成一致. 而要解決這個問題, 無論你在消息中包含什麽信息, 三次通信是理論上的最小值

? 已失效的連接請求報文段的產生在這樣一種情況下:

  • client發出的第一個連接請求報文段並沒有丟失,而是在某個網絡結點長時間的滯留了,以致延誤到連接釋放以後的某個時間才到達server。

  • 本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段後,就誤認為是client再次發出的一個新的連接請求。於是就向client發出確認報文段,同意建立連接。

  • 假設不采用“三次握手”,那麽只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據。

  • 但server卻以為新的運輸連接已經建立,並一直等待client發來數據。這樣,server的很多資源就白白浪費掉了。

  • 采用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連接

HTTP協議---三次握手