iOS 網(wǎng)絡(luò)編程(二)TCP協(xié)議小結(jié)


全稱

傳輸控制協(xié)議扛稽,Transmission Control Protocol

特點(diǎn)

  • T C P提供一種面向連接的、可靠的字節(jié)流服務(wù)
  • 面向連接意味著兩個(gè)使用T C P的應(yīng)用(通常是一個(gè)客戶和一個(gè)服務(wù)器悍汛,C/S)在彼此交換數(shù)據(jù)之前必須先建立一個(gè)T C P連接
  • 一個(gè)T C P連接中捞魁,僅有兩方進(jìn)行彼此通信

可靠性(檢錯(cuò)、應(yīng)答確認(rèn)离咐、數(shù)據(jù)錯(cuò)誤處理)

  • 應(yīng)用數(shù)據(jù)被分割成T C P認(rèn)為最適合發(fā)送的數(shù)據(jù)塊
  • 當(dāng)T C P發(fā)出一個(gè)段后谱俭,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段宵蛀。如果不能及時(shí)收到一個(gè)確認(rèn)昆著,將重發(fā)這個(gè)報(bào)文段
  • 當(dāng)T C P收到發(fā)自T C P連接另一端的數(shù)據(jù),它將發(fā)送一個(gè)確認(rèn)术陶。這個(gè)確認(rèn)不是立即發(fā)送凑懂,通常將推遲幾分之一秒
  • T C P將保持它首部和數(shù)據(jù)的檢驗(yàn)和。這是一個(gè)端到端的檢驗(yàn)和梧宫,目的是檢測(cè)數(shù)據(jù)在傳輸過(guò)程中的任何變化接谨。如果收到段的檢驗(yàn)和有差錯(cuò), T C P將丟棄這個(gè)報(bào)文段和不確認(rèn)收到此報(bào)文段(希望發(fā)端超時(shí)并重發(fā))
  • 如果必要塘匣, T C P將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序脓豪,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層(IP層數(shù)據(jù)數(shù)據(jù)失序的影響)
  • T C P的接收端必須丟棄重復(fù)的數(shù)據(jù)(IP層數(shù)據(jù)重復(fù)的影響)
  • T C P還能提供流量控制。T C P連接的每一方都有固定大小的緩沖空間忌卤,C P的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)扫夜。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出

字節(jié)流服務(wù)( byte stream service)

兩個(gè)應(yīng)用程序通過(guò)T C P連接交換8 bit字節(jié)構(gòu)成的字節(jié)流。T C P不在字節(jié)流中插入記錄標(biāo)識(shí)符

TCP結(jié)構(gòu)

封裝
首部埠巨,一般是20字節(jié)
  • 唯一的TCP連接历谍,每個(gè)T C P段都包含源端和目的端的端口號(hào),用于尋找發(fā)端和收端應(yīng)用進(jìn)程辣垒。這兩個(gè)值加上I P首部中的源端I P地址和目的端I P地址唯一確定一個(gè)T C P連接望侈。(有時(shí),一個(gè)I P地址和一個(gè)端口號(hào)也稱為一個(gè)插口( s o c k e t))

  • 序號(hào)用來(lái)標(biāo)識(shí)從T C P發(fā)端向T C P收端發(fā)送的數(shù)據(jù)字節(jié)流勋桶,它表示在這個(gè)報(bào)文段中的的第一個(gè)數(shù)據(jù)字節(jié)(序號(hào)是32 bit的無(wú)符號(hào)數(shù)脱衙,序號(hào)到達(dá)23 2-1后又從0開始)

  • U R G 緊急指針( u rgent pointer)有效(見(jiàn)2 0 . 8節(jié))。

A C K 確認(rèn)序號(hào)有效例驹。
P S H 接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層捐韩。
R S T 重建連接。
S Y N 同步序號(hào)用來(lái)發(fā)起一個(gè)連接鹃锈。這個(gè)標(biāo)志和下一個(gè)標(biāo)志將在第1 8章介紹荤胁。
F I N 發(fā)端完成發(fā)送任務(wù)。

  • T C P的流量控制由連接的每一端通過(guò)聲明的窗口大小來(lái)提供屎债。窗口大小為字節(jié)數(shù)仅政,起始于確認(rèn)序號(hào)字段指明的值垢油,這個(gè)值是接收端正期望接收的字節(jié)。窗口大小是一個(gè)16 bit字段圆丹,因而窗口大小最大為6 5 5 3 5字節(jié)

  • 檢驗(yàn)和覆蓋了整個(gè)的T C P報(bào)文段: T C P首部和T C P數(shù)據(jù)滩愁。這是一個(gè)強(qiáng)制性的字段,一定是由發(fā)端計(jì)算和存儲(chǔ)辫封,并由收端進(jìn)行驗(yàn)證

TCP連接的建立與終止

  • 傳說(shuō)中的三次握手(建立)
  1. 請(qǐng)求端(通常稱為客戶)發(fā)送一個(gè)S Y N段指明客戶打算連接的服務(wù)器的端口硝枉,以及初始序號(hào)(I S N,在這個(gè)例子中為1 4 1 5 5 3 1 5 2 1)倦微。這個(gè)S Y N段為報(bào)文段1妻味。

  2. 服務(wù)器發(fā)回包含服務(wù)器的初始序號(hào)的S Y N報(bào)文段(報(bào)文段2)作為應(yīng)答。同時(shí)璃诀,將確認(rèn)序號(hào)設(shè)置為客戶的I S N加1以對(duì)客戶的S Y N報(bào)文段進(jìn)行確認(rèn)弧可。一個(gè)S Y N將占用一個(gè)序號(hào)蔑匣。

  3. 客戶必須將確認(rèn)序號(hào)設(shè)置為服務(wù)器的I S N加1以對(duì)服務(wù)器的S Y N報(bào)文段進(jìn)行確認(rèn)(報(bào)文段3)劣欢。

三次握手
  • 傳說(shuō)中的四次握手(終止)

?為什么多了一次裁良,不對(duì)稱凿将?

原因是,由T C P的半關(guān)閉(h a l f - c l o s e)造成的价脾,本來(lái)是全雙工通信(兩邊都能發(fā)送和接收)牧抵,而進(jìn)行FIN發(fā)送(接收到這個(gè)表示沒(méi)有數(shù)據(jù)了)

半關(guān)閉:T C P提供了連接的一端在結(jié)束它的發(fā)送后還能接收來(lái)自另一端數(shù)據(jù)的能力

四次握手

TCP連接超時(shí)

所謂超時(shí),得有個(gè)參考時(shí)間吧侨把,當(dāng)然也得有個(gè)計(jì)時(shí)器件犀变!
一般新連接最長(zhǎng)請(qǐng)求時(shí)長(zhǎng)是75秒

定時(shí)器

TCP半關(guān)閉

作用就是,"我已經(jīng)完成了數(shù)據(jù)傳送秋柄,因此發(fā)送一個(gè)文件結(jié)束( F I N)給另一端获枝,但我還想接收另一端發(fā)來(lái)的數(shù)據(jù),直到它給我發(fā)來(lái)文件結(jié)束(F I N)"


半關(guān)閉

握手的狀態(tài)來(lái)自那里骇笔?

狀態(tài)變遷圖
打開和關(guān)閉

TCP數(shù)據(jù)流

組成:塊數(shù)據(jù)(用戶數(shù)據(jù)) + 交互數(shù)據(jù)

交互數(shù)據(jù)(發(fā)送一個(gè)字符為例)

  • 交互數(shù)據(jù)總是以小于最大報(bào)文段長(zhǎng)度的分組發(fā)送
交互數(shù)據(jù)小例
  • 經(jīng)受的時(shí)延確認(rèn)
    • 機(jī)理:通常T C P在接收到數(shù)據(jù)時(shí)并不立即發(fā)送A C K省店;相反,它推遲發(fā)送笨触,以便將A C K與需要沿該方向發(fā)送的數(shù)據(jù)一起發(fā)送(有時(shí)稱這種現(xiàn)象為數(shù)據(jù)捎帶A C K)懦傍。絕大多數(shù)實(shí)現(xiàn)采用的時(shí)延為200 ms,也就是說(shuō)芦劣,T C P將以最大200 ms 的時(shí)延等待是否有數(shù)據(jù)一起發(fā)送粗俱。
    • 目的:減少報(bào)文段的數(shù)目


      經(jīng)受時(shí)延
  • 用于這個(gè)處理的算法:N a g l e算法(廣域網(wǎng)環(huán)境下)
    • 要求一個(gè)T C P連接上最多只能有一個(gè)未被確認(rèn)的未完成的小分組,在該分組的確認(rèn)到達(dá)之前不能發(fā)送其他的小分組虚吟。相反寸认, T C P收集這些少量的分組娱俺,并在確認(rèn)到來(lái)時(shí)以一個(gè)分組的方式發(fā)出去。
    • 該算法的優(yōu)越之處在于它是自適應(yīng)的:確認(rèn)到達(dá)得越快废麻,數(shù)據(jù)也就發(fā)
      送得越快

塊數(shù)據(jù)

  • 使用的控制協(xié)議:滑動(dòng)窗口協(xié)議的另一種形式的流量控制方法荠卷。
    • 允許發(fā)送方在停止并等待確認(rèn)前可以連續(xù)發(fā)送多個(gè)分組。由于發(fā)送方不必每發(fā)一個(gè)分組就停下來(lái)等待確認(rèn)烛愧,因此該協(xié)議可以加速數(shù)據(jù)的傳輸
滑動(dòng)窗口協(xié)議
  • 窗口的變化(協(xié)議)
變化
  • 稱窗口左邊沿向右邊沿靠近為窗口合攏油宜。這種現(xiàn)象發(fā)生在數(shù)據(jù)被發(fā)送和確認(rèn)時(shí)。

  • 當(dāng)窗口右邊沿向右移動(dòng)時(shí)將允許發(fā)送更多的數(shù)據(jù)怜姿,我們稱之為窗口張開慎冤。這種現(xiàn)象發(fā)生在另一端的接收進(jìn)程讀取已經(jīng)確認(rèn)的數(shù)據(jù)并釋放了T C P的接收緩存時(shí)。

  • 當(dāng)右邊沿向左移動(dòng)時(shí)沧卢,我們稱之為窗口收縮蚁堤。Host Requirements RFC強(qiáng)烈建議不要使用這種方式。但T C P必須能夠在某一端產(chǎn)生這種情況時(shí)進(jìn)行處理但狭。

  • 變化的小例

窗口協(xié)議數(shù)據(jù)處理變化過(guò)程
  • 發(fā)送方不必發(fā)送一個(gè)全窗口大小的數(shù)據(jù)
  • 來(lái)自接收方的一個(gè)報(bào)文段確認(rèn)數(shù)據(jù)并把窗口向右邊滑動(dòng)披诗。這是因?yàn)榇翱诘拇笮∈窍鄬?duì)于確認(rèn)序號(hào)
  • 正如從報(bào)文段7到報(bào)文段8中變化的那樣,窗口的大小可以減小立磁,但是窗口的右邊沿卻不能夠向左移動(dòng)
  • 接收方在發(fā)送一個(gè)A C K前不必等待窗口被填滿
    ......
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呈队,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唱歧,更是在濱河造成了極大的恐慌宪摧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颅崩,死亡現(xiàn)場(chǎng)離奇詭異几于,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)沿后,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門沿彭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人得运,你說(shuō)我怎么就攤上這事膝蜈。” “怎么了熔掺?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵饱搏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我置逻,道長(zhǎng)推沸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鬓催,結(jié)果婚禮上肺素,老公的妹妹穿的比我還像新娘。我一直安慰自己宇驾,他們只是感情好倍靡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著课舍,像睡著了一般塌西。 火紅的嫁衣襯著肌膚如雪藕坯。 梳的紋絲不亂的頭發(fā)上肺缕,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天掩蛤,我揣著相機(jī)與錄音亲善,去河邊找鬼。 笑死喷斋,一個(gè)胖子當(dāng)著我的面吹牛培漏,可吹牛的內(nèi)容都是我干的兑巾。 我是一名探鬼主播损姜,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼饰剥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了薛匪?” 一聲冷哼從身側(cè)響起捐川,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逸尖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘸右,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娇跟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了太颤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苞俘。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖龄章,靈堂內(nèi)的尸體忽然破棺而出吃谣,到底是詐尸還是另有隱情,我是刑警寧澤做裙,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布岗憋,位于F島的核電站,受9級(jí)特大地震影響锚贱,放射性物質(zhì)發(fā)生泄漏仔戈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望监徘。 院中可真熱鬧晋修,春花似錦、人聲如沸凰盔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)户敬。三九已至趴拧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間山叮,已是汗流浹背著榴。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屁倔,地道東北人脑又。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锐借,于是被迫代替她去往敵國(guó)和親问麸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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