TCP連接
TCP/IP是全球計(jì)算機(jī)及網(wǎng)絡(luò)設(shè)備都在使用的一種常見的分組交換網(wǎng)絡(luò)分層協(xié)議集
客戶端應(yīng)用程序可以打開一條TCP/IP連接鉴未。連接到可能運(yùn)行在世界任何地方的服務(wù)器應(yīng)用程序
TCP的可靠數(shù)據(jù)管道
HTTP連接實(shí)際上就是TCP連接和一些使用連接的規(guī)則
TCP為HTTP提供了一條可靠的比特傳輸管道
從TCP連接一端填入的字節(jié)會從另一端以原有的順序箭窜,正確的傳送出來
TCP流是分段的,由IP分組傳送
HTTP要傳送一條報(bào)文時(shí),會進(jìn)行如下傳送:
- 以流的形式將報(bào)文數(shù)據(jù)的內(nèi)容通過一條打開的TCP連接按序傳輸
- TCP接收到數(shù)據(jù)流后硝皂,將數(shù)據(jù)流砍成被稱作段的小數(shù)據(jù)塊
- 將段封裝在IP分組中盯另,通過因特網(wǎng)進(jìn)行傳輸
保持TCP連接的正確運(yùn)行
任意時(shí)刻計(jì)算機(jī)都可以有幾條TCP連接處于打開狀態(tài),TCP是通過端口號來保持所有這些連接的正確運(yùn)行的兄一。
TCP連接是通過4個值來是識別的:
<源IP地址厘线、源端口號、目的IP地址出革、目的端口號>
對TCP性能的考慮
HTTP事務(wù)的時(shí)延
HTTP事務(wù)時(shí)延有一下幾種主要原因:
- 從URL中解析IP地址及端口號
- 建立TCP連接
- 傳輸請求報(bào)文,及服務(wù)器處理請求報(bào)文
- 返回響應(yīng)報(bào)文
TCP網(wǎng)絡(luò)時(shí)延的大小取決于硬件速度骂束,網(wǎng)絡(luò)和服務(wù)器的負(fù)載费薄,請求和響應(yīng)報(bào)文的尺寸,客戶端和服務(wù)器的距離等
HTTP連接的處理
Connection首部
HTTP允許在客戶端和最終的源端服務(wù)器之間存在一串HTTP中間實(shí)體栖雾,包括代理楞抡,網(wǎng)關(guān),緩存等析藕。
在某些情況下召廷,兩個相鄰的HTTP應(yīng)用程序會為它們共享的連接應(yīng)用一組選項(xiàng)。
HTTP的Connection首部字段中有一個由逗號分隔的連接標(biāo)簽列表,這些標(biāo)簽為此連接指定了一些不會傳播到其他連接中去的選項(xiàng)竞慢。
- 當(dāng)HTTP應(yīng)用程序收到一條帶有Connection首部的報(bào)文時(shí)先紫,接收端會接卸發(fā)送端請求的所有選項(xiàng),并將其應(yīng)用筹煮。
- 在將此報(bào)文轉(zhuǎn)發(fā)給下一跳地址之前遮精,刪除Connection首部及Connection中列出的所有首部
并行連接
HTTP允許客戶端打開多條連接,并行地執(zhí)行多個HTTP事務(wù)
并行連接可能會提高頁面的加載速度
并行連接不一定會更快
并行連接的速度可能會更快败潦,但不一定總是更快本冲。
當(dāng)客戶端的網(wǎng)絡(luò)帶寬不足時(shí),大部分的時(shí)間肯能都是用來傳送數(shù)據(jù)的劫扒,一個連接到速度較快的服務(wù)器上的HTTP事務(wù)很容易好近所有可能用的Modem帶寬檬洞。
而且,打開大量連接會消耗很多內(nèi)存資源沟饥,從而引發(fā)自身的性能問題
并行連接可能讓人“感覺”更快一些
當(dāng)更多的組件對象同時(shí)出現(xiàn)在屏幕上添怔,使用戶能夠看到加載的進(jìn)展,哪怕速度上沒有變化贤旷,也會讓人感覺更快
持久連接
Web客戶端經(jīng)常會打開同一個站點(diǎn)的連接广料。
HTTP/1.1允許HTTP設(shè)備在事務(wù)處理結(jié)束之后將TCP連接保持在打開狀態(tài),以便為未來的HTTP請求重用現(xiàn)存的連接幼驶。
在事務(wù)處理結(jié)束后仍然保持在打開狀態(tài)的TCP連接被稱為持久連接
管道化連接
HTTP/1.1允許在持久連接上可選地使用請求管道艾杏。
在響應(yīng)到達(dá)之前,可以將多條請求放入隊(duì)列县遣。
當(dāng)?shù)谝粭l請求通過網(wǎng)絡(luò)流向地球另一端的服務(wù)器時(shí)糜颠,第二條和第三條也可以開始發(fā)送了
管道化連接有如下幾條限制:
- 如果HTTP客戶端無法確認(rèn)連接是持久的,就不應(yīng)該使用管道
- 必須按照與請求相同的順序回送HTTP響應(yīng)
- HTTP客戶端必須做好連接會在任意時(shí)刻關(guān)閉的準(zhǔn)備
- HTTP客戶端不應(yīng)該用管道化的方式發(fā)送會產(chǎn)生副作用的請求萧求,如POST,否則其兴,當(dāng)出錯時(shí),就會存在某些方法永遠(yuǎn)不會被執(zhí)行的風(fēng)險(xiǎn)夸政。