[081]由TCP/IP協(xié)議想到的思想

TCP/IP協(xié)議場(chǎng)景

說(shuō)道TCP/IP協(xié)議想起了計(jì)算機(jī)網(wǎng)絡(luò)書(shū)中舉了一個(gè)紅藍(lán)軍的通訊的問(wèn)題。其場(chǎng)景如下:

紅藍(lán)軍需要聯(lián)手干掉山坡下敵人埂软,雙方約定某個(gè)時(shí)間一起進(jìn)攻。

紅軍 <-------------> 藍(lán)軍

   -----A:下午5點(diǎn)進(jìn)攻-->
   <---A+ack:收到消息---
   -----A+ack+ack:----

由于任何一次通信都可能中斷所灸,通訊次數(shù)越多概率越大炫七。于是在通訊可靠性和時(shí)間上做了一個(gè)折中,根據(jù)理論計(jì)算至少需要3次握手概率才達(dá)到比較滿(mǎn)意的水平侠驯。

TCP協(xié)議本質(zhì)上解決是不可靠信道上需要可靠傳輸信息的需求

如果信道是可靠的那么奕巍,那么不需要建立連接直接發(fā)送數(shù)據(jù)包也能夠確保到達(dá)。但是實(shí)際網(wǎng)絡(luò)中信道是不可靠的檩坚,需要通過(guò)3次握手來(lái)確定一條比較可靠的信道诅福。

所以TCP連接建立后,都是沿同一條鏈路發(fā)送消息么赂乐?

連接釋放為什么需要4次握手

通過(guò)4次握手的目的是確保通信雙方都釋放了連接咖气,這樣都不在發(fā)送數(shù)據(jù)包(防止網(wǎng)絡(luò)上有大量的無(wú)用數(shù)據(jù)包,會(huì)增加網(wǎng)絡(luò)的擁塞)浅役。

TCP 序列號(hào)和確認(rèn)號(hào)詳解

TCP 通訊涉及到 客戶(hù)端 client 和服務(wù)端 server悯舟,我們根據(jù)建立連接、發(fā)送數(shù)據(jù)奋救、釋放連接 3個(gè)階段來(lái)描述序列號(hào)和確認(rèn)號(hào)生成過(guò)程反惕。

連接建立階段大體上是,確認(rèn)號(hào)=對(duì)方的序列號(hào)+1背亥,序列號(hào)(除了第一次)=對(duì)方的確認(rèn)號(hào)
客戶(hù)端 服務(wù)端
序列號(hào)J | 確認(rèn)號(hào)0 |置SYN標(biāo)識(shí) ---->
<---- 序列號(hào)k | 確認(rèn)號(hào)J+1 | 置SYN和ACK標(biāo)識(shí)
序列號(hào)J+1| 確認(rèn)號(hào) k+1 | 置ACK標(biāo)識(shí) ---->

數(shù)據(jù)傳輸階段大體上是,確認(rèn)號(hào)=對(duì)方序列號(hào) + 數(shù)據(jù)報(bào)文長(zhǎng)度,序列號(hào)= 對(duì)方確認(rèn)號(hào)

TCP 協(xié)議的狀態(tài)遷移

TCP建立連接一般是服務(wù)器啟動(dòng)服務(wù)進(jìn)行監(jiān)聽(tīng)娄徊,處理客戶(hù)端發(fā)過(guò)來(lái)的請(qǐng)求盾戴。
其狀態(tài)流轉(zhuǎn)是:
client:close -> SYN-SEND -> ESTABLISH
server: close -> LISTEN -> SYN-RECV -> ESTABLISH

連接釋放尖啡,我們以客戶(hù)端主動(dòng)斷開(kāi)連接為例。
客戶(hù)端 服務(wù)端
發(fā)送報(bào)文 FIN_WAIT1 --> 此時(shí)服務(wù)器 CLOSE_WAIT(被動(dòng)關(guān)閉)
FIN_WAIT2 <-- 服務(wù)器 ACK到客戶(hù)端
TIME_WAIT (接收到最后確認(rèn)后衅斩,客戶(hù)端進(jìn)入TIME——WAIT) <--- 再一次確認(rèn) LASTACK
當(dāng)客戶(hù)端等待2MSL后 發(fā)送ack 到服務(wù)端 --> close狀態(tài)了

實(shí)際連接釋放可以分為兩個(gè)階段畏梆,第一階段:半連接 ,第二階段:服務(wù)端也釋放具温。
第一階段:
客戶(hù)端 發(fā)送fin報(bào)文 ---> 服務(wù)端
FIN_WAIT2 <---- ACK 報(bào)文
FIN_WAIT2 狀態(tài)就是半連接的狀態(tài)铣猩,表示客戶(hù)端已經(jīng)斷開(kāi)連接茴丰,服務(wù)端還有一些數(shù)據(jù)要發(fā)送。

第二階段:
過(guò)了一段時(shí)間峦椰,服務(wù)端沒(méi)有數(shù)據(jù)要發(fā)送了汰规。
此時(shí):
TIME_WAIT <--- 服務(wù)端發(fā)送FIN 報(bào)文 進(jìn)入LAST_ACk狀態(tài) (服務(wù)端在發(fā)送了FIN后等待 MSL如果沒(méi)有收到ACK則會(huì)重傳FIN消息)
客戶(hù)端發(fā)送 ACK ---> 服務(wù)端
客戶(hù)端發(fā)出ACK后,等待ACK到達(dá)對(duì)方的超時(shí)時(shí)間MSL滔金,等待FIN重傳時(shí)間也是MSL茂嗓,所以如果客戶(hù)端2MSL時(shí)間段內(nèi)沒(méi)有收到FIN報(bào)文表示 服務(wù)端已經(jīng)收到了ACK報(bào)文(已經(jīng)關(guān)閉了)。

用概率來(lái)衡量不確定的東西

從“背景”那里分析忿族,握手次數(shù)越多越好概率越高。但是實(shí)際情況下是可靠性和時(shí)效性之間的折中错英。而對(duì)于這些不確定的事情隆豹,我們最好的思路是以概率的方式來(lái)思考(而不是強(qiáng)迫癥似的想100%)。

同樣在微服務(wù)框架中簿煌,通過(guò)兩臺(tái)機(jī)器提供負(fù)載均衡鉴吹。這樣系統(tǒng)可用性為 p = 1-p1*p1,p1為系統(tǒng)宕機(jī)的概率。

思想的運(yùn)用

TCP/IP 會(huì)有超時(shí)重傳的機(jī)制夺荒,每發(fā)一段報(bào)文的時(shí)候會(huì)設(shè)置一個(gè)超時(shí)時(shí)間良蒸,如果超時(shí)會(huì)重發(fā)報(bào)文。

在我們的支付系統(tǒng)中剿吻,系統(tǒng)與系統(tǒng)之間的交互也是類(lèi)似的思想串纺。拿下單來(lái)舉例:
網(wǎng)關(guān) client .................... server 銀行(比如支付寶)
ewallet 下單 ---> 發(fā)報(bào)文到銀行
<--- 同步返回/或者異步通知 (ack) 纺棺,如果client timeout內(nèi)沒(méi)有接收到ack報(bào)文,則通過(guò)定時(shí)任務(wù)掃描網(wǎng)關(guān)中非success 的訂單祷蝌,調(diào)用查詢(xún)接口(查詢(xún)狀態(tài))巨朦。
---> response.write("success") (ack+ack) ,同樣罪郊,如果server沒(méi)有收到ack+ack 報(bào)文悔橄,則會(huì)重傳 ack報(bào)文(即重新異步通知)腺毫。

參考:

http://www.cnblogs.com/chenboo/archive/2011/12/19/2293327.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潮酒,一起剝皮案震驚了整個(gè)濱河市邪蛔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勃教,老刑警劉巖匠抗,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绳军,居然都是意外死亡矢腻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)奶是,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顷蟆,“玉大人帐偎,你說(shuō)我怎么就攤上這事蛔屹。” “怎么了漫贞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵育叁,是天一觀的道長(zhǎng)豪嗽。 經(jīng)常有香客問(wèn)我谴蔑,道長(zhǎng)豌骏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任隐锭,我火速辦了婚禮窃躲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钦睡。我一直安慰自己蒂窒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布荞怒。 她就那樣靜靜地躺著洒琢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐桌。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天撩嚼,我揣著相機(jī)與錄音停士,去河邊找鬼。 笑死完丽,一個(gè)胖子當(dāng)著我的面吹牛恋技,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻族,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜻底,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了聘鳞?” 一聲冷哼從身側(cè)響起薄辅,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抠璃,沒(méi)想到半個(gè)月后站楚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搏嗡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年窿春,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片采盒。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旧乞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磅氨,到底是詐尸還是另有隱情尺栖,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布烦租,位于F島的核電站延赌,受9級(jí)特大地震影響货徙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皮胡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一痴颊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屡贺,春花似錦蠢棱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至量没,卻和暖如春玉转,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殴蹄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工究抓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袭灯。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓刺下,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稽荧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子橘茉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記姨丈,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評(píng)論 0 8
  • 1.這篇文章不是本人原創(chuàng)的畅卓,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,069評(píng)論 6 174
  • 18.1 引言 TCP是一個(gè)面向連接的協(xié)議蟋恬。無(wú)論哪一方向另一方發(fā)送數(shù)據(jù)之前翁潘,都必須先在雙方之間建立一條連接。本章將...
    張芳濤閱讀 3,383評(píng)論 0 13
  • 最近在惡補(bǔ)計(jì)算機(jī)網(wǎng)絡(luò)方面的知識(shí)筋现,之前對(duì)于TCP的三次握手和四次分手也是模模糊糊唐础,對(duì)于其中的細(xì)節(jié)更是渾然不知,最近看...
    微醺歲月閱讀 9,532評(píng)論 4 128
  • 1矾飞、TCP狀態(tài)linux查看tcp的狀態(tài)命令:1)、netstat -nat 查看TCP各個(gè)狀態(tài)的數(shù)量2)呀邢、lso...
    北辰青閱讀 9,427評(píng)論 0 11