IP,TCP和HTTP隨筆

IP,TCP和HTTP

OSI.png

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

IP Header

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

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

由于底部鏈路層對所傳輸?shù)臄?shù)據(jù)幀有最大長度的限制胸嘁,所以有時候我們需要對數(shù)據(jù)進行分片。假如數(shù)據(jù)超出了數(shù)據(jù)的長度而數(shù)據(jù)源沒有啟用對傳輸數(shù)據(jù)包進行分片凉逛,就會收到ICMP(Internet Control Message Protocol性宏,Internet報文控制協(xié)議) 的數(shù)據(jù)幀超長報告信息。
在IPv6中鱼炒,如果數(shù)據(jù)包超限制衔沼,路由會直接丟棄數(shù)據(jù)包并且向發(fā)送源回傳ICMP6的數(shù)據(jù)幀超長報告信息蝌借。源和目標兩端會基于這個特性來路徑MTU(maximum transfer unit)發(fā)現(xiàn),以此尋找兩端之間最大傳輸單元所在的路由昔瞧。找到MTU路由后,僅當上層數(shù)據(jù)包的最小pauload(負載)確實超過了MTU菩佑,IPv6才會進行分片傳輸自晰。對于IPv6下的TCP,這bu不會造成什么問題稍坯。

TCP

TCP是基于IP層的協(xié)議酬荞,但是TCP是可靠的,有序的瞧哟,有錯誤檢查機制的基于字節(jié)流傳輸?shù)膮f(xié)議混巧。

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

TCP用不同的端口號來區(qū)分應(yīng)用咧党。(IP地址和端口號)

TCP Segments(TCP報文段)

? 主機之間傳輸?shù)臄?shù)據(jù)流一般先會被分塊,再轉(zhuǎn)化成 TCP 的報文段陨亡,最終會生成 IP 數(shù)據(jù)包中的 payload 載荷數(shù)據(jù)傍衡。
? 每個 TCP 報文段都有 header 信息和對應(yīng)的載荷 payload深员。payload 信息就是待傳輸?shù)臄?shù)據(jù)塊。TCP 報文段的 header 信息中主要包含的是源和目標端口號蛙埂,至于說源和目標的 IP 地址信息則已經(jīng)包含在 IP header 信息中了倦畅。

TCP連接

三次握手

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

? TCP 將流量控制和其他一系列復雜機制結(jié)合起來進行擁塞控 制。需要處理以下問題:針對丟失的報文采用重發(fā)機制绣的,同時還需要動態(tài)的調(diào)整發(fā)送報文的頻率

終止連接

最終連接會終止(或結(jié)束)叠赐。連接的每一端都會發(fā)送 FIN 標識給另一端來聲明結(jié)束傳輸,接著另一端會對收到 FIN 進行確認屡江。當連接兩端均發(fā)送完各自 FIN 和做出相應(yīng)的確認后燎悍,連接將會徹底關(guān)閉。

HTTPS

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

基于 TLS 的 HTTP 請求就是 HTTPS宏怔。

基于HTTPS的請求奏路,在網(wǎng)絡(luò)安全方面有顯著的提升。但是請求會比較耗時臊诊。

綜合結(jié)論

有效的適應(yīng)連接
TCP連接容易在兩個時點出現(xiàn)問題:初始設(shè)置鸽粉,以及通過傳輸?shù)淖詈笠徊糠謭笪摹?/p>

建立連接

連接設(shè)置可能會比較耗時。TCP建立連接的過程中需要進行三次握手抓艳。這個過程中本身沒有太多的數(shù)據(jù)需要傳遞触机。但是,對于移動網(wǎng)絡(luò)來說玷或,從手機端向服務(wù)器端發(fā)送一個數(shù)據(jù)包普遍需要 250ms儡首,也就是四分之一秒。推及到三次握手偏友,也就是說在還沒有傳送任何數(shù)據(jù)之前蔬胯,光建立連接就要花費 750ms。
HTTPS 的情況更夸張位他,由于 HTTPS 是基于 TLS 的 HTTP氛濒,而 HTTP 又基于 TCP。TCP 連接就要執(zhí)行三次握手鹅髓,然后到了 TLS 層還會再握手三次舞竿。估算一下,建立一個 HTTPS 連接的耗時至少是創(chuàng)建一個 HTTP 連接的兩倍窿冯。如果 RTT 時間是 500ms(假設(shè)單程 250ms)骗奖,HTTPS 建立連接累計總耗時將達1.5秒。

長連接和管線化

HTTP有兩種策略來解決這些問題。最簡單的是HTTP持久連接重归,也被稱為長連接米愿。具體就是,每當HTTP完成一組請求相應(yīng)之后鼻吮,還會復用相同的TCP連接育苟。而HTTPS會復用同樣的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 管線 (pipelining) 處理,即允許客戶端利用同樣的連接并行發(fā)送多個請求椎木,也就是說無需等待上一個請求的響應(yīng)完成可以發(fā)下一個請求违柏。這表示能同時處理請求和響應(yīng),請求處理的順序采用先進先出原則香椎,響應(yīng)結(jié)果會按照請求發(fā)出的順序依次返還給客戶端漱竖。
稍微簡化一下,看起來會是這樣:

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)是實時的畜伐,不會等到接受全部請求才處理馍惹。
可以利用這個特點來提升 TCP 的效率。只需要在建立連接初始階段執(zhí)行握手玛界,而后一直復用同樣的連接万矾,這樣 TCP 就可以最大限度的利用帶寬。此種情況下慎框,擁塞控制也會隨之提升良狈。因為快速重發(fā)機制無法處理的最末四個報文丟失情況只會發(fā)生在使用本連接的最后一個請求-響應(yīng)中,而不是像之前那樣每一個請求-響應(yīng)都需要建立自己的連接笨枯,每個連接中都可能出現(xiàn)最后四個報文丟失的問題薪丁。

本文來源:鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市馅精,隨后出現(xiàn)的幾起案子严嗜,更是在濱河造成了極大的恐慌,老刑警劉巖硫嘶,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阻问,死亡現(xiàn)場離奇詭異梧税,居然都是意外死亡沦疾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門第队,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哮塞,“玉大人,你說我怎么就攤上這事凳谦∫涑” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵尸执,是天一觀的道長家凯。 經(jīng)常有香客問我缓醋,道長,這世上最難降的妖魔是什么绊诲? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任送粱,我火速辦了婚禮,結(jié)果婚禮上掂之,老公的妹妹穿的比我還像新娘抗俄。我一直安慰自己,他們只是感情好世舰,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布动雹。 她就那樣靜靜地躺著,像睡著了一般跟压。 火紅的嫁衣襯著肌膚如雪胰蝠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天震蒋,我揣著相機與錄音姊氓,去河邊找鬼。 笑死喷好,一個胖子當著我的面吹牛翔横,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梗搅,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼禾唁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了无切?” 一聲冷哼從身側(cè)響起荡短,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哆键,沒想到半個月后掘托,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡籍嘹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年闪盔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辱士。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡泪掀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颂碘,到底是詐尸還是另有隱情异赫,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站塔拳,受9級特大地震影響鼠证,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜靠抑,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一名惩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孕荠,春花似錦娩鹉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至个曙,卻和暖如春锈嫩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垦搬。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工呼寸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猴贰。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓对雪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親米绕。 傳聞我的和親對象是個殘疾皇子瑟捣,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

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