TCP 三次握手和四次揮手以及11種狀態(tài)

image.png
image.png

置位概念:根據(jù) TCP 的包頭字段叼架,存在幾個(gè)重要的字段

  • seq(Sequence Number 序號/序列號):seq 序號隨機(jī)生成
  • ack(Acknowledgement number 確認(rèn)號):ack 序號
  • URG:緊急指針有效
  • ACK:驗(yàn)證 ack 確認(rèn)號有效(為了與確認(rèn)號 ack 區(qū)分開呐粘,我們用大寫表示)
  • PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層
  • RST:重置連接
  • SYN(同步序列編號):位數(shù)置 1新荤,表示建立 TCP 連接
  • FIN:位數(shù)置 1思币,表示斷開 TCP 連接
1棵红、三次握手(three-way handshake)
image.png
三次握手過程說明
  • 1噪舀、由客戶端發(fā)送建立 TCP 連接請求的 SYN 報(bào)文垢油,其中報(bào)文中包含 seq 序列號,并且將報(bào)文中的 SYN 字段置為 1琅催,表示需要建立 TCP 連接居凶。(SYN=1,seq=x藤抡,x 為客戶端隨機(jī)生成)
  • 2侠碧、由服務(wù)端回復(fù)客戶端發(fā)送的 TCP 連接請求,并發(fā)送 SYN 報(bào)文ACK 報(bào)文缠黍,其中包含 seq 序列號弄兜,并且將 SYN 置為 1,而且會(huì)產(chǎn)生 ack 字段嫁佳,ack 字段數(shù)值是在客戶端發(fā)送過來的 seq 序列號的基礎(chǔ)上加 1 進(jìn)行回復(fù)挨队。(SYN=1,seq=y蒿往,ack=x+1,y 為服務(wù)端隨機(jī)生成)
  • 3湿弦、客戶端收到服務(wù)端發(fā)送的 TCP 建立驗(yàn)證請求后瓤漏,發(fā)送 ACK 報(bào)文,會(huì)使自己的 seq 序列號加 1 表示颊埃,并且再次回復(fù) ack 驗(yàn)證請求蔬充,在服務(wù)端發(fā)過來的 seq 上加 1 進(jìn)行回復(fù)。(SYN=1班利,ack=y+1饥漫,seq=x+1)

至此 TCP 連接的 3 次握手過程完畢

2、四次揮手
image.png
四次揮手過程說明
  • 1罗标、 客戶端發(fā)送斷開 TCP 連接請求庸队,并發(fā)送 FIN 報(bào)文,其中報(bào)文中包含 seq 序列號闯割,是由發(fā)送端隨機(jī)生成的彻消,并且還將報(bào)文中的 FIN 字段置為 1,表示需要斷開 TCP 連接宙拉。(FIN=1宾尚,seq=x,x 由客戶端隨機(jī)生成)
  • 2谢澈、服務(wù)端會(huì)回復(fù)客戶端發(fā)送的 TCP 斷開請求煌贴,并發(fā)送 ACK 報(bào)文御板,其包含 seq 序列號,是由回復(fù)端隨機(jī)生成的牛郑,而且會(huì)產(chǎn)生 ack 字段稳吮,ack 字段數(shù)值是在客戶端發(fā)過來的 seq 序列號基礎(chǔ)上加 1 進(jìn)行回復(fù),以便客戶端收到信息時(shí)井濒,知曉自己的 TCP 斷開請求已經(jīng)得到驗(yàn)證灶似。(ack=x+1,seq=y瑞你,y 由服務(wù)端隨機(jī)生成)
  • 3酪惭、服務(wù)端在回復(fù)完客戶端的 TCP 斷開請求后,不會(huì)馬上進(jìn)行 TCP 連接的斷開者甲,服務(wù)端會(huì)先確保斷開前春感,所有傳輸?shù)娇蛻舳说臄?shù)據(jù)是否已經(jīng)傳輸完畢,一旦確認(rèn)傳輸數(shù)據(jù)完畢虏缸,就會(huì)發(fā)送 FIN 報(bào)文ACK 報(bào)文鲫懒, 將回復(fù)報(bào)文的 FIN 字段置 1,并且產(chǎn)生隨機(jī) seq 序列號刽辙,還會(huì)產(chǎn)生 ack 字段窥岩,ack 字段數(shù)值是在客戶端發(fā)過來的 seq 序列號基礎(chǔ)上加 1 進(jìn)行回復(fù)。(FIN=1宰缤,ack=x+1颂翼,seq=z,z由服務(wù)端隨機(jī)生成)
  • 4慨灭、客戶端收到服務(wù)端的 TCP 斷開請求后朦乏,會(huì)回復(fù)服務(wù)端的斷開請求,并發(fā)送 FIN 報(bào)文ACK 報(bào)文氧骤,包含隨機(jī)生成的 seq 字段和 ack 字段呻疹,ack 字段會(huì)在服務(wù)端的 TCP 斷開請求的 seq 基礎(chǔ)上加 1,從而完成服務(wù)端請求的驗(yàn)證回復(fù)筹陵。(FIN=1刽锤,ack=z+1,seq=h惶翻,h為客戶端隨機(jī)生成)

至此 TCP 斷開的 4 次揮手過程完畢

3姑蓝、11種狀態(tài)
LISTEN:等待從任何遠(yuǎn)端 TCP 和端口的連接請求

SYN_SENT:發(fā)送完一個(gè)連接請求后等待一個(gè)匹配的連接請求

SYN_RECEIVED:發(fā)送連接請求并且接收到匹配的連接請求以后等待連接請求確認(rèn)

ESTABLISHED:表示一個(gè)打開的連接,接收到的數(shù)據(jù)可以被投遞給用戶吕粗。連接的數(shù)據(jù)傳輸階段的正常狀態(tài)

FIN_WAIT_1:等待遠(yuǎn)端 TCP 的連接終止請求纺荧,或者等待之前發(fā)送的連接終止請求的確認(rèn)

FIN_WAIT_2:等待遠(yuǎn)端 TCP 的連接終止請求

CLOSE_WAIT:等待本地用戶的連接終止請求

CLOSING:等待遠(yuǎn)端 TCP 的連接終止請求確認(rèn)

LAST_ACK:等待先前發(fā)送給遠(yuǎn)端 TCP 的連接終止請求的確認(rèn)(包括它字節(jié)的連接終止請求的確認(rèn))

TIME_WAIT:等待足夠的時(shí)間過去以確保遠(yuǎn)端 TCP 接收到它的連接終止請求的確認(rèn)
TIME_WAIT 兩個(gè)存在的理由:
          1.可靠的實(shí)現(xiàn) TCP 全雙工連接的終止
          2.允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝

CLOSED:不在連接狀態(tài)(這是為方便描述假想的狀態(tài),實(shí)際不存在)
image.png
  • 1、一開始宙暇,建立連接之前客戶端和服務(wù)器的狀態(tài)都為 CLOSED狀態(tài)输枯,表示沒有連接關(guān)系
  • 2、服務(wù)器創(chuàng)建 socket 后占贫,打開監(jiān)聽(LISTEN)狀態(tài)
  • 3桃熄、客戶端發(fā)送請求建立連接,向服務(wù)器發(fā)送 SYN 報(bào)文型奥,客戶端的狀態(tài)變?yōu)?發(fā)送(SYN-SENT)狀態(tài)
  • 4瞳收、服務(wù)器收到客戶端的報(bào)文后向客戶端發(fā)送 ACK 和 SYN 報(bào)文,此時(shí)服務(wù)器的狀態(tài)變?yōu)?回復(fù)(SYN_RCVD)狀態(tài)
  • 5厢汹、客戶端收到 ACK螟深、SYN,就向服務(wù)器發(fā)送 ACK烫葬,客戶端狀態(tài)變?yōu)?穩(wěn)定連接(ESTABLISHED)狀態(tài)
  • 6界弧、服務(wù)器端收到客戶端的 ACK 后變?yōu)?穩(wěn)定連接(ESTABLISHED)狀態(tài)。此時(shí)3次握手完成搭综,連接建立
image.png

由于 TCP 連接是全雙工的垢箕,斷開連接會(huì)比建立連接麻煩一點(diǎn)點(diǎn)

  • 1、客戶端先向服務(wù)器發(fā)送 FIN 報(bào)文兑巾,請求斷開連接条获,其狀態(tài)變?yōu)?FIN_WAIT1 狀態(tài)
  • 2、服務(wù)器收到 FIN 后向客戶端發(fā)送 ACK闪朱,服務(wù)器的狀態(tài)變?yōu)?CLOSE_WAIT 狀態(tài)
  • 3月匣、客戶端收到 ack 后就進(jìn)入 FIN_WAIT2 狀態(tài),此時(shí)連接已經(jīng)斷開了一半了奋姿。如果服務(wù)器還有數(shù)據(jù)要發(fā)送給客戶端,就會(huì)繼續(xù)發(fā)送
  • 4素标、直到發(fā)完數(shù)據(jù)称诗,就會(huì)發(fā)送 FIN 報(bào)文,此時(shí)服務(wù)器進(jìn)入 LAST_ACK 狀態(tài)
  • 5头遭、客戶端收到服務(wù)器的 FIN 后寓免,馬上發(fā)送 ack 給服務(wù)器,此時(shí)客戶端進(jìn)入 TIME_WAIT 狀態(tài)
  • 6计维、再過了 2MSL 長的時(shí)間后進(jìn)入 CLOSED 狀態(tài)袜香。服務(wù)器收到客戶端的 ack 就進(jìn)入 CLOSED 狀態(tài)
  • 至此,還有一個(gè)狀態(tài)沒有出來:CLOSING 狀態(tài)
  • CLOSING 狀態(tài)表示:客戶端發(fā)送了 FIN鲫惶,但是沒有收到服務(wù)器的 ack蜈首,卻收到了服務(wù)器的 FIN,這種情況發(fā)生在服務(wù)器發(fā)送的 ack 丟包的時(shí)候,因?yàn)榫W(wǎng)絡(luò)傳輸有時(shí)會(huì)有意外

四次揮手的 2MSL(TIME-WAIT)作用
2MSL 是主動(dòng)方在第四次揮手后進(jìn)入等待時(shí)間

首先弄清楚幾個(gè)概念:
1)RTT:客戶端到服務(wù)端的往返所花時(shí)間
2)RTO:超時(shí)重傳時(shí)間(與重傳機(jī)制掛鉤)
3)MSL:TCP報(bào)文在網(wǎng)絡(luò)中最長存活時(shí)間

設(shè)置 2MSL 的原因是:主要擔(dān)心主動(dòng)方第四次揮手的 ack 沒有被被動(dòng)方接收到欢策,那么被動(dòng)方在經(jīng)歷 1個(gè) MSL 時(shí)段后將重新發(fā)送第三次揮手 FIN 包吆寨,主動(dòng)方再次接收到 FIN 包時(shí)會(huì)再次發(fā)送 ack 包,直至 2MSL 時(shí)間終結(jié)踩寇,關(guān)閉連接

原文地址:https://blog.51cto.com/jinlong/2065461
原文地址:https://baijiahao.baidu.com/s?id=1693383134922615393&wfr=spider&for=pc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啄清,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俺孙,更是在濱河造成了極大的恐慌辣卒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睛榄,死亡現(xiàn)場離奇詭異荣茫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)懈费,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門计露,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憎乙,你說我怎么就攤上這事票罐。” “怎么了泞边?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵该押,是天一觀的道長。 經(jīng)常有香客問我阵谚,道長蚕礼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任梢什,我火速辦了婚禮奠蹬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗡午。我一直安慰自己囤躁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布荔睹。 她就那樣靜靜地躺著狸演,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僻他。 梳的紋絲不亂的頭發(fā)上宵距,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音吨拗,去河邊找鬼满哪。 笑死婿斥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翩瓜。 我是一名探鬼主播受扳,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兔跌!你這毒婦竟也來了勘高?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤坟桅,失蹤者是張志新(化名)和其女友劉穎华望,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仅乓,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赖舟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夸楣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾抓。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豫喧,靈堂內(nèi)的尸體忽然破棺而出石洗,到底是詐尸還是另有隱情,我是刑警寧澤紧显,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布讲衫,位于F島的核電站,受9級特大地震影響孵班,放射性物質(zhì)發(fā)生泄漏涉兽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一篙程、第九天 我趴在偏房一處隱蔽的房頂上張望枷畏。 院中可真熱鬧,春花似錦虱饿、人聲如沸矿辽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雕蔽,卻和暖如春折柠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背批狐。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工扇售, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留前塔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓承冰,卻偏偏與公主長得像华弓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子困乒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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