TCP的三次握手四次揮手與sync攻擊

前言

本文旨在用通俗的語(yǔ)言說明對(duì)TCP三次握手以及四次揮手的理解,以及為什么握手需要三次但是揮手需要四次

三次握手

我們先來(lái)看一張網(wǎng)絡(luò)上的圖


三次握手

圖中SYN和ACK只是標(biāo)志位,我們不用關(guān)注,我們只需要關(guān)注syn和ack
這個(gè)過程用文字描述一下就是

  1. 客戶端向服務(wù)端發(fā)送seq=J
  2. 服務(wù)端收到后向客戶端發(fā)送ack=J+1,seq=K
  3. 客戶端向服務(wù)端回應(yīng)ack=K+1 ,至此連接建立完成

看到這里你可能會(huì)覺得又是ack又是seq這些都是什么意思,別急,我們可以把這個(gè)過程翻譯成人話來(lái)理解一下

建立連接的通俗理解

建立連接后我們認(rèn)為這個(gè)通訊是可靠的,通訊是可靠的說的直白一點(diǎn)就是 我能確定你能收到我的信息,你能確定我能收到你的信息,建立連接的過程實(shí)質(zhì)上是在互相確認(rèn)對(duì)方可以收到信息的過程

舉個(gè)??

我們現(xiàn)在用男女同學(xué)之間異地寫信來(lái)模擬一下三次握手的場(chǎng)景(皮一下很開心)

現(xiàn)在女生A想和男生B通信,于是寫了一封信寄給男生B男生B收到女A的信后很開心很激動(dòng)然后就去打了幾把游戲冷靜一下??,而生女生A把信發(fā)出去后發(fā)現(xiàn)一直沒有回應(yīng),以為對(duì)方收不到,然后就放棄了。

所以男生B收到女生A的信后應(yīng)該進(jìn)行回應(yīng)否則女生A是不知道你收到了信的

后來(lái)男生B收到女生A信后終于回信,然后女生A收到信后也忘了回信,于是男生B也以為女生A收不到信,就一直等呀等,一輩子就這么過去了(這真是個(gè)悲傷的故事???)

所以這時(shí)候女生A也應(yīng)該回信,讓男生B知道她能收到信,自此以后他們就能正式開始互通信件了

三次握手的本質(zhì)

上面這個(gè)例子中女生A其實(shí)是客戶端,男生B其實(shí)是服務(wù)端,三次握手實(shí)質(zhì)上是在做下面的確認(rèn)

  • ① 客戶端:你是否能收到我的訊息(向服務(wù)端發(fā)送seq=J)
  • ② 服務(wù)端:我可以收到你的信息(ack=J+1代表可以收到客戶端的信息),你能否收到我的信息(向客服端發(fā)送seq=K)
  • ③ 客戶端:我可以收到你的信息(向服務(wù)端回應(yīng)ack=K+1代表可以收到服務(wù)端信息)

連接建立

syn攻擊

我們可以看到,在之前的例子中,如果女生A最后不回信,男生B會(huì)一直等待,這個(gè)如果換成我們實(shí)際tcp握手就會(huì)造成服務(wù)端資源的浪費(fèi)

我們可以想象這么一個(gè)場(chǎng)景:
如果客戶端向服務(wù)端發(fā)送大量的syn包(進(jìn)行大量操作①)那么服務(wù)器資源就會(huì)被大量占用,從而導(dǎo)致其無(wú)法正常提供服務(wù)

這就是syn洪水攻擊,目前這種攻擊還沒有什么好的防范方式目前大致方向有兩種

  1. 通過分析網(wǎng)絡(luò)流量特征,因?yàn)閟yn攻擊的流量和正常網(wǎng)絡(luò)流量是會(huì)有顯著區(qū)別的,比如數(shù)據(jù)包的密集度、半開連接數(shù)量(執(zhí)行完操作②的數(shù)量)
  2. 通過一個(gè)防火墻代理,大致是通過防火墻來(lái)過濾可靠連接放行

四次揮手

先上圖


四次揮手
  • ① 主動(dòng)方:我不想給你發(fā)數(shù)據(jù)了我們分手吧(向被動(dòng)方發(fā)送seq=M)
  • ② 被動(dòng)方:好(ack=M+1代表可以收到主動(dòng)方的信息)

此時(shí)被動(dòng)方把剩余數(shù)據(jù)發(fā)送完成

  • ③ 被動(dòng)方:我不想給你發(fā)數(shù)據(jù)了我們分手吧(向主動(dòng)方發(fā)送seq=N)
  • ④ 主動(dòng)方:好(向被動(dòng)方回應(yīng)ack=N+1代表可以收到被動(dòng)方信息)

被動(dòng)方關(guān)閉連接,主動(dòng)方等待一段時(shí)間后確定沒有數(shù)據(jù)接收了,關(guān)閉連接

四次揮手實(shí)質(zhì)上是在確認(rèn)我已經(jīng)沒有數(shù)據(jù)需要發(fā)送給你,你已經(jīng)沒有數(shù)據(jù)發(fā)送給我,雙方可以斷開連接

為什么握手是三次但是揮手需要四次

其實(shí)握手也可以是四次,如果是四次流程將會(huì)是下面這樣

  • ① 客戶端:你是否能收到我的訊息(向服務(wù)端發(fā)送seq=J)
  • ② 服務(wù)端:我可以收到你的信息(ack=J+1代表可以收到客戶端的信息)
  • ③ 服務(wù)端:你能否收到我的信息(向客服端發(fā)送seq=K)
  • ④ 客戶端:我可以收到你的信息(向服務(wù)端回應(yīng)ack=K+1代表可以收到服務(wù)端信息)

我們可以發(fā)現(xiàn)三次握手實(shí)質(zhì)上是把②、③合成一步了,他把回復(fù)客戶端(我能收到信息)和詢問客戶端(能否收到我的信息)合并為一步操作。

為什么揮手時(shí)不能合并成三次呢?

答:因?yàn)閾]手的②和③之間需要有一步把剩余數(shù)據(jù)發(fā)送完的操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容