TCP三次握手和四次揮手

重要的幾個概念:

  1. SYN: 發(fā)起新的連接
  2. ACK:確認(rèn)序號有效。
  3. seq序號
  4. ack序號: 只有在ACK=1的情況下有效肖揣,ack序號 = seq序號+ 1
  5. FIN: 釋放一個連接

三次握手協(xié)議

三次握手.png
  1. 客戶端發(fā)起SYN=1民假,表示需要新建連接,并且?guī)想S機數(shù)seq=x (Client進入SYN_SENT狀態(tài))
  2. 服務(wù)端在收到數(shù)據(jù)包之后龙优,根據(jù)SYN=1知道客戶端是希望建立新的連接羊异,所以服務(wù)端發(fā)送的信息里面SYNACK都置為1,并且對客戶端上傳上的seq序號=x+1==>ack=x+1,并且?guī)献约荷傻碾S機數(shù)seq=y (Server進入SYN_RCVD)
  3. 客戶端收到服務(wù)端返回的包后,確認(rèn)ACK是否等于1并且確認(rèn)ack是否等于x+1,如果正確則將ACK=1,ack=y+1 (Client和Server進入ESTABLISHED)
  4. 完成三次握手彤断,正確的連接建立成功野舶,服務(wù)端和客戶端可以開始傳輸數(shù)據(jù)了

為什么要用三次握手,而不是兩次握手呢宰衙?平道?

如果客戶端發(fā)送第一次握手之后,因為網(wǎng)絡(luò)不好供炼,消息在網(wǎng)絡(luò)中走的有點久一屋,等到消息到達服務(wù)端的時候窘疮,消息已經(jīng)失效了(但是這個時候服務(wù)端并不知曉),假設(shè)沒有第三次握手冀墨,服務(wù)端在收到消息做出響應(yīng)之后闸衫,就建立起新的連接,一直等待客戶端發(fā)送消息诽嘉,但是客戶端已經(jīng)認(rèn)為失效了楚堤。這樣就會導(dǎo)致服務(wù)端的資源被白白浪費。采用三次握手就是為了防止這種情況的發(fā)生含懊,server會因為收不到確認(rèn)的報文身冬,就知道client并沒有建立連接。這就是三次握手的作用岔乔。

SYN攻擊:

在三次握手過程中酥筝,Server發(fā)送SYN-ACK之后,收到Client的ACK之前的TCP連接稱為半連接(half-open connect)雏门,此時Server處于SYN_RCVD狀態(tài)嘿歌,當(dāng)收到ACK后芍躏,Server轉(zhuǎn)入ESTABLISHED狀態(tài)寞秃。SYN攻擊就是Client在短時間內(nèi)偽造大量不存在的IP地址,并向Server不斷地發(fā)送SYN包捌锭,Server回復(fù)確認(rèn)包募闲,并等待Client的確認(rèn)步脓,由于源地址是不存在的,因此浩螺,Server需要不斷重發(fā)直至超時靴患,這些偽造的SYN包將產(chǎn)時間占用未連接隊列,導(dǎo)致正常的SYN請求因為隊列滿而被丟棄要出,從而引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓鸳君。SYN攻擊時一種典型的DDOS攻擊,檢測SYN攻擊的方式非常簡單患蹂,即當(dāng)Server上有大量半連接狀態(tài)且源IP地址是隨機的或颊,則可以斷定遭到SYN攻擊了,使用如下命令可以讓之現(xiàn)行:#netstat -nap | grep SYN_RECV

四次揮手

Tcp四次揮手.png
  1. 客戶端發(fā)送 FIN=1標(biāo)識需要釋放連接传于,并且?guī)献约旱碾S機數(shù)seq=u
  2. 服務(wù)端接收到FIN后知道客戶端要釋放連接囱挑,做出響應(yīng)ACK=1,并將ack=u+1,最后帶上自己的隨機數(shù) seq=v
  3. 服務(wù)端向客戶端發(fā)送FIN,用來關(guān)閉服務(wù)端客戶端的數(shù)據(jù)傳輸,這里用到的ack也是=u+1
  4. 客戶端收到FIN后格了,進入TIME_WAIT狀態(tài)看铆,并對FIN的做出應(yīng)答
  5. 服務(wù)端收到應(yīng)答后,進行CLOSE狀態(tài)

為什么建立連接是三次握手盛末,斷開連接確實四次揮手呢弹惦?

因為關(guān)閉連接時,A向B發(fā)送FIN否淤,僅僅表示A不再發(fā)送數(shù)據(jù)了,但是還是可以接收數(shù)據(jù)棠隐,此時B也未必已經(jīng)把所有數(shù)據(jù)都發(fā)送給A了石抡,所以B可以立即發(fā)送FIN做響應(yīng)關(guān)閉,也可以接著把未發(fā)完的數(shù)據(jù)發(fā)完了助泽,在發(fā)送FIN啰扛。

為什么客戶端會在發(fā)送完最后一個ACK后,還要等待2MSL.

因為客戶端返回的ACK可能在網(wǎng)絡(luò)傳輸中丟失嗡贺,服務(wù)端會超時重傳FIN隐解,客戶端就能在這2MSL的時間內(nèi)接收到這個FIN,再次做出ACK诫睬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煞茫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摄凡,更是在濱河造成了極大的恐慌续徽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亲澡,死亡現(xiàn)場離奇詭異钦扭,居然都是意外死亡,警方通過查閱死者的電腦和手機床绪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門客情,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人会涎,你說我怎么就攤上這事裹匙。” “怎么了末秃?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長籽御。 經(jīng)常有香客問我练慕,道長,這世上最難降的妖魔是什么技掏? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任铃将,我火速辦了婚禮,結(jié)果婚禮上哑梳,老公的妹妹穿的比我還像新娘劲阎。我一直安慰自己,他們只是感情好鸠真,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布悯仙。 她就那樣靜靜地躺著龄毡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锡垄。 梳的紋絲不亂的頭發(fā)上沦零,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音货岭,去河邊找鬼路操。 笑死,一個胖子當(dāng)著我的面吹牛千贯,可吹牛的內(nèi)容都是我干的屯仗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼搔谴,長吁一口氣:“原來是場噩夢啊……” “哼魁袜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起己沛,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤慌核,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后申尼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垮卓,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年师幕,在試婚紗的時候發(fā)現(xiàn)自己被綠了粟按。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡霹粥,死狀恐怖灭将,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情后控,我是刑警寧澤庙曙,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站浩淘,受9級特大地震影響捌朴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜张抄,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一砂蔽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧署惯,春花似錦左驾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽安岂。三九已至,卻和暖如春稻爬,著一層夾襖步出監(jiān)牢的瞬間嗜闻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工桅锄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琉雳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓友瘤,卻偏偏與公主長得像翠肘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辫秧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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