讀《HTTP權(quán)威指南》第四章 連接管理

HTTP是如何使用TCP連接的

TCP基礎(chǔ)簡介

  1. TCP(傳輸控制協(xié)議)(英語:Transmission Control Protocol,縮寫:TCP)是一種面向連接的、可靠的、基于字節(jié)流傳輸層通信協(xié)議

  2. TCP連接為HTTP提供了一條可靠的比特傳輸管道,從TCP連接一端填入的字節(jié)會從另一端以原有的順序正確的傳送出來。

  3. TCP流是分段的、由ip分組傳輸。

  4. TCP的數(shù)據(jù)是通過名為IP分組(或IP數(shù)據(jù)報)的小數(shù)據(jù)塊來發(fā)送的。

  5. HTTPS只是比HTTP在應(yīng)用層和傳輸層之間多了一層安全層


    HTTP和HTTPS網(wǎng)絡(luò)協(xié)議棧
  6. ip分組及tcp段在書中由詳細圖介紹,值得注意的是TCP的首部中有一些用于數(shù)據(jù)排序和完整性檢查的標記。

  7. 一個tcp連接需要源ip、源端口、目的IP地址、目的端口。當(dāng)這四個值相同時,該tcp連接是唯一的。

概述

HTTP要出傳送一條報文時,會以流的形式將報文數(shù)據(jù)的內(nèi)容通過一條打開的TCP連接按序傳輸。TCP收到數(shù)據(jù)流之后,會將數(shù)據(jù)流砍成被稱作段的小數(shù)據(jù)塊,封裝在IP分組中通過因特網(wǎng)進行傳輸。

詳細

  1. 服務(wù)端創(chuàng)建好套接字(socket)
  2. 將套接字綁定到端口上去(bind)
  3. 允許套接字進行連接(listen)
  4. 等待連接(accept)
  5. 客戶端獲取ip地址及端口號(get)
  6. 創(chuàng)建新的套接字(socket)
  7. 連接到服務(wù)器到socket(connect),此時服務(wù)器通知應(yīng)用程序由連接到來并開始讀取請求。
  8. 發(fā)送http請求并等待http響應(yīng),服務(wù)器應(yīng)用程序處理http請求報文并回送http響應(yīng)。最后關(guān)閉連接。
  9. 客戶端也關(guān)閉連接。


    TCP客戶端是如何通過TCP套接字接口進行通信的

什么是套接字

TCP用主機的ip和端口號作為連接的斷點,這個端點就叫做套接字。用ip:port表示。

一次http事務(wù)中影響到連接時間可能是哪些原因?

  1. DNS解析
  2. tcp連接建立時間
  3. 建立tcp連接后請求報文的傳輸時間、服務(wù)器讀取并處理請求報文的時間
  4. 服務(wù)器返回給客戶端的響應(yīng)報文傳輸時間

總的來說取決于硬件速度、網(wǎng)絡(luò)及服務(wù)器的負載、請求及響應(yīng)報文的尺寸、客戶端到服務(wù)器的距離、TCP協(xié)議技術(shù)的復(fù)雜性。

TCP連接的時延、瓶頸以及存在的障礙

TCP連接中由哪些原因會導(dǎo)致時延?

  1. TCP連接建立握手
  2. 延遲確認

詳細解釋下TCP三次握手?

在建立連接之前,TCP需要傳送兩個IP分組(a、b)來建立連接
  1. 第一次握手:客戶端發(fā)送一個IP分組,分組中含有SYN(Synchronize Sequence Numbers同步序列編號)標記。該標記的作用是說明這是一個連接請求。
  2. 第一次握手:服務(wù)端收到該分組,并獲取其連接參數(shù)。返回SYN標記和ACK(Acknowledgement 確認)標記。ACK標記的作用是說明該連接已被接受。
  3. 第三次握手:最后,客戶端再向服務(wù)器發(fā)送一條確認信息,表示此次連接已經(jīng)建立。(現(xiàn)代的TCP協(xié)議都允許在此IP分組中發(fā)送數(shù)據(jù))

TCP為什么是三次握手,而不是兩次或四次?

什么是延遲確認

每個TCP段都有一個序列號和完整性校驗和。接收者收到后需要向發(fā)送者返回一個確認分組,以標識該分組已被收到。如果接收者沒有收到該確認分組,則任務(wù)該分段已破損或者丟失,則會重發(fā)該分組。這就是確認。

關(guān)于延遲確認:由于該確認報文很小,因此允許在其他發(fā)往相同方向的tcp段上捎帶。延遲確認算法會在一個特定的窗口時期(100ms-200ms),將確認分組放到緩沖區(qū),以尋找可以捎帶它的分組,如果沒等到,那就成為一個獨立分組發(fā)往發(fā)送者。

什么是緩沖區(qū)

緩沖區(qū)(Buffer)又稱為緩存(Cache),是內(nèi)存空間的一部分。
也就是說,在內(nèi)存中預(yù)留了一定的存儲空間,用來暫時保存輸入或輸出的數(shù)據(jù),這部分預(yù)留的空間就叫做緩沖區(qū)。

為什么要引入緩沖區(qū)

什么是TCP慢啟動

為了防止網(wǎng)絡(luò)的突然過載和擁塞,TCP對新的連接有速度限制。剛開始連接時,需要先發(fā)送一個分組等待確認,確認成功就可以發(fā)送之前兩倍大小的報文??梢岳斫鉃橛幸粋€窗口大小,默認是最小的,多發(fā)一次,窗口就變大一倍,直到慢啟動門限變量值(就是一個常量,限制慢啟動的最大值)。這個速度其實是很快的,每次都是兩倍速度往上翻。

什么是擁塞避免

等到限制變?yōu)槁龁娱T限變量值時,為了避免增長速度過快,變成以加法的形式線性增長。

什么是超時重傳

上面的兩個機制都是在沒有擁塞的情況下增長的,要是擁塞了如何調(diào)整窗口值呢?
首先看tcp如何判定網(wǎng)絡(luò)進入擁塞狀態(tài):TCP的主要依據(jù)是發(fā)送端重發(fā)TCP段。TCP對每個報文段都有一個定時器叫做重傳定時器,當(dāng)這個定時器超時還沒有得到數(shù)據(jù)確認,那么TCP就會將該分組進行重傳。當(dāng)發(fā)生超時時,重傳的可能性很大,這個時候,TCP就會有以下強烈反應(yīng):

  1. 將慢啟動門限變量值降低一倍
  2. 將窗口值重新設(shè)為1
  3. 重新進入慢啟動
    這樣就保證了各個流之間的公平性。

什么是快速重傳以及三次ACK的由來?

Nagle算法解決的問題?

每個TCP段至少裝載了40個字節(jié)的標記和首部,如果該分組中數(shù)據(jù)量很少,那么網(wǎng)絡(luò)性能就會很低。也會影響其他的因特網(wǎng)流量。這個算法就是來解決這個問題的。它在一定條件下才允許發(fā)送非全尺寸的分組。不過也會帶來性能問題,比如它可能一直會等待數(shù)據(jù)來填滿一個分組,雖然有延遲界限,比如100ms-200ms,但總歸速度降低。一般情況下,會設(shè)置TCP_NODELAY參數(shù)來提高性能,同時確保分組數(shù)據(jù)塊但大小。

HTTP的優(yōu)化,包括并行連接、keep-alive(持久連接)和管道化連接

  • 并行連接
    如果帶寬有限,并行連接不一定能減少加載時間,并且并行連接導(dǎo)致內(nèi)存占用過高導(dǎo)致自身性能問題。服務(wù)器性能也會降低。所以瀏覽器會限制連接總數(shù)。服務(wù)器也可以關(guān)閉來自特定客戶端的超量連接。
  • connection首部:keep-alive
    因為一個頁面上可能加載同一服務(wù)器的資源,TCP建立連接和關(guān)閉連接耗時較多,存在TCP慢啟動但特性,同時可打開但并行數(shù)量有限。這個首部1996年就被提出了,被HTTP1.0實現(xiàn),HTTP1.1中做了很多問題修正,最新版本是persistent連接。connection:keep-alive是這樣的,客戶端請求帶上這個首部,服務(wù)器同樣需要返回,如果服務(wù)器不返回,那么客戶端任務(wù)該服務(wù)器不支持keep-alive,則關(guān)閉連接。必須保證返回的content-length是正確的,否則沒法保證前一次連接的結(jié)束和新連接的開始。
  • keep-alive
    只有開啟了connection:keep-alive才有效。并且此首部可選
    響應(yīng)首部中的timeout參數(shù)代表服務(wù)器估計的保持連接活躍時間,注意這不是承諾值。
    響應(yīng)首部中的max參數(shù)估計了服務(wù)器還希望多少個事務(wù)保持此連接的活躍狀態(tài),注意不是個承諾值。
connection: Keep-Alive
Keep-Alive: max=5, timeout=120

表示最多再為其他5個事務(wù)保持連接打開狀態(tài)。

管理連接時應(yīng)該以及不應(yīng)該做的事情

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 連接管理 重點 http是如何使用tcp連接的; tcp連接的時延、瓶頸以及存在的障礙 http的優(yōu)化包括并行連接...
    shenyifu閱讀 854評論 0 3
  • 運輸層協(xié)議概述 從通信和信息處理的角度看,運輸層向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層,同時也是...
    srtianxia閱讀 2,769評論 0 2
  • OSI七層模型 我們一般使用的網(wǎng)絡(luò)數(shù)據(jù)傳輸由下而上共有七層,分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示...
    泥孩兒0107閱讀 867評論 0 2
  • HTTP 是如何使用TCP連接的 TCP連接的時延,瓶頸以及存在的故障 HTTP 的優(yōu)化,包括并行連接,keep-...
    minyue閱讀 694評論 0 0
  • 博主最近在復(fù)習(xí)HTTP,之前用書主要是《計算機網(wǎng)絡(luò)》謝希仁版本,最近結(jié)合網(wǎng)上博客,進行復(fù)習(xí)和提綱式的總結(jié)。 一、概...
    stoneyang94閱讀 4,285評論 1 8

友情鏈接更多精彩內(nèi)容