Http之鏈接管理-第一課

主要介紹TCP鏈接,TCP性能考慮,TCP的三次握手。


http鏈接實際上就是tcp鏈接及其使用規則。要弄懂http,必須弄懂tcp。


1.tcp/ip的七層架構

我們先複習一下tcp/ip的七層架構。


2.TCP的三次握手

TCP(Transmission Control Protocol) 傳輸控制協議

TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,採用三次握手確認建立一個連接:

位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)

Sequence number(順序號碼) Acknowledge number(確認號碼)



第一次握手:主機A發送位碼爲syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求建立聯機;

第二次握手:主機B收到請求後要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包

第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否爲1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連接建立成功。

完成三次握手,主機A與主機B開始傳送數據。

3.TCP性能考慮

http事務延遲



http事務的時延有幾個原因。

1.URI轉成IP,http客戶端都有一個小的DNS緩存。

2.每條鏈接會有鏈接建立的時延。

3.請求處理

3.回送http相應


TCP的相關延遲

1.TCP鏈接建立握手

2.TCP慢啓動擁塞

3.數據聚集的Nagle算法

4.用於攜帶確認的TCP延遲確認算法

5.TIME_WAIT時延和端口耗盡


1.TCP鏈接建立握手

但你花費這些時間建立鏈接,傳輸數據少,不靠譜。小的http事務會花費50%的時間進行TCP鏈接,HTTP會有重用現存鏈接,減少TCP建立鏈接造成的影響。也就是持久鏈接關鍵字keep-alive。

兩種:HTTP/1.0+ "keep-alive"    已經不再使用。服務器不一定同意keep-alive會話。

           HTTP/1.1 “persistent”


Connection: keep-alive

Keep-Alive:max=5,timeout=120 最多爲5個事務服務,保持鏈接空閒120秒。



Keep-alive鏈接的限制和規則

1.要有content-length

2.不應該與無法確定是否支持Connection首部的呆梨服務器建立keep-alive鏈接。

服務器支持會回送一個Connection:keep-alive 如:http://www.woyaofun.com/


盲中繼,就是代理不會處理同一條鏈接的其他請求,建立不了長鏈接。

作爲代理是不能轉發connection首部的。


HTTP/1.1 persistent鏈接。


2.TCP慢啓動擁塞

防止因特網得突然過載,每成功接受到一個分組,發送端就有路發送另外兩個分組得權限。


3.數據聚集的Nagle算法

 Nagle算法的基本定義是任意時刻,最多只能有一個未被確認的小段。 所謂“小段”,指的是小於MSS尺寸的數據塊,所謂“未被確認”,是指一個數據塊發送出去後,沒有收到對方發送的ACK確認該數據已收到。


        Nagle算法的規則(可參考tcp_output.c文件裏tcp_nagle_check函數註釋):


      (1)如果包長度達到MSS,則允許發送;


      (2)如果該包含有FIN,則允許發送;


      (3)設置了TCP_NODELAY選項,則允許發送;


      (4)未設置TCP_CORK選項時,若所有發出去的小數據包(包長度小於MSS)均被確認,則允許發送;
      (5)上述條件都未滿足,但發生了超時(一般爲200ms),則立即發送。


4TIME_WAIT時延和端口耗盡

當某個TCP斷電關閉TCP鏈接時,會在內存中維護一個小的控制快,用來記錄最近所關閉鏈接的IP地址和端口號。緩存小於兩分鐘。

發佈了95 篇原創文章 · 獲贊 7 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章