tcp握手過(guò)程

TCP結(jié)構(gòu):

1

SYN是同步的縮寫亚脆,SYN 段是發(fā)送到另一臺(tái)計(jì)算機(jī)的 TCP 數(shù)據(jù)包,請(qǐng)求在它們之間建立連接

ACK 是“確認(rèn)”的縮寫产捞。 ACK 數(shù)據(jù)包是任何確認(rèn)收到一條消息或一系列數(shù)據(jù)包的 TCP 數(shù)據(jù)包

TCP三次握手如圖:

tcp三次握手

1.1第一次握手

客戶端給服務(wù)器發(fā)送一個(gè)SYN標(biāo)志位為1的 TCP/IP 數(shù)據(jù)包, 該包中客戶端的初始序列號(hào)(Sequence number = J)汹来。

1.2第二次握手

服務(wù)器返回客戶端 SYN +ACK兩個(gè)標(biāo)志位都為為1的 TCP/IP 數(shù)據(jù)包,該包中服務(wù)器的初始序列號(hào)(Sequence number = K)页畦;同時(shí)使 Acknowledgment number = J + 1來(lái)表示確認(rèn)已收到客戶端的 SYN段胖替。

1.3第三次握手

客戶端給服務(wù)器響應(yīng)一個(gè)ACK標(biāo)志位為1的 TCP/IP 數(shù)據(jù)包, 該包中使 Acknowledgment number = K + 1來(lái)表示確認(rèn)已收到服務(wù)器的 SYN段。

解釋一下 三次握手 和 四次揮手寇漫?

三次握手:

第一次:客戶端向服務(wù)器發(fā)送syn包刊殉,此時(shí)進(jìn)入[SYN_SENT]狀態(tài),等待服務(wù)器返回信息州胳;此時(shí)服務(wù)端確認(rèn)了客戶端發(fā)送是正常的

第二次:服務(wù)器收到syn包记焊,需要確認(rèn)客戶端的syn包,同時(shí)自己發(fā)出一個(gè)syn+ask包給客戶端栓撞;此時(shí)客戶端知道了自己發(fā)送遍膜、接收正常碗硬,客戶端也知道服務(wù)器發(fā)送接收也正常;但是服務(wù)器不知道客戶端接收是否正常瓢颅,也不知道自己發(fā)送是否正常恩尾。

第三次:[客戶端]收到服務(wù)器的syn+ask包后,向服務(wù)器發(fā)送確認(rèn)包ask挽懦,此包發(fā)送完畢翰意,客戶端和服務(wù)器進(jìn)入[ESTABLISHED](TCP連接成功)狀態(tài);雙方都知道對(duì)方發(fā)送和接收都正常信柿。

為什么不能兩次握手:

假如A發(fā)出了一個(gè)由于網(wǎng)絡(luò)異常變成了失效的連接a冀偶;當(dāng)a到達(dá)B,那么只要B確認(rèn)渔嚷,新的連接就建立了进鸠。B會(huì)一直等待A發(fā)送數(shù)據(jù),這樣就造成了資源浪費(fèi)形病。

為什么不能四次握手:

3次就可以解決問(wèn)題了客年,為什么要四次


TCP三次握手詳細(xì)解析過(guò)程:

2

1.1 第一次握手

客戶在socket() connect()后主動(dòng)(active open)連接上服務(wù)器, 發(fā)送SYN ,這時(shí)客戶端的狀態(tài)是SYN_SENT

服務(wù)器在進(jìn)行socket(),bind(),listen()后等待客戶的連接漠吻,收到客戶端的 SYN 后量瓜,

1.1.1 半連接隊(duì)列(syn queue)未滿

服務(wù)器將該連接的狀態(tài)變?yōu)镾YN_RCVD, 服務(wù)器把連接信息放到半連接隊(duì)列(syn queue)里面。

1.1.2?半連接隊(duì)列(syn queue)已滿

服務(wù)器不會(huì)將該連接的狀態(tài)變?yōu)镾YN_RCVD侥猩,且將該連接丟棄(SYN flood攻擊就是利用這個(gè)原理榔至,

對(duì)于SYN foold攻擊,應(yīng)對(duì)方法之一是使syncookies生效欺劳,將其值置1即可唧取,路徑/proc/sys/net/ipv4/tcp_syncookies,

即使是半連接隊(duì)列syn queue已經(jīng)滿了划提,也可以接收正常的非惡意攻擊的客戶端的請(qǐng)求枫弟,

1.2 第二次握手

服務(wù)器返回SYN+ACK段給到客戶端,客戶端收到SYN+ACK段后鹏往,客戶端的狀態(tài)從SYN_SENT變?yōu)镋STABLISHED淡诗,

也即是connect()函數(shù)的返回。

1.3 第三次握手

全連接隊(duì)列(accept queue)的最大值 /proc/sys/net/core/somaxconn (默認(rèn)128)

1.3.1 全連接隊(duì)列(accept queue)未滿

服務(wù)器收到客戶端發(fā)來(lái)的ACK, 服務(wù)端該連接的狀態(tài)從SYN_RCVD變?yōu)镋STABLISHED,

然后服務(wù)器將該連接從半連接隊(duì)列(syn queue)里面移除伊履,且將該連接的信息放到全連接隊(duì)列(accept queue)里面韩容。

1.3.2?全連接隊(duì)列(accept queue)已滿

服務(wù)器收到客戶端發(fā)來(lái)的ACK, 不會(huì)將該連接的狀態(tài)從SYN_RCVD變?yōu)镋STABLISHED。

當(dāng)然全連接隊(duì)列(accept queue)已滿時(shí)唐瀑,則根據(jù) tcp_abort_on_overflow 的值來(lái)執(zhí)行相應(yīng)動(dòng)作


SYN flood攻擊

攻擊方的客戶端只發(fā)送SYN分節(jié)給服務(wù)器群凶,然后對(duì)服務(wù)器發(fā)回來(lái)的SYN+ACK什么也不做,直接忽略掉哄辣,

不發(fā)送ACK給服務(wù)器请梢;這樣就可以占據(jù)著服務(wù)器的半連接隊(duì)列的資源赠尾,導(dǎo)致正常的客戶端連接無(wú)法連接上服務(wù)器。

(SYN flood攻擊的方式其實(shí)也分兩種毅弧,第一種气嫁,攻擊方的客戶端一直發(fā)送SYN,對(duì)于服務(wù)器回應(yīng)的SYN+ACK什么也不做够坐,不回應(yīng)ACK, 第二種寸宵,攻擊方的客戶端發(fā)送SYN時(shí),將源IP改為一個(gè)虛假的IP, 然后服務(wù)器將SYN+ACK發(fā)送到虛假的IP, 這樣當(dāng)然永遠(yuǎn)也得不到ACK的回應(yīng)咆霜。)

https://blog.csdn.net/jun2016425/article/details/81506353

四次揮手:

假設(shè)Client端發(fā)起中斷連接請(qǐng)求邓馒,也就是發(fā)送FIN報(bào)文嘶朱。

Server端接到FIN報(bào)文后蛾坯,意思是說(shuō)”我Client端沒(méi)有數(shù)據(jù)要發(fā)給你了”,但是如果你還有數(shù)據(jù)沒(méi)有發(fā)送完成疏遏,則不必急著關(guān)閉Socket脉课,可以繼續(xù)發(fā)送數(shù)據(jù)。所以 Server 端會(huì)先發(fā)送ACK财异,”告訴Client端倘零,你的請(qǐng)求我收到了,但是我還沒(méi)準(zhǔn)備好戳寸,請(qǐng)繼續(xù)你等我的消息”呈驶。這個(gè)時(shí)候Client端就進(jìn)入 FIN_WAIT 狀態(tài),繼續(xù)等待Server端的FIN報(bào)文疫鹊。

當(dāng)Server端確定數(shù)據(jù)已發(fā)送完成袖瞻,則向Client端發(fā)送FIN報(bào)文,”告訴Client端拆吆,好了聋迎,我這邊數(shù)據(jù)發(fā)完了,準(zhǔn)備好關(guān)閉連接了”枣耀。

Client端收到FIN報(bào)文后霉晕,”就知道可以關(guān)閉連接了,但是他還是不相信網(wǎng)絡(luò)捞奕,怕Server端不知道要關(guān)閉牺堰,所以發(fā)送 ACK 后進(jìn)入 TIME_WAIT 狀態(tài),如果 Server 端沒(méi)有收到 ACK 則可以重傳“颅围,Server端收到ACK后伟葫,”就知道可以斷開(kāi)連接了”。

Client端等待了2MSL后依然沒(méi)有收到回復(fù)谷浅,則證明Server端已正常關(guān)閉扒俯,那好奶卓,我Client端也可以關(guān)閉連接了。Ok撼玄,TCP連接就這樣關(guān)閉了夺姑!

整個(gè)過(guò)程:

A向B發(fā)起請(qǐng)求,表示A沒(méi)有數(shù)據(jù)要發(fā)送了:A——>B掌猛;

B向A發(fā)送信號(hào)盏浙,確認(rèn)A的斷開(kāi)請(qǐng)求請(qǐng)求:B——>A;

B向A發(fā)送信號(hào)荔茬,請(qǐng)求斷開(kāi)連接废膘,表示B沒(méi)有數(shù)據(jù)要發(fā)送了:B——>A;

A向B發(fā)送確認(rèn)信號(hào)慕蔚,同意斷開(kāi):A——>B丐黄。

為什么2、3次揮手不能合在一次揮手中孔飒?那是因?yàn)榇藭r(shí)A雖然不再發(fā)送數(shù)據(jù)了灌闺,但是還可以接收數(shù)據(jù),B可能還有數(shù)據(jù)要發(fā)送給A坏瞄,所以兩次揮手不能合并為一次桂对。

為什么揮手次數(shù)比握手多一次? 是因?yàn)槲帐诌^(guò)程鸠匀,通信只需要處理連接蕉斜。而揮手過(guò)程,通信需要處理數(shù)據(jù)+連接缀棍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宅此,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子睦柴,更是在濱河造成了極大的恐慌诽凌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦敌,死亡現(xiàn)場(chǎng)離奇詭異侣诵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狱窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門杜顺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)航缀,“玉大人绅你,你說(shuō)我怎么就攤上這事告组∠欤” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵悴灵,是天一觀的道長(zhǎng)昔善。 經(jīng)常有香客問(wèn)我阱表,道長(zhǎng),這世上最難降的妖魔是什么馁菜? 我笑而不...
    開(kāi)封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任茴扁,我火速辦了婚禮,結(jié)果婚禮上汪疮,老公的妹妹穿的比我還像新娘峭火。我一直安慰自己,他們只是感情好智嚷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布卖丸。 她就那樣靜靜地躺著,像睡著了一般盏道。 火紅的嫁衣襯著肌膚如雪稍浆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天摇天,我揣著相機(jī)與錄音粹湃,去河邊找鬼。 笑死泉坐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裳仆。 我是一名探鬼主播腕让,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歧斟!你這毒婦竟也來(lái)了纯丸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤静袖,失蹤者是張志新(化名)和其女友劉穎觉鼻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體队橙,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坠陈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捐康。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仇矾。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖解总,靈堂內(nèi)的尸體忽然破棺而出贮匕,到底是詐尸還是另有隱情,我是刑警寧澤花枫,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布刻盐,位于F島的核電站掏膏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敦锌。R本人自食惡果不足惜壤追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望供屉。 院中可真熱鬧行冰,春花似錦、人聲如沸伶丐。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哗魂。三九已至肛走,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間录别,已是汗流浹背朽色。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留组题,地道東北人葫男。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像崔列,于是被迫代替她去往敵國(guó)和親梢褐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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