HTTP協議(1)—HTTP的連接
一、TCP連接
過程:
a.瀏覽器解析出主機名
b.瀏覽器查詢出這個主機名的IP地址
c.瀏覽器獲得端口號
d.瀏覽器發起到ip:port的連接(TCP連接)
e.瀏覽器向服務器發送一條HTTP報文
f.瀏覽器從服務器讀取HTTP響應報文
g.瀏覽器關閉連接
1.TCP的可靠數據管道
從TCP連接一端填入的字節會從另一端以原有的順序、正確地傳送出來
2.TCP流是分段的,由IP分組傳送
HTTP會以流的形式將報文數據的內容通過一條打開的TCP連接按序傳輸,TCP收到數據流之後會把數據流砍成被稱作段的小數據塊,並將段分裝在IP分組中,通過因特網進行傳輸
3.保持TCP連接的正確運行
通過端口號來保持連接的正確運行
TCP連接的識別:
<源IP地址、源端口號、目標IP地址、目標端口號>
二、對TCP性能的考慮
1.HTTP事務的時延
主要原因:
a.DNS查詢
b.TCP連接請求
c.服務器處理http報文
d.服務器回送http響應
3.性能聚焦區域
a.TCP連接的握手延時
i.請求新的連接時,客戶端向服務器端發送一個TCP分組,設置SYN標記
ii.服務器接收連接,會對一些連接參數進行計算,並回送一個TCP分組,包含SYN+ACK標記
iii.最後客戶端向服務器端回送一條確認信息ACK,通知服務器連接已建立
b.延遲確認
TCP可以將確認信息和輸出的數據分組一起發送出去,TCP現將確認信息存放在緩衝區中,利用延遲算法等待輸出的數據分組
c.TCP慢啓動
起初會限制連接的最大速度,然後數據成功傳輸,隨着時間的推移會提高傳輸的速度
d.Nagle算法與TCP_NODELAY
.應用程序可以將任意大小的數據放入TCP棧中,但如果TCP將大量小數據放入TCP棧中會嚴重影響網絡性能
.Nagle算法試圖在發送數據之前將大量TCP數據綁定在一起
.只有其他分組都確認以後,Nagle算法纔會發送非全尺寸的分組
.小的http報文無法填滿一個分組,Nagel算法會進行等待那些永遠不會到來的額外數據而產生延遲,影響性能
.Nagle算法會阻止數據的發送,直到有數據分組爲止
.HTTP應用程序會設置TCP_NODELAY來禁用Nagle算法
e.TIME_WAIT累積與端口耗盡
.TCP會在內存中維護一個小的控制塊並且存儲最近所關閉的IP地址和端口號,這類信息會維持2秒鐘(2MSL),以處理連接關閉4步中的任一步
丟失的情況
.客戶端每次連接上服務器時都會獲得一個新的源端口,以實現連接的唯一性
三、HTTP連接的處理
1.常被誤解的Connection首部
a.Connection首部可以承載3種不同類型的標籤
.HTTP首部字段名,列出了只與此連接有關的首部
.任意標籤值,用於描述此連接的非標準選項
.值close,說明完成此操作之後需關閉這條持久連接
b.HTTP應用程序收到帶有Connection首部的請求時,接收端會解析發送的請求,在轉發給下一跳之前刪除Connection首部
2.串行事務處理延時
a.並行連接
通過多條TCP連接發起併發的HTTP請求
b.持久連接
重用TCP連接,以消除連接及關閉的延時
c.管道化連接
通過共享的TCP連接發起併發的HTTP請求
d.複用的連接
交替傳送請求和響應
四、併發連接
HTTP允許客戶端打開多條連接,並行的執行多個HTTP連接(可以在多臺服務器上進行連接)
1.並行連接可能會提高頁面的加載速度
2.並行連接不一定快
.客戶端網絡帶寬不足
.打開大量連接會消耗很多內存資源,從而引發自身的性能問題
.瀏覽器會將併發連接數限制爲一個較小的值
五、持久連接
.應用程序發起同一臺服務器的多次連接
.HTTP11允許HTTP設備在事務處理結束之後仍然保持正在打開的狀態
1.持久以及並行連接
a.並行連接缺點
.每個事務都會打開/關閉一條新的連接,會耗費時間和帶寬
.由於TCP慢啓動的存在,每條新連接的性能都會降低
.可打開的並行連接數量實際上是有限的
b.持久連接的兩種類型
HTTP/1.0 + keep-Alive連接
HTTP/1.1 + persistent連接
2. HTTP/1.0 + keep-Alive連接
3.Keep-Alive操作
客戶端包含Connection:Keep-Alive首部,如果服務器願意爲下一條連接請求保持打開狀態,就在響應中包含相同的首部,如果沒有,客戶端
會在發送響應報文後關閉連接
4.Keep-Alive選項
.timeout
服務器希望將連接保持在活躍狀態的時間
.max
服務器還希望爲多少個事務保持此連接的活躍狀態
5.持久連接
HTTP1.1默認支持持久連接
要在事務完成後關閉連接可以在首部加入Connection-Close
6.持久連接的限制和規則
.發送了Connection-Close首部後,客戶端就無法在那條連接上發送更多請求了
.只有當實體部分的長度和相應的Content-Length一致,或者用分塊傳輸編碼連接才能保
持持久連接
.HTTP1.1的代理能夠分別管理與客戶端和服務器的持久連接,每個持久連接只適合於一
跳傳輸
.HTTP1.1設備可以在任意時刻關閉連接
.HTTP1.1應用程序必須能夠從異步關閉中恢復過來
六、管道化連接
將多條請求放入隊列,當第一條請求發送時,第二、三條請求跟着發送
七、關閉連接的奧祕
1.正常關閉連接
a.完全關閉與半關閉
完全關閉:關閉TCP連接的輸入輸出(close())
半關閉:關閉輸入或輸出的一邊(shutdown)
b.TCP關閉及重置錯誤
關閉連接的輸出信道總是安全的
關閉連接的輸入信道不安全,當另一端向其發送數據時,會產生TCP連接重置,並會清空操
作系統緩衝區
c.正常關閉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.