TCP的三次握手(建立連接)與 四次揮手(關(guān)閉連接)

一掉冶、TCP報(bào)文格式

TCP/IP協(xié)議的詳細(xì)信息參看《TCP/IP協(xié)議詳解》三卷本真竖。下面是TCP報(bào)文格式圖:



TCP報(bào)文格式上圖中有幾個(gè)字段需要重點(diǎn)介紹下:

  • (1)序號(hào):Seq序號(hào),占32位厌小,用來(lái)標(biāo)識(shí)從TCP源端向目的端發(fā)送的字節(jié)流恢共,發(fā)起方發(fā)送數(shù)據(jù)時(shí)對(duì)此進(jìn)行標(biāo)記。
  • (2)確認(rèn)序號(hào):Ack序號(hào)召锈,占32位,只有ACK標(biāo)志位為1時(shí)拐袜,確認(rèn)序號(hào)字段才有效蹬铺,Ack=Seq+1秉撇。
  • (3)標(biāo)志位:共6個(gè),即URG规阀、ACK瘦麸、PSH、RST厉碟、SYN箍鼓、FIN等呵曹,具體含義如下:
    • (A)URG:緊急指針(urgent pointer)有效。
    • (B)ACK:確認(rèn)序號(hào)有效之剧。
    • (C)PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層砍聊。
    • (D)RST:重置連接。
    • (E)SYN:發(fā)起一個(gè)新連接蟹肘。
    • (F)FIN:釋放一個(gè)連接。

需要注意的是:

  • (A)標(biāo)志位中的ACK贰盗、與確認(rèn)序號(hào)Ack是不同的阳欲;
  • (B)確認(rèn)序號(hào)Ack=發(fā)起方Seq+1 兩端配對(duì);

三次握手(three times handshake)即建立TCP連接秽晚,就是指建立一個(gè)TCP連接時(shí)赴蝇,需要客戶(hù)端和服務(wù)端總共發(fā)送3個(gè)包用來(lái)客戶(hù)端與服務(wù)端TCP連接的建立巢掺;

二、三次握手過(guò)程

(1)第一次握手:Client將標(biāo)志位SYN置為1考余,隨機(jī)產(chǎn)生一個(gè)值seq=X楚堤,并將該數(shù)據(jù)包發(fā)送給Server浸剩,Client進(jìn)入SYN_SENT狀態(tài)鳄袍,等待Server確認(rèn)。

(2)第二次握手:Server收到數(shù)據(jù)包后由標(biāo)志位SYN=1知道Client請(qǐng)求建立連接重罪,Server將標(biāo)志位SYN和ACK都置為1哀九,ack numbern=X+1阅束,隨機(jī)產(chǎn)生一個(gè)值seq=Y,并將該數(shù)據(jù)包發(fā)送給Client以確認(rèn)連接請(qǐng)求蝇更,Server進(jìn)入SYN_RCVD狀態(tài)。

(3)第三次握手:Client收到確認(rèn)后年扩,檢查ack number是否為X+1,ACK是否為1相嵌,如果正確則將標(biāo)志位ACK置為1况脆,ack=Y+1漠另,并將該數(shù)據(jù)包發(fā)送給Server,Server檢查ack是否為Y+1性湿,ACK是否為1满败,如果正確則連接建立成功,Client和Server進(jìn)入ESTABLISHED狀態(tài)宵荒,完成三次握手净嘀,隨后Client與Server之間可以開(kāi)始傳輸數(shù)據(jù)了。

如圖主要是根據(jù) ACK 與Ack number暑刃;

三岩臣、TCP四次揮手

由于TCP連接時(shí)全雙工的宵膨,因此,每個(gè)方向都必須要單獨(dú)進(jìn)行關(guān)閉谷扣,這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)后捎琐,發(fā)送一個(gè)FIN來(lái)終止這一方向的連接涯曲,收到一個(gè)FIN只是意味著這一方向上沒(méi)有數(shù)據(jù)流動(dòng)了幻件,即不會(huì)再收到數(shù)據(jù)了绰沥,但是在這個(gè)TCP連接上仍然能夠發(fā)送數(shù)據(jù)贺待,直到這一方向也發(fā)送了FIN。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉秃臣,而另一方則執(zhí)行被動(dòng)關(guān)閉哪工;


(1)第一次揮手:Client發(fā)送一個(gè)FIN雁比,用來(lái)關(guān)閉Client到Server的數(shù)據(jù)傳送,Client進(jìn)入FIN_WAIT_1狀態(tài)蠢终,將標(biāo)志位FIN和ACK置為1茴她,序號(hào)為X,確認(rèn)序號(hào)為Z=1;

(2)第二次揮手:Server收到FIN后祭钉,發(fā)回一個(gè)ACK給Client朴皆,ACK(標(biāo)志位ACK=1),確認(rèn)序號(hào)為收到的序號(hào)加1泛粹,ack=X+1;

(3)第三次揮手:Server發(fā)送一個(gè)FIN肮疗,用來(lái)關(guān)閉Server到Client的數(shù)據(jù)傳送,Server進(jìn)入LAST_ACK狀態(tài),將標(biāo)志位FIN和ACK置為1们衙,序號(hào)為Y,,確認(rèn)序號(hào)為收到的序號(hào)加1宗侦,ack=X+1;

(4)第四次揮手:Client收到FIN后忆蚀,Client進(jìn)入TIME_WAIT狀態(tài),發(fā)回ACK確認(rèn)(標(biāo)志位ACK=1),確認(rèn)序號(hào)為收到的序號(hào)加1 ack=Y+1;

為什么連接的時(shí)候是三次握手男旗,關(guān)閉的時(shí)候卻是四次握手?

為什么需要三次握手

在謝希仁著《計(jì)算機(jī)網(wǎng)絡(luò)》第四版中講“三次握手”的目的是“為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了服務(wù)端欣鳖,因而產(chǎn)生錯(cuò)誤”。在另一部經(jīng)典的《計(jì)算機(jī)網(wǎng)絡(luò)》一書(shū)中講“三次握手”的目的是為了解決“網(wǎng)絡(luò)中存在延遲的重復(fù)分組”的問(wèn)題什荣。這兩種不用的表述其實(shí)闡明的是同一個(gè)問(wèn)題溃睹。
謝希仁版《計(jì)算機(jī)網(wǎng)絡(luò)》中的例子是這樣的胰坟,“已失效的連接請(qǐng)求報(bào)文段”的產(chǎn)生在這樣一種情況下:client發(fā)出的第一個(gè)連接請(qǐng)求報(bào)文段并沒(méi)有丟失,而是在某個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)長(zhǎng)時(shí)間的滯留了竞滓,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)server商佑。本來(lái)這是一個(gè)早已失效的報(bào)文段厢塘。但server收到此失效的連接請(qǐng)求報(bào)文段后,就誤認(rèn)為是client再次發(fā)出的一個(gè)新的連接請(qǐng)求抓半。于是就向client發(fā)出確認(rèn)報(bào)文段格嘁,同意建立連接。假設(shè)不采用“三次握手”探入,那么只要server發(fā)出確認(rèn),新的連接就建立了苗膝。由于現(xiàn)在client并沒(méi)有發(fā)出建立連接的請(qǐng)求荚醒,因此不會(huì)理睬server的確認(rèn)隆嗅,也不會(huì)向server發(fā)送數(shù)據(jù)。但server卻以為新的運(yùn)輸連接已經(jīng)建立泡躯,并一直等待client發(fā)來(lái)數(shù)據(jù)丽焊。這樣,server的很多資源就白白浪費(fèi)掉了写穴。采用“三次握手”的辦法可以防止上述現(xiàn)象發(fā)生雌贱。例如剛才那種情況,client不會(huì)向server的確認(rèn)發(fā)出確認(rèn)馋没。server由于收不到確認(rèn)降传,就知道client并沒(méi)有要求建立連接∑排牛”。主要目的防止server端一直等待腮猖,浪費(fèi)資源翼悴。

為什么需要四次揮手

因是因?yàn)閠cp是全雙工模式,接收到FIN時(shí)意味將沒(méi)有數(shù)據(jù)再發(fā)來(lái)谍椅,但是還是可以繼續(xù)發(fā)送數(shù)據(jù)古话。

來(lái)源:http://www.cnblogs.com/CandyManPing/p/6626661.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陪踩,一起剝皮案震驚了整個(gè)濱河市肩狂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孝治,老刑警劉巖审磁,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件态蒂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钾恢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)刑桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祠斧,“玉大人,你說(shuō)我怎么就攤上這事琢锋∥獬” “怎么了鸯乃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵跋涣,是天一觀的道長(zhǎng)陈辱。 經(jīng)常有香客問(wèn)我细诸,道長(zhǎng),這世上最難降的妖魔是什么利赋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任猩系,我火速辦了婚禮,結(jié)果婚禮上季希,老公的妹妹穿的比我還像新娘幽纷。我一直安慰自己,他們只是感情好峰尝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著榛斯,像睡著了一般阴绢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天票编,我揣著相機(jī)與錄音卵渴,去河邊找鬼。 笑死昔榴,一個(gè)胖子當(dāng)著我的面吹牛辛藻,可吹牛的內(nèi)容都是我干的吱肌。 我是一名探鬼主播屁奏,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坟瓢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼折联!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起诚镰,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤清笨,失蹤者是張志新(化名)和其女友劉穎刃跛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桨昙,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛙酪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凹蜂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阁危。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欲芹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菱父,到底是詐尸還是另有隱情剑逃,我是刑警寧澤蛹磺,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布同仆,位于F島的核電站,受9級(jí)特大地震影響俗或,放射性物質(zhì)發(fā)生泄漏辛慰。R本人自食惡果不足惜干像,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望速客。 院中可真熱鬧五鲫,春花似錦、人聲如沸辅愿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)癞埠。三九已至苗踪,卻和暖如春削锰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背器贩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留部服,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓廓八,卻偏偏與公主長(zhǎng)得像剧蹂,于是被迫代替她去往敵國(guó)和親昌讲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子国夜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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