HTTP解析(3)------連接管理(1)

TCP連接

????????TCP/IP是全球計(jì)算機(jī)及網(wǎng)絡(luò)設(shè)備都在使用的一種常用的分組交換網(wǎng)絡(luò)分層協(xié)議集。客戶端應(yīng)用程序可以打開一條TCP / IP 連接毡证,連接到可能運(yùn)行在世界任何地方的服務(wù)器應(yīng)用程序舞虱。一旦連接建立起來(lái)气嫁,在客戶端和服務(wù)器的的計(jì)算機(jī)之間交互的報(bào)文就永遠(yuǎn)不會(huì)丟失、受損和失序冗疮。

????????一萄唇、TCP的可靠數(shù)據(jù)管道
?????????????????TCP為HTTP提供了一條可靠的比特傳輸管道。從TCP連接一端填入的字節(jié)會(huì)從另一端以原有的順序术幔、正確的傳送過(guò)來(lái)另萤。

Web瀏覽器通過(guò)TCP連接與Web服務(wù)器進(jìn)行交互

? ? ? ? 二、TCP流是分段的,由IP分組傳送? ???
????????????????TCP的數(shù)據(jù)是通過(guò)名為IP分組的小數(shù)據(jù)塊來(lái)發(fā)送的 ?? ??

HTTP和HTTPS網(wǎng)絡(luò)協(xié)議棧

? ? ? ????????? HTTP要傳送一條報(bào)文時(shí)四敞,會(huì)以流的形式將報(bào)文數(shù)據(jù)的內(nèi)容通過(guò)一條打開的TCP連接按序傳輸泛源。TCP收到數(shù)據(jù)流之后,會(huì)將數(shù)據(jù)流砍成被稱作段的小數(shù)據(jù)塊忿危,并將段封裝在IP分組中达箍,通過(guò)因特網(wǎng)進(jìn)行傳輸。每個(gè)IP分組包括(1癌蚁、IP分組首部【包含了源和目的IP地址幻梯、長(zhǎng)度和其他標(biāo)記】。2努释、TCP段首部【包含了TCP端口號(hào)碘梢、TCP控制標(biāo)記、以及用于數(shù)據(jù)排序和完整性檢查的數(shù)字值】伐蒂。3煞躬、TCP數(shù)據(jù)塊)。

? ? ? ? 三逸邦、保持TCP連接的正確運(yùn)行
????????????????TCP是通過(guò)端口號(hào)來(lái)保持所有這些連接的正確運(yùn)行恩沛。TCP連接是通過(guò)4個(gè)值來(lái)識(shí)別的:?<源IP地址、源端口號(hào)缕减、目的IP地址雷客、目的端口號(hào)>這四個(gè)值一起唯一地定義了一條連接,兩條不同的TCP連接不能擁有4個(gè)完全相同的地址組件值

承載TCP段的IP分組桥狡,它承載了TCP數(shù)據(jù)流中的小塊數(shù)據(jù)

? ? ? ? 四搅裙、用TCP套接字編程

對(duì)TCP連接進(jìn)行編程所需的常見套接字接口函數(shù)

? ? ? ? ? ? ? ? 套接字API允許用戶創(chuàng)建端點(diǎn)的數(shù)據(jù)結(jié)構(gòu)將這些端點(diǎn)與遠(yuǎn)程服務(wù)器的TCP端點(diǎn)進(jìn)行連接并對(duì)數(shù)據(jù)流進(jìn)行讀寫。

TCP客戶端與服務(wù)器是如何通過(guò)TCP套接字接口進(jìn)行通訊的

TCP性能的考慮

? ? ? ? HTTP緊挨著TCP裹芝,位于TCP的上層部逮,所以HTTP事務(wù)的性能在很大程度上取決于底層TCP通道的性能。

? ? ? ? 一嫂易、HTTP事務(wù)的時(shí)延

HTTP事務(wù)主要的連接兄朋、傳輸以及處理時(shí)延

????????HTTP的時(shí)延有一下幾種原因:(1)、客戶端首先需要根據(jù)URI確定Web服務(wù)器的IP地址和端口號(hào)怜械。(2)颅和、接下來(lái),客戶端會(huì)向服務(wù)器發(fā)送一條TCP連接請(qǐng)求缕允,并等待服務(wù)器回送一個(gè)請(qǐng)求接受應(yīng)答融虽。(3)、一旦連接建立起來(lái)了灼芭,客戶端就會(huì)通過(guò)新建立的TCP管道來(lái)發(fā)送HTTP請(qǐng)求有额。數(shù)據(jù)到達(dá)時(shí),Web服務(wù)器會(huì)從TCP連接中讀取請(qǐng)求報(bào)文,并對(duì)請(qǐng)求進(jìn)行處理巍佑。(4)茴迁、然后,Web服務(wù)器會(huì)回應(yīng)HTTP響應(yīng)萤衰。? ??? ??
? ? ? ? 【這些TCP網(wǎng)絡(luò)延時(shí)取決于硬件速度堕义,網(wǎng)絡(luò)或者服務(wù)器的負(fù)載,請(qǐng)求響應(yīng)報(bào)文的尺寸脆栋,客戶端與服務(wù)器距離倦卖,TCP技術(shù)的復(fù)雜性】

? ? ? ? 二、性能聚焦區(qū)域
? ? ? ? ? ? ? ? 最長(zhǎng)見的TCP時(shí)延:(1)TCP連接建立握手椿争;(2)TCP慢啟動(dòng)擁塞控制怕膛;(3)數(shù)據(jù)聚集的Nagle算法;(4)用于捎帶確認(rèn)的TCP延遲確認(rèn)算法秦踪;(5)TIME_WAIT時(shí)延和端口耗盡褐捻。

? ? ? ? 三、TCP連接的握手的時(shí)延

一條新的TCP連接在發(fā)送數(shù)據(jù)前椅邓,TCP要傳送兩個(gè)IP分組來(lái)建立連接

? ? ? ? TCP連接握手的步驟:
? ? ? ? ? ? ? ? (1)請(qǐng)求新的TCP連接時(shí)柠逞,客戶端要向服務(wù)器發(fā)送一個(gè)小的TCP分組(通常40~60字節(jié))。這個(gè)分組中設(shè)置了一個(gè)SYN標(biāo)記景馁,說(shuō)明這是一個(gè)連接請(qǐng)求板壮。
? ? ? ? ? ? ? ? (2)如果服務(wù)器接受了連接,就會(huì)對(duì)一些連接參數(shù)進(jìn)行計(jì)算合住,并向客戶端發(fā)送一個(gè)TCP分組绰精,這個(gè)分組中的SYN和ACK標(biāo)記都被置位,說(shuō)明連接請(qǐng)求已被接受聊疲。? ??? ??? ??
? ? ? ? ? ? ? ? (3)最后茬底,客戶端向服務(wù)器回送一條確認(rèn)消息沪悲,通知它連接已成功建立』裰蓿現(xiàn)代的TCP棧都允許客戶端在這個(gè)確認(rèn)分組中發(fā)送數(shù)據(jù)。

? ? ? ? 四殿如、延遲確認(rèn)
? ? ? ? ? ? ? ? 每個(gè)TCP段都有一個(gè)序列號(hào)和數(shù)據(jù)完整性校驗(yàn)和贡珊。每個(gè)段的接受者收到完好的段時(shí),都會(huì)向發(fā)送者回送小的確認(rèn)分組涉馁。如果發(fā)送者沒(méi)有在指定的窗口時(shí)間內(nèi)收到確認(rèn)信息门岔,發(fā)送者就認(rèn)為分組已經(jīng)被破壞或損毀,并重發(fā)數(shù)據(jù)烤送。由于確認(rèn)報(bào)文很小寒随,所以允許TCP相同方向輸出數(shù)據(jù)分組中對(duì)其進(jìn)行“捎帶”,TCP返回的確認(rèn)信息與輸出的數(shù)據(jù)分組結(jié)合在一起,更有效利用網(wǎng)絡(luò)妻往,為增加確認(rèn)報(bào)文找到同向傳輸數(shù)據(jù)分組的可能性互艾,TCP棧實(shí)現(xiàn)一種延時(shí)確認(rèn)算法。
? ? ? ? 延時(shí)確認(rèn)算法會(huì)在一個(gè)特定的窗口內(nèi)將輸出確認(rèn)放在緩沖區(qū)讯泣,以尋找能夠捎帶它的輸出數(shù)據(jù)分組纫普。如果在哪個(gè)時(shí)間段內(nèi)沒(méi)有輸出數(shù)據(jù)分組,就將確認(rèn)信息放在單獨(dú)的分組中傳送好渠。

? ? ? ? 五昨稼、TCP慢啟動(dòng)
? ? ? ? ? ? ? ? TCP數(shù)據(jù)傳輸?shù)男阅苓€取決于TCP連接的試用期。TCP連接會(huì)隨著時(shí)間進(jìn)行自我“調(diào)諧”拳锚,起初會(huì)限制連接的最大速度假栓,如果數(shù)據(jù)成功傳輸,會(huì)隨著時(shí)間的推移提高傳輸?shù)乃俣壬纬_@種調(diào)諧被稱為TCP慢啟動(dòng)但指,用于防止因特網(wǎng)的突然過(guò)載和擁塞。
? ? ? ? ? ? ? ? TCP慢啟動(dòng)限制了一個(gè)TCP端點(diǎn)在任意時(shí)刻可以傳輸?shù)姆纸M數(shù)抗楔。如果每個(gè)HTTP事務(wù)由大量數(shù)據(jù)發(fā)送棋凳,要先發(fā)送一個(gè)分組,確認(rèn)后在發(fā)送兩個(gè)分組连躏,并且每個(gè)分組都要進(jìn)行確認(rèn)剩岳,這種方式稱為“打開擁塞窗口”。

? ? ????六入热、Nagle算法與TCP_NODELAY
? ? ? ? ? ? ? ? Nagle算法試圖在發(fā)送一個(gè)分組之前拍棕,將大量TCP數(shù)據(jù)綁定在一起,以提高網(wǎng)絡(luò)效率勺良。Nagle算法鼓勵(lì)發(fā)送全尺寸的段绰播。只有當(dāng)所有其他分組都被確認(rèn)之后,Nagle算法才允許發(fā)送非全尺寸的分組尚困。如果其他分組仍然在傳輸過(guò)程中蠢箩,就將那部分?jǐn)?shù)據(jù)緩存起來(lái)。只有當(dāng)掛起分組被確認(rèn)事甜,或者緩存中基類了足夠發(fā)送一個(gè)全尺寸分組的數(shù)據(jù)時(shí)谬泌,才會(huì)將緩存的數(shù)據(jù)發(fā)送出去。
? ? ? ? ? ? ? ? HTTP應(yīng)用程序常常會(huì)在自己的棧中設(shè)置參數(shù)TCP_NODELAY逻谦,禁用Nagle算法掌实,提高性能。

? ? ? ? 七邦马、TIME_WAIT累積與端口耗盡
? ? ? ? ? ? ? ? 當(dāng)某個(gè)TCP端點(diǎn)關(guān)閉TCP連接時(shí)贱鼻,會(huì)在內(nèi)存中維護(hù)一個(gè)小的控制塊宴卖,用來(lái)記錄最近所關(guān)閉連接的IP地址和端口號(hào)。? ??? ??? ??? ??
? ? ? ? ? ? ? ? ?在只有一個(gè)客戶端和一臺(tái)Web服務(wù)器的異常情況下邻悬,構(gòu)建一條TCP連接的4個(gè)值
????????????????????????<source-IP-address, source-port, destination-IP-address, destination-port>
????????????????其中的三個(gè)都是固定的----只有源端口號(hào)可以隨意改變
????????????????????????<client-IP, source-port, server-IP, 80> ?
? ? ? ? ? ? ? ? ? ?客戶端每次連接到服務(wù)器上去時(shí)嘱腥,都會(huì)獲得一個(gè)新的源端口,以實(shí)現(xiàn)連接的唯一性拘悦。即使沒(méi)有遇到端口耗盡問(wèn)題齿兔,也要特別小心有大量連接處于打開狀態(tài)的情況,或?yàn)樘幱诘却隣顟B(tài)的連接分配了大量控制塊的情況础米。再有大量打開連接或控制塊的情況下分苇,有些操作系統(tǒng)的速度會(huì)嚴(yán)重減緩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屁桑,一起剝皮案震驚了整個(gè)濱河市医寿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蘑斧,老刑警劉巖靖秩,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竖瘾,居然都是意外死亡沟突,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門捕传,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惠拭,“玉大人,你說(shuō)我怎么就攤上這事庸论≈案ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵聂示,是天一觀的道長(zhǎng)域携。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鱼喉,這世上最難降的妖魔是什么秀鞭? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蒲凶,結(jié)果婚禮上气筋,老公的妹妹穿的比我還像新娘拆内。我一直安慰自己旋圆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布麸恍。 她就那樣靜靜地躺著灵巧,像睡著了一般搀矫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刻肄,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天瓤球,我揣著相機(jī)與錄音,去河邊找鬼敏弃。 笑死卦羡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的麦到。 我是一名探鬼主播绿饵,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓶颠!你這毒婦竟也來(lái)了拟赊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粹淋,失蹤者是張志新(化名)和其女友劉穎吸祟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桃移,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屋匕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了借杰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炒瘟。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖第步,靈堂內(nèi)的尸體忽然破棺而出疮装,到底是詐尸還是另有隱情,我是刑警寧澤粘都,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布廓推,位于F島的核電站,受9級(jí)特大地震影響翩隧,放射性物質(zhì)發(fā)生泄漏樊展。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一堆生、第九天 我趴在偏房一處隱蔽的房頂上張望专缠。 院中可真熱鬧,春花似錦淑仆、人聲如沸涝婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)墩弯。三九已至吩跋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渔工,已是汗流浹背锌钮。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留引矩,地道東北人梁丘。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旺韭,于是被迫代替她去往敵國(guó)和親兰吟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 18.1 引言 TCP是一個(gè)面向連接的協(xié)議茂翔。無(wú)論哪一方向另一方發(fā)送數(shù)據(jù)之前混蔼,都必須先在雙方之間建立一條連接。本章將...
    張芳濤閱讀 3,344評(píng)論 0 13
  • 1.這篇文章不是本人原創(chuàng)的珊燎,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的惭嚣,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,037評(píng)論 6 174
  • 運(yùn)輸層協(xié)議概述 從通信和信息處理的角度看,運(yùn)輸層向它上面的應(yīng)用層提供通信服務(wù)悔政,它屬于面向通信部分的最高層晚吞,同時(shí)也是...
    srtianxia閱讀 2,392評(píng)論 0 2
  • 1.OkHttp源碼解析(一):OKHttp初階2 OkHttp源碼解析(二):OkHttp連接的"前戲"——HT...
    隔壁老李頭閱讀 20,813評(píng)論 24 176
  • 001匱乏陷阱:如果把我們的總精力和總時(shí)間比作一個(gè)大盒子,如何分配合理是非常值得思考的谋国。好比如何將時(shí)間和精力最大價(jià)...
    米十七閱讀 377評(píng)論 0 1