IP,TCP和HTTP隨筆

IP,TCP和HTTP

OSI.png

? 可以參考OSI模型定義了七層結(jié)構(gòu)。
? 著重探討特殊的混合模式:基于IP的TCP,以及基于TCP實(shí)現(xiàn)的HTTP。這個(gè)是我們每天app的基本網(wǎng)絡(luò)配置。
? 其實(shí)在互聯(lián)網(wǎng)上傳遞數(shù)據(jù)的方式并不只 HTTP 一種。HTTP 之所以被廣泛使用的原因是其非常穩(wěn)定、易用,即便是防火墻一般也是允許 HTTP 協(xié)議穿透的

IP Header

一個(gè)IP數(shù)據(jù)包通常包含header(報(bào)頭信息)和payload(有效載荷)。
payload中的內(nèi)容既是要傳輸?shù)恼嬲男畔ⅲ鴋eader承載的是與傳輸數(shù)據(jù)有關(guān)的元數(shù)據(jù)(metadata)。
Header長(zhǎng)度為20字節(jié)
header信息中最關(guān)鍵的是源和目標(biāo)IP地址。

Fragmentation(數(shù)據(jù)分片)

由于底部鏈路層對(duì)所傳輸?shù)臄?shù)據(jù)幀有最大長(zhǎng)度的限制,所以有時(shí)候我們需要對(duì)數(shù)據(jù)進(jìn)行分片。假如數(shù)據(jù)超出了數(shù)據(jù)的長(zhǎng)度而數(shù)據(jù)源沒(méi)有啟用對(duì)傳輸數(shù)據(jù)包進(jìn)行分片,就會(huì)收到ICMP(Internet Control Message Protocol,Internet報(bào)文控制協(xié)議) 的數(shù)據(jù)幀超長(zhǎng)報(bào)告信息。
在IPv6中,如果數(shù)據(jù)包超限制,路由會(huì)直接丟棄數(shù)據(jù)包并且向發(fā)送源回傳ICMP6的數(shù)據(jù)幀超長(zhǎng)報(bào)告信息。源和目標(biāo)兩端會(huì)基于這個(gè)特性來(lái)路徑MTU(maximum transfer unit)發(fā)現(xiàn),以此尋找兩端之間最大傳輸單元所在的路由。找到MTU路由后,僅當(dāng)上層數(shù)據(jù)包的最小pauload(負(fù)載)確實(shí)超過(guò)了MTU,IPv6才會(huì)進(jìn)行分片傳輸。對(duì)于IPv6下的TCP,這bu不會(huì)造成什么問(wèn)題。

TCP

TCP是基于IP層的協(xié)議,但是TCP是可靠的,有序的,有錯(cuò)誤檢查機(jī)制的基于字節(jié)流傳輸?shù)膮f(xié)議。

TCP建立的是雙向的連接,通信雙方可以同時(shí)進(jìn)行數(shù)據(jù)的傳輸。

TCP用不同的端口號(hào)來(lái)區(qū)分應(yīng)用。(IP地址和端口號(hào))

TCP Segments(TCP報(bào)文段)

? 主機(jī)之間傳輸?shù)臄?shù)據(jù)流一般先會(huì)被分塊,再轉(zhuǎn)化成 TCP 的報(bào)文段,最終會(huì)生成 IP 數(shù)據(jù)包中的 payload 載荷數(shù)據(jù)。
? 每個(gè) TCP 報(bào)文段都有 header 信息和對(duì)應(yīng)的載荷 payload。payload 信息就是待傳輸?shù)臄?shù)據(jù)塊。TCP 報(bào)文段的 header 信息中主要包含的是源和目標(biāo)端口號(hào),至于說(shuō)源和目標(biāo)的 IP 地址信息則已經(jīng)包含在 IP header 信息中了。

TCP連接

三次握手

數(shù)據(jù)傳輸

? TCP 將流量控制和其他一系列復(fù)雜機(jī)制結(jié)合起來(lái)進(jìn)行擁塞控 制。需要處理以下問(wèn)題:針對(duì)丟失的報(bào)文采用重發(fā)機(jī)制,同時(shí)還需要?jiǎng)討B(tài)的調(diào)整發(fā)送報(bào)文的頻率

終止連接

最終連接會(huì)終止(或結(jié)束)。連接的每一端都會(huì)發(fā)送 FIN 標(biāo)識(shí)給另一端來(lái)聲明結(jié)束傳輸,接著另一端會(huì)對(duì)收到 FIN 進(jìn)行確認(rèn)。當(dāng)連接兩端均發(fā)送完各自 FIN 和做出相應(yīng)的確認(rèn)后,連接將會(huì)徹底關(guān)閉。

HTTPS

Transport Layer Security (安全傳輸層協(xié)議,TLS) 是一種基于 TCP 的加密協(xié)議。它支持兩件事:
傳輸?shù)膬啥丝梢曰ハ囹?yàn)證對(duì)方的身份,以及加密所傳輸?shù)臄?shù)據(jù)

基于 TLS 的 HTTP 請(qǐng)求就是 HTTPS。

基于HTTPS的請(qǐng)求,在網(wǎng)絡(luò)安全方面有顯著的提升。但是請(qǐng)求會(huì)比較耗時(shí)。

綜合結(jié)論

有效的適應(yīng)連接
TCP連接容易在兩個(gè)時(shí)點(diǎn)出現(xiàn)問(wèn)題:初始設(shè)置,以及通過(guò)傳輸?shù)淖詈笠徊糠謭?bào)文。

建立連接

連接設(shè)置可能會(huì)比較耗時(shí)。TCP建立連接的過(guò)程中需要進(jìn)行三次握手。這個(gè)過(guò)程中本身沒(méi)有太多的數(shù)據(jù)需要傳遞。但是,對(duì)于移動(dòng)網(wǎng)絡(luò)來(lái)說(shuō),從手機(jī)端向服務(wù)器端發(fā)送一個(gè)數(shù)據(jù)包普遍需要 250ms,也就是四分之一秒。推及到三次握手,也就是說(shuō)在還沒(méi)有傳送任何數(shù)據(jù)之前,光建立連接就要花費(fèi) 750ms。
HTTPS 的情況更夸張,由于 HTTPS 是基于 TLS 的 HTTP,而 HTTP 又基于 TCP。TCP 連接就要執(zhí)行三次握手,然后到了 TLS 層還會(huì)再握手三次。估算一下,建立一個(gè) HTTPS 連接的耗時(shí)至少是創(chuàng)建一個(gè) HTTP 連接的兩倍。如果 RTT 時(shí)間是 500ms(假設(shè)單程 250ms),HTTPS 建立連接累計(jì)總耗時(shí)將達(dá)1.5秒。

長(zhǎng)連接和管線(xiàn)化

HTTP有兩種策略來(lái)解決這些問(wèn)題。最簡(jiǎn)單的是HTTP持久連接,也被稱(chēng)為長(zhǎng)連接。具體就是,每當(dāng)HTTP完成一組請(qǐng)求相應(yīng)之后,還會(huì)復(fù)用相同的TCP連接。而HTTPS會(huì)復(fù)用同樣的TLS連接:

client sends HTTP request 1 ->
<- server sends HTTP response 1
client sends HTTP request 2 ->
<- server sends HTTP response 2
client sends HTTP request 3 ->
<- server sends HTTP response 3
close connection

第二步就利用了 HTTP 管線(xiàn) (pipelining) 處理,即允許客戶(hù)端利用同樣的連接并行發(fā)送多個(gè)請(qǐng)求,也就是說(shuō)無(wú)需等待上一個(gè)請(qǐng)求的響應(yīng)完成可以發(fā)下一個(gè)請(qǐng)求。這表示能同時(shí)處理請(qǐng)求和響應(yīng),請(qǐng)求處理的順序采用先進(jìn)先出原則,響應(yīng)結(jié)果會(huì)按照請(qǐng)求發(fā)出的順序依次返還給客戶(hù)端。
稍微簡(jiǎn)化一下,看起來(lái)會(huì)是這樣:

open connection
client sends HTTP request 1 ->
client sends HTTP request 2 ->
client sends HTTP request 3 ->
client sends HTTP request 4 ->
<- server sends HTTP response 1
<- server sends HTTP response 2
<- server sends HTTP response 3

                       <- server sends HTTP response 4

close connection

注意:服務(wù)器發(fā)出的相應(yīng)是實(shí)時(shí)的,不會(huì)等到接受全部請(qǐng)求才處理。
可以利用這個(gè)特點(diǎn)來(lái)提升 TCP 的效率。只需要在建立連接初始階段執(zhí)行握手,而后一直復(fù)用同樣的連接,這樣 TCP 就可以最大限度的利用帶寬。此種情況下,擁塞控制也會(huì)隨之提升。因?yàn)榭焖僦匕l(fā)機(jī)制無(wú)法處理的最末四個(gè)報(bào)文丟失情況只會(huì)發(fā)生在使用本連接的最后一個(gè)請(qǐng)求-響應(yīng)中,而不是像之前那樣每一個(gè)請(qǐng)求-響應(yīng)都需要建立自己的連接,每個(gè)連接中都可能出現(xiàn)最后四個(gè)報(bào)文丟失的問(wèn)題。

本文來(lái)源:鏈接

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

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

  • 1.OkHttp源碼解析(一):OKHttp初階2 OkHttp源碼解析(二):OkHttp連接的"前戲"——HT...
    隔壁老李頭閱讀 21,587評(píng)論 24 176
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評(píng)論 19 139
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評(píng)論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,368評(píng)論 6 174
  • 本章為測(cè)試管理問(wèn)題中的非功能性測(cè)試問(wèn)題
    灼灼2015閱讀 810評(píng)論 0 0

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