小tips:TCP的三次握手、長鏈接、 短鏈接、 SPDY 協議

當網絡通訊時採用TCP協議時,在真正的讀寫操做以前,server與client之間必須創建一個鏈接,當讀寫操做完成後,雙方再也不須要這個鏈接時它們能夠釋放這個鏈接,鏈接的創建是須要三次握手的,而釋放則須要4次揮手,因此說每一個鏈接的創建都是須要資源消耗和時間消耗的。安全

TCP的三次握手

三次握手創建鏈接:服務器

  • 第一次握手:客戶端發送syn包(seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;
  • 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時本身也發送一個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
  • 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

握手過程當中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP鏈接一旦創建,在通訊雙方中的任何一方主動關閉鏈接以前,TCP 鏈接都將被一直保持下去。網絡

經典的三次握手示意圖:性能

經典的四次握手關閉圖:優化

TCP長鏈接

所謂長鏈接,指在一個TCP鏈接上能夠連續發送多個數據包,在TCP鏈接保持期間,若是沒有數據包發送,須要雙方發檢測包以維持此鏈接,通常須要本身作在線維持(不發生RST包和四次揮手)。3d

鏈接→數據傳輸→保持鏈接(心跳)→數據傳輸→保持鏈接(心跳)→……→關閉鏈接(一個TCP鏈接通道多個讀寫通訊)。server

這就要求長鏈接在沒有數據通訊時,定時發送數據包(心跳),以維持鏈接狀態。blog

TCP短鏈接

短鏈接是指通訊雙方有數據交互時,就創建一個TCP鏈接,數據發送完成後,則斷開此TCP鏈接(管理起來比較簡單,存在的鏈接都是有用的鏈接,不須要額外的控制手段)。資源

鏈接→數據傳輸→關閉鏈接。cli

 SPDY 協議

 SPDY協議是Google提出的基於傳輸控制協議(TCP)的應用層協議,經過壓縮、多路複用和優先級來縮短加載時間。該協議是一種更加快速的內容傳輸協議。

SPDY協議的目標是優化HTTP協議的性能,經過壓縮、多路複用和優先級等技術,縮短網頁的加載時間並提升安全性。SPDY協議核心思想是儘可能減小TCP鏈接數,而對於HTTP的語義未作太大修改(好比,HTTP的GET和POST消息格式保持不變),基本上兼容HTTP協議。

相關文章
相關標籤/搜索