在將TCP之前我們得了解什么是TCP络凿,下面就簡(jiǎn)單的介紹一下TCP荞彼。
TCP是一種計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議冈敛,是一種面向連接的、可靠性鸣皂、基于字節(jié)流的傳輸層通信協(xié)議抓谴。
在互聯(lián)網(wǎng)中我們經(jīng)常會(huì)使用到TCP協(xié)議,就像我們?cè)L問(wèn)一個(gè)網(wǎng)站寞缝,網(wǎng)址域名就得帶上http://或者h(yuǎn)ttps://開(kāi)頭的網(wǎng)址域名(而https也是屬于http協(xié)議的癌压,只不過(guò)https是以安全為目標(biāo)的http通道,即是http下加了SSL第租,因此加密的詳細(xì)內(nèi)容就是SSL措拇。)http協(xié)議是對(duì)應(yīng)于應(yīng)用層,而TCP協(xié)議是對(duì)應(yīng)于傳輸層慎宾,所以http協(xié)議是建立在tcp的基礎(chǔ)上的。為什么說(shuō)是http協(xié)議是簡(jiǎn)歷在tcp的基礎(chǔ)上呢浅悉?因?yàn)榛ヂ?lián)網(wǎng)是由一整套協(xié)議構(gòu)成的趟据,而TCP和http只是其中的兩個(gè)層,有著自己的分工术健。
下面就直接進(jìn)入主題汹碱,TCP的三次握手過(guò)程:
第一步:客戶(hù)端發(fā)送一個(gè)包含SYN標(biāo)識(shí)的TCP報(bào)文,SYN即同步(Synchronize)的意思荞估,SYN報(bào)文會(huì)指明客戶(hù)端的端口號(hào)及TCP連接的初始序列號(hào)咳促。
第二步:服務(wù)器在收到客戶(hù)端的SYN報(bào)文后稚新,會(huì)返回一個(gè)SYN+ACK的報(bào)文,表示客戶(hù)端請(qǐng)求被接收跪腹,同時(shí)褂删,TCP序列號(hào)被加一,ACK即確認(rèn)的意思(Acknowledgment)
第三步:客戶(hù)端在接收服務(wù)端的SYN+ACK報(bào)文后冲茸,也會(huì)返回一個(gè)ACK報(bào)文給服務(wù)端屯阀,同樣,TCP序列號(hào)被加一轴术,TCP連接便建立好了难衰,接下來(lái)便可以進(jìn)行數(shù)據(jù)通信。
以上就是TCP的三次握手的過(guò)程逗栽,那么我們來(lái)思考一下盖袭;
1、TCP的三次握手有什么缺點(diǎn)彼宠?
TCP協(xié)議為實(shí)現(xiàn)可靠傳輸鳄虱,在三次握手的過(guò)程中設(shè)置了一些異常處理機(jī)制。第三步中如果服務(wù)器沒(méi)有收到客戶(hù)端的ACK報(bào)文兵志,服務(wù)端一般會(huì)進(jìn)行重試醇蝴,也就是再次發(fā)送SYN+ACK報(bào)文給客戶(hù)端,并且一直處于SYN_RECV狀態(tài)想罕,將客戶(hù)端加入等待列表悠栓。重發(fā)一般會(huì)進(jìn)行3~5次,大約每隔30秒左右會(huì)輪詢(xún)一遍等待隊(duì)列按价,重試所有客戶(hù)端惭适;另一方面,服務(wù)器在發(fā)出SYN+ACK報(bào)文后楼镐,會(huì)預(yù)分配一部分資源給即將建立的TCP連接癞志,這個(gè)資源在等待重試期間一直保留,更為重要的是框产,服務(wù)器資源有限凄杯,可以維護(hù)的等待列表超過(guò)極限后就不再接收新的SYN報(bào)文,也就是建立新的TCP連接秉宿。
SYN Flood攻擊正是利用了TCP協(xié)議三次握手的過(guò)程來(lái)達(dá)成打擊的目的戒突。攻擊者偽造大量的IP地址給服務(wù)器發(fā)送SYN報(bào)文,但是由于偽造的IP地址不存在描睦,也就不可能在客戶(hù)端得到任何回應(yīng)膊存,服務(wù)端將維護(hù)一個(gè)非常大的半連接等待列表,并且不斷對(duì)這個(gè)列表中的IP地址進(jìn)行遍歷和重試,大量的占用了服務(wù)器資源隔崎。嚴(yán)重的是今艺,由于服務(wù)器資源有限,大量的惡意客戶(hù)端占滿(mǎn)了服務(wù)器的等待隊(duì)列爵卒,導(dǎo)致服務(wù)器不再接受新的SYN請(qǐng)求虚缎,正常用戶(hù)無(wú)法完成三次握手與服務(wù)端通信。
防止SYNFlood攻擊有很多種辦法技潘,例如從防火墻進(jìn)行防御和更多的網(wǎng)絡(luò)安全技術(shù)遥巴,這里就不再做詳細(xì)介紹。
2享幽、為什么TCP要三次握手/為什么是三次握手铲掐?
? 答:三次握手的目的是:為了防止已經(jīng)失效的連接請(qǐng)求報(bào)文段突然又傳到服務(wù)端,因產(chǎn)生錯(cuò)誤值桩。我們也要知道TCP是全雙工的摆霉,也就是說(shuō)客戶(hù)端給服務(wù)端發(fā)送信息的同時(shí),服務(wù)器端也能給客戶(hù)端發(fā)送信息奔坟。就像是兩個(gè)人通電話(huà)携栋,我們就來(lái)模擬一次小張和小明通電話(huà)的過(guò)程:
小張:喂,小明你能聽(tīng)得到我的聲音嗎咳秉?(第一次握手)
(如果信號(hào)正常婉支,小明能聽(tīng)到小張的聲音,那么小明肯定會(huì)告訴小張)
小明:我可以聽(tīng)到你說(shuō)話(huà)澜建,你能聽(tīng)到我說(shuō)話(huà)嗎向挖?(第二次握手)
小張:嘻嘻,我能聽(tīng)到你說(shuō)話(huà)了炕舵,那接下來(lái)我們就來(lái)通電話(huà)吧何之。(第三次握手)
在三次握手后,就能確定兩邊都沒(méi)什么問(wèn)題咽筋,就可以互相通信了溶推,如果是四次握手的話(huà)就會(huì)造成了資源浪費(fèi),如果是兩次握手的話(huà)就會(huì)有一邊不能確定另一邊是否有問(wèn)題奸攻,這就是為什么會(huì)是TCP三次握手蒜危。
請(qǐng)關(guān)注微信公眾號(hào):請(qǐng)快點(diǎn)喜歡我