計網(wǎng)學(xué)習(xí)筆記(9)- TCP 握手

TCP 運輸連接管理

運輸連接有三個階段:

  • 連接建立

  • 數(shù)據(jù)傳送

  • 連接釋放

三次握手

TCP 建立連接的過程叫做握手。

握手需要在客戶和服務(wù)器之間交換三個 TCP 報文段俄周。稱之為三報文握手崎弃。采用三報文握手主要是為了防止已失效的連接請求報文段突然又傳送到了想括,因而產(chǎn)生錯誤儡陨。

  • A 的 TCP 向 B 發(fā)出連接請求報文段司致,其首部中的同步位 SYN = 1煞躬,并選擇序號 seq = x肛鹏,表明傳送數(shù)據(jù)時的第一個數(shù)據(jù)字節(jié)的序號是 x。

  • B 的 TCP 收到連接請求報文段后恩沛,如同意在扰,則發(fā)回確認(rèn)。B 在確認(rèn)報文段中應(yīng)使 SYN = 1雷客,使 ACK = 1芒珠,其確認(rèn)號 ack = x + 1,自己選擇的序號 seq = y佛纫。

  • A 收到此報文段后向 B 給出確認(rèn)妓局,其 ACK = 1,確認(rèn)號 ack = y + 1呈宇。A 的 TCP 通知上層應(yīng)用進(jìn)程好爬,連接已經(jīng)建立。

  • B 的 TCP 收到主機 A 的確認(rèn)后甥啄,也通知其上層應(yīng)用進(jìn)程:TCP 連接已經(jīng)建立存炮。

* 第一次握手:建立連接時,客戶端發(fā)送 syn 包(syn = j)到服務(wù)器蜈漓,
并進(jìn)入 SYN_SENT 狀態(tài)穆桂,等待服務(wù)器確認(rèn);
SYN:同步序列編號(Synchronize Sequence Numbers)融虽。

* 第二次握手:服務(wù)器收到 syn 包享完,必須確認(rèn)客戶的 SYN(ack = j + 1),
同時自己也發(fā)送一個 SYN 包(syn = k)有额,即 SYN + ACK 包般又,
此時服務(wù)器進(jìn)入 SYN_RECV 狀態(tài)彼绷;

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

握手的目的是什么猜旬?

握手的目的是為了防止已失效的連接請求報文段突然又傳送到了,因而產(chǎn)生錯誤倦卖。比如一個客戶端發(fā)出一個連接請求報文雖然沒有丟失洒擦,但是由于一些原因在在某個網(wǎng)絡(luò)節(jié)點中長時間滯留,以至于在斷開連接后才到達(dá)服務(wù)端糖耸。這本身就是一個已經(jīng)失效的報文秘遏。但是服務(wù)器誤以為是客戶端的又一個新的請求。假設(shè)沒有三次握手那么只要服務(wù)端發(fā)出確認(rèn)鏈接就建立了嘉竟。由于客戶端也沒有給服務(wù)端發(fā)請求邦危,因此也不回復(fù)服務(wù)端的確認(rèn)。但是服務(wù)端確認(rèn)為新的連接開始了舍扰,等待客戶端發(fā)數(shù)據(jù)倦蚪。這樣就容易造成服務(wù)端的資源的浪費。采用三次握手可以防止這種情況發(fā)生边苹。

四次揮手

數(shù)據(jù)傳輸結(jié)束后陵且,通信的雙方都可釋放連接。TCP 連接釋放過程是四報文握手个束。

  • 數(shù)據(jù)傳輸結(jié)束后慕购,通信的雙方都可釋放連接。現(xiàn)在 A 的應(yīng)用進(jìn)程先向其 TCP 發(fā)出連接釋放報文段茬底,并停止再發(fā)送數(shù)據(jù)沪悲,主動關(guān)閉 TCP 連接。A 把連接釋放報文段首部的 FIN = 1阱表,其序號 seq = u殿如,等待 B 的確認(rèn)。

  • B 發(fā)出確認(rèn)最爬,確認(rèn)號 ack = u + 1涉馁,而這個報文段自己的序號 seq = v。TCP 服務(wù)器進(jìn)程通知高層應(yīng)用進(jìn)程爱致。從 A 到 B 這個方向的連接就釋放了烤送,TCP 連接處于半關(guān)閉狀態(tài)。B 若發(fā)送數(shù)據(jù)糠悯,A 仍要接收帮坚。

  • 若 B 已經(jīng)沒有要向 A 發(fā)送的數(shù)據(jù)牢裳,其應(yīng)用進(jìn)程就通知 TCP 釋放連接。

  • A 收到連接釋放報文段后叶沛,必須發(fā)出確認(rèn)。

  • 在確認(rèn)報文段中 ACK = 1忘朝,確認(rèn)號 ack = w + 1灰署,自己的序號 seq = u + 1。

對于一個已經(jīng)建立的連接局嘁,TCP使用改進(jìn)的三次握手來釋放連接
(使用一個帶有 FIN 附加標(biāo)記的報文段)溉箕。TCP 關(guān)閉連接的步驟如下:

* 第一步,當(dāng)主機 A 的應(yīng)用程序通知 TCP 數(shù)據(jù)已經(jīng)發(fā)送完畢時悦昵,
TCP 向主機 B 發(fā)送一個帶有 FIN 附加標(biāo)記的報文段(FIN 表示英文 finish)肴茄。

* 第二步,主機 B 收到這個 FIN 報文段之后但指,并不立即用 FIN 報文段回復(fù)主機 A寡痰,
而是先向主機 A 發(fā)送一個確認(rèn)序號 ACK,同時通知自己相應(yīng)的應(yīng)用程序:
對方要求關(guān)閉連接(先發(fā)送 ACK 的目的是為了防止在這段時間內(nèi)棋凳,對方重傳 FIN 報文段)拦坠。

* 第三步,主機 B 的應(yīng)用程序告訴 TCP:
我要徹底的關(guān)閉連接剩岳,TCP 向主機 A 送一個 FIN 報文段贞滨。

* 第四步,主機 A 收到這個 FIN 報文段后拍棕,
向主機 B 發(fā)送一個 ACK 表示連接徹底釋放晓铆。

為什么 A 必須等待 2MSL 的時間?

  • 為了保證 A 發(fā)送的最后一個 ACK 報文段能夠到達(dá) B绰播。

  • 防止 “已失效的連接請求報文段” 出現(xiàn)在本連接中骄噪。A 在發(fā)送完最后一個 ACK 報文段后,再經(jīng)過時間 2MSL幅垮,就可以使本連接持續(xù)的時間內(nèi)所產(chǎn)生的所有報文段腰池,都從網(wǎng)絡(luò)中消失。這樣就可以使下一個新的連接中不會出現(xiàn)這種舊的連接請求報文段忙芒。

為什么握手三次示弓,揮手四次?

  • 三次握手
    因為要保證信道的可靠呵萨,就需要雙方溝通并且達(dá)成一致奏属。而要解決這個問題 3 次是最小值。

  • 四次揮手
    因為 TCP 連接是全雙工的潮峦,因此每個方向都必須單獨的斷開連接客戶端申請斷開連接囱皿,只是不再發(fā)送數(shù)據(jù)勇婴,還能接收數(shù)據(jù)。需要等待服務(wù)端將數(shù)據(jù)發(fā)送完畢后嘱腥,等待服務(wù)端申請斷開連接耕渴。

TCP 有限狀態(tài)機

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市齿兔,隨后出現(xiàn)的幾起案子橱脸,更是在濱河造成了極大的恐慌,老刑警劉巖分苇,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件添诉,死亡現(xiàn)場離奇詭異,居然都是意外死亡医寿,警方通過查閱死者的電腦和手機栏赴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靖秩,“玉大人须眷,你說我怎么就攤上這事∨璩ィ” “怎么了柒爸?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長事扭。 經(jīng)常有香客問我捎稚,道長,這世上最難降的妖魔是什么求橄? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任今野,我火速辦了婚禮,結(jié)果婚禮上罐农,老公的妹妹穿的比我還像新娘条霜。我一直安慰自己,他們只是感情好涵亏,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布宰睡。 她就那樣靜靜地躺著,像睡著了一般气筋。 火紅的嫁衣襯著肌膚如雪拆内。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天宠默,我揣著相機與錄音麸恍,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛抹沪,可吹牛的內(nèi)容都是我干的刻肄。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼融欧,長吁一口氣:“原來是場噩夢啊……” “哼敏弃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起噪馏,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤权她,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逝薪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蝴罪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年董济,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片要门。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡虏肾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欢搜,到底是詐尸還是另有隱情封豪,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布炒瘟,位于F島的核電站吹埠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疮装。R本人自食惡果不足惜缘琅,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廓推。 院中可真熱鬧刷袍,春花似錦、人聲如沸樊展。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽专缠。三九已至雷酪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藤肢,已是汗流浹背太闺。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘁圈,地道東北人省骂。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓蟀淮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钞澳。 傳聞我的和親對象是個殘疾皇子怠惶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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