TCP連接的建立與關(guān)閉過程

TCP連接的建立與關(guān)閉過程可以概括為“三次握手粪躬,四次揮手”,但是具體的過程還是很復(fù)雜殿托,也很難記住霹菊,就寫下來幫助記憶吧。

先看圖片

TCP連接建立與關(guān)閉的簡單過程

這是《圖解TCP_IP》的一張圖支竹,很簡單旋廷,但是沒有具體的過程和狀態(tài)轉(zhuǎn)換。


TCP狀態(tài)轉(zhuǎn)換圖

這張圖比較詳細(xì)唾戚,就針對這張圖詳細(xì)分析一下TCP的狀態(tài)轉(zhuǎn)換柳洋,實(shí)線代表客戶端,虛線代表服務(wù)器叹坦。

建立連接過程分析

第一次握手:建立連接時(shí)熊镣,客戶端到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài)募书,等待服務(wù)器確認(rèn)绪囱;SYN:同步序列編號(Synchronize Sequence Numbers)。這里注意:請求建立連接的一般都是客戶端程序莹捡,而服務(wù)器空閑時(shí)處于LISTEN狀態(tài)鬼吵。

第二次握手
服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1)篮赢,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)齿椅,即SYN+ACK包琉挖,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);RST:表示出現(xiàn)異常要強(qiáng)制斷開連接涣脚。這里貼出全部8個(gè)控制位及其含義示辈。


控制位(圖解TCP_IP)

第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)遣蚀,此包發(fā)送完畢矾麻,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手芭梯。

TCP連接建立過程總結(jié)

客戶端狀態(tài):發(fā)送syn進(jìn)入SYN_SENT→接收SYN,ACK并發(fā)送ACK進(jìn)入ESTABLISHED狀態(tài)次乓。
服務(wù)器狀態(tài):接受SYN發(fā)送SYN,ACK進(jìn)入SYN_RCVD→接收ACK進(jìn)入ESTABLISHED狀態(tài)或接受RST斷開連接吏垮。

關(guān)閉連接過程分析

第一次揮手:主動關(guān)閉方發(fā)送一個(gè)FIN進(jìn)入FIN_WAIT_1,用來關(guān)閉主動方到被動關(guān)閉方的數(shù)據(jù)傳送,也就是主動關(guān)閉方告訴被動關(guān)閉方:我已經(jīng)不 會再給你發(fā)數(shù)據(jù)了(當(dāng)然轰胁,在fin包之前發(fā)送出去的數(shù)據(jù)映挂,如果沒有收到對應(yīng)的ack確認(rèn)報(bào)文浮驳,主動關(guān)閉方依然會重發(fā)這些數(shù)據(jù))物延,但是,此時(shí)主動關(guān)閉方還可以接受數(shù)據(jù)费尽。

第二次揮手:被動關(guān)閉方收到FIN包后赠群,發(fā)送一個(gè)ACK給對方,確認(rèn)序號為收到序號+1(與SYN相同旱幼,一個(gè)FIN占用一個(gè)序號)查描。

第三次揮手:被動關(guān)閉方發(fā)送一個(gè)FIN,用來關(guān)閉被動關(guān)閉方到主動關(guān)閉方的數(shù)據(jù)傳送柏卤,也就是告訴主動關(guān)閉方冬三,我的數(shù)據(jù)也發(fā)送完了,不會再給你發(fā)數(shù)據(jù)了缘缚。

第四次揮手:主動關(guān)閉方收到FIN后勾笆,發(fā)送一個(gè)ACK給被動關(guān)閉方,確認(rèn)序號為收到序號+1桥滨,至此窝爪,完成四次揮手。

注意:1.設(shè)置2MSL超時(shí)的原因:如果直接關(guān)閉齐媒,而服務(wù)器沒有接收到最后一個(gè)ACK蒲每,服務(wù)器會重發(fā)FIN,此時(shí)客戶端已經(jīng)關(guān)閉喻括,服務(wù)器會認(rèn)為連接發(fā)生錯(cuò)誤邀杏,而事實(shí)上此時(shí)已經(jīng)客戶端已經(jīng)正確關(guān)閉。
2.FIN_WAIT_2狀態(tài)不一定進(jìn)入唬血。服務(wù)器和客戶端可能同時(shí)關(guān)閉望蜡,不進(jìn)入FIN_WAIT_2狀態(tài)唤崭。

關(guān)閉連接總結(jié)

客戶端:發(fā)送FIN進(jìn)入FIN_WAIT_1狀態(tài)客(客戶端停止發(fā)送數(shù)據(jù))→不同時(shí)關(guān)閉則接受ACK進(jìn)入FIN_WAIT_2等待服務(wù)器關(guān)閉(或同時(shí)關(guān)閉進(jìn)入TIME_WAIT)→接受到服務(wù)器發(fā)送的FIN進(jìn)入TIME_WAIT(服務(wù)器停止發(fā)送數(shù)據(jù))→等待2MSL→CLOSED
服務(wù)器:接受FIN發(fā)送ACK進(jìn)入CLOSE_WAIT→發(fā)送FIN等待ACK進(jìn)入LAST_ACK→接收ACK進(jìn)入CLOSED

其他問題

(牛客網(wǎng))
TCP的三次握手過程泣特?為什么會采用三次握手浩姥,若采用二次握手可以嗎?

答:建立連接的過程是利用客戶服務(wù)器模式状您,假設(shè)主機(jī)A為客戶端,主機(jī)B為服務(wù)器端兜挨。
(1)TCP的三次握手過程:主機(jī)A向B發(fā)送連接請求膏孟;主機(jī)B對收到的主機(jī)A的報(bào)文段進(jìn)行確認(rèn);主機(jī)A再次對主機(jī)B的確認(rèn)進(jìn)行確認(rèn)拌汇。
(2)采用三次握手是為了防止失效的連接請求報(bào)文段突然又傳送到主機(jī)B柒桑,因而產(chǎn)生錯(cuò)誤。失效的連接請求報(bào)文段是指:主機(jī)A發(fā)出的連接請求沒有收到主機(jī)B的確認(rèn)噪舀,于是經(jīng)過一段時(shí)間后魁淳,主機(jī)A又重新向主機(jī)B發(fā)送連接請求,且建立成功与倡,順序完成數(shù)據(jù)傳輸界逛。考慮這樣一種特殊情況纺座,主機(jī)A第一次發(fā)送的連接請求并沒有丟失息拜,而是因?yàn)榫W(wǎng)絡(luò)節(jié)點(diǎn)導(dǎo)致延遲達(dá)到主機(jī)B,主機(jī)B以為是主機(jī)A又發(fā)起的新連接净响,于是主機(jī)B同意連接少欺,并向主機(jī)A發(fā)回確認(rèn),但是此時(shí)主機(jī)A根本不會理會馋贤,主機(jī)B就一直在等待主機(jī)A發(fā)送數(shù)據(jù)赞别,導(dǎo)致主機(jī)B的資源浪費(fèi)。
(3)采用兩次握手不行配乓,原因就是上面說的實(shí)效的連接請求的特殊情況仿滔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市扰付,隨后出現(xiàn)的幾起案子堤撵,更是在濱河造成了極大的恐慌,老刑警劉巖羽莺,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实昨,死亡現(xiàn)場離奇詭異,居然都是意外死亡盐固,警方通過查閱死者的電腦和手機(jī)荒给,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門丈挟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人志电,你說我怎么就攤上這事曙咽。” “怎么了挑辆?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵例朱,是天一觀的道長。 經(jīng)常有香客問我鱼蝉,道長洒嗤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任魁亦,我火速辦了婚禮渔隶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洁奈。我一直安慰自己间唉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布利术。 她就那樣靜靜地躺著呈野,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氯哮。 梳的紋絲不亂的頭發(fā)上际跪,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音喉钢,去河邊找鬼姆打。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肠虽,可吹牛的內(nèi)容都是我干的幔戏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼税课,長吁一口氣:“原來是場噩夢啊……” “哼闲延!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起韩玩,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤垒玲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后找颓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合愈,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佛析。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片益老。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寸莫,靈堂內(nèi)的尸體忽然破棺而出捺萌,到底是詐尸還是另有隱情,我是刑警寧澤膘茎,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布桃纯,位于F島的核電站,受9級特大地震影響披坏,放射性物質(zhì)發(fā)生泄漏慈参。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一刮萌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娘扩,春花似錦着茸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至灰殴,卻和暖如春敬特,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牺陶。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工伟阔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掰伸。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓皱炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狮鸭。 傳聞我的和親對象是個(gè)殘疾皇子合搅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

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